初始化 SSD1306 OLED 显示器
你需要发送初始化命令序列到 SSD1306 显示器来配置它。SSD1306 初始化命令包括设置显示模式、对比度、屏幕反向显示等。
void SSD1306_Init(void)
{
uint8_t init_cmds[] = {
0xAE, // Display off
0xD5, 0x80, // Set display clock divide ratio/oscillator frequency
0xA8, 0x3F, // Set multiplex ratio
0xD3, 0x00, // Set display offset
0x40, // Set display start line
0x8D, 0x14, // Charge pump setting
0x20, 0x00, // Set memory addressing mode
0xA0, // Set segment remap
0xC0, // Set COM output scan direction
0xDA, 0x12, // Set COM pins hardware configuration
0x81, 0x7F, // Set contrast control
0xA4, // Entire display ON (Resume to RAM content display)
0xA6, // Set normal display mode
0xD9, 0xF1, // Set pre-charge period
0xDB, 0x40, // Set VCOMH deselect level
0xAF // Display ON
};
for (uint8_t i = 0; i < sizeof(init_cmds); i++) {
I2C_Write(SSD1306_I2C_ADDRESS, init_cmds[i]);
}
}
配置 I2C DMA 传输
为了使用 DMA 传输数据到 SSD1306 显示器,您需要通过 I2C 使用 DMA 模式。以下是一个使用 I2C 和 DMA 传输显示数据的基本框架。
uint8_t I2C_TX_Buffer[128]; // 用于传输的数据缓冲区
void I2C_Write(uint8_t addr, uint8_t data)
{
uint8_t buf[2] = {0x00, data}; // 0x00 表示控制字节
DMA_Init_Config();
// 配置 DMA 进行传输
DMA_Init(DMA1_Channel6, &DMA_InitStruct); // 初始化 DMA1 通道6
DMA_Cmd(DMA1_Channel6, ENABLE); // 启动 DMA
// 启动 I2C 传输
I2C_GenerateSTART(I2C1, ENABLE);
I2C_Send7bitAddress(I2C1, addr, I2C_Direction_Transmitter);
I2C_SendData(I2C1, buf[0]);
while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BTF) == RESET);
I2C_SendData(I2C1, buf[1]);
}
|