[STM32WBA] 【NUCLEO-WBA65RI 测评】点亮 OLED 12864 显示
·
【点亮OLED显示屏】
意法半导体 STM32WBA65RIVx 支持硬件 I2C,Fast Mode Plus 能支持高达 IMbps 的 I2C 速率,如此高速的 I2C 提高了刷屏速度,如下:

刚好前几天自制了 Arduino UNO 扩展板,可以直接连接在开发板上。

开发板上 I2C1 口是 PB1、PB2,对这个接口进行配置:

引脚配置:

这里支持的 I2C 最高速率为 1000Kbps,刷屏速度很快
I2C 驱动代码如下:
复制
sret I2C1_Wr1B(u8 addr, u8 reg, u8 dat){if (HAL_I2C_Mem_Write(&hi2c1, addr << 1, reg, I2C_MEMADD_SIZE_8BIT, &dat, 1, 100) != HAL_OK){return SR_ERR;}return SR_OK;}
复制
sret I2C1_WrBuf(u8 addr, u8 reg, void* buf, I2C1_LEN_T len){if (HAL_I2C_Mem_Write(&hi2c1, addr << 1, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 100) != HAL_OK){return SR_ERR;}return SR_OK;}
将显示缓存区写入显示屏时,可以使用HAL库函数直接将整个缓存区写入显示屏
OLED 驱动代码如下
复制
void OLED_SSD1306_Init(void){u8 i;OLED_SSD1306_IIC_Init();for (i=0; i<sizeof(OLED_SSD1306_CONFIG_TABLE); i++){OLED_SSD1306_W_CMD(OLED_SSD1306_CONFIG_TABLE[i]);}}
复制
void OLED_SSD1306_Clear(u8 color){u8 i;for(i=0; i<8; i++){OLED_SSD1306_SetXY(0, i);OLED_SSD1306_FillnB(color, 128);}}
复制
void OLED_SSD1306_Draw(void* buf, u8 x, u8 page, u8 w, u8 h){u8 i, *img;img = buf;for(i=0; i<(h>>3); i++){OLED_SSD1306_SetXY(x, (u8)(page+i));OLED_SSD1306_WritenB(0x40, img, w);img+=w;}}
【动态OLED显示屏】
驱动 OLED 只是应用的第一步,很多场景下,需要显示屏有不同的动态效果,例如显示动态波形,图像这里开辟一块 10K 的缓存给 OLED 进行绘制使用,最少需要 1K,调用绘制函数在这 1K 的内存里绘制图形,绘制完更新到显示屏上,视频如开头




---------------------
作者:gtbestom
链接:https://bbs.21ic.com/icview-3498496-1-1.html?_dsign=7f824179
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
更多推荐

所有评论(0)