uint8_t SSD1306_Init (void) {
if (HAL_I2C_IsDeviceReady(&H_I2C, SSD1306_I2C_ADDR, 1, 20000) != HAL_OK) {
>
/* Send slave address */
hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);
deAddress > DR
DR 쪽에 값을 넣어주면 그 후부터는 Hardware가 처리
I2C_HandleTypeDef hi2c2;
{
I2C_TypeDef *Instance;
}
typedef struct
{
__IO uint32_t CR1;
__IO uint32_t CR2;
__IO uint32_t OAR1;
__IO uint32_t OAR2;
__IO uint32_t DR;
__IO uint32_t SR1;
__IO uint32_t SR2;
__IO uint32_t CCR;
__IO uint32_t TRISE;
} I2C_TypeDef;
SSD1306_WRITECOMMAND(0xAE);
>
10101110 > Display OFF
10101111 > Display ON
SSD1306_UpdateScreen(); //display
기존에 버퍼에 담았던걸 > SSD1306_WRITECOMMAND
>
/* Write data to DR */
hi2c->Instance->DR = *hi2c->pBuffPtr;
I2C 통신으로 ssd1306으로 보냄
/* Write multi data */
ssd1306_I2C_WriteMulti(SSD1306_I2C_ADDR, 0x40, &SSD1306_Buffer[SSD1306_WIDTH * m], SSD1306_WIDTH);
SSD1306_DrawBitmap(0,0,ojtubelog3,128,64,1);
내가만든 비트맵
>>
void SSD1306_DrawPixel(uint16_t x, uint16_t y, SSD1306_COLOR_t color) {
/* Set color */
if (color == SSD1306_COLOR_WHITE) {
SSD1306_Buffer[x + (y / 8) * SSD1306_WIDTH] |= 1 << (y % 8);
} else { // 검은색일때
SSD1306_Buffer[x + (y / 8) * SSD1306_WIDTH] &= ~(1 << (y % 8));
}
}
>> 버퍼에담음 > SSD1306_UpdateScreen();
>>
1. SSD1306_Init > slave 에게 주소 보내고
2. SSD1306_WRITECOMMAND > 데이터값 보냄