【点亮OLED显示屏】

意法半导体 STM32WBA65RIVx  支持硬件 I2C,Fast Mode Plus 能支持高达 IMbps 的 I2C 速率,如此高速的 I2C 提高了刷屏速度,如下:

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

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

引脚配置:

这里支持的 I2C 最高速率为 1000Kbps,刷屏速度很快

I2C 驱动代码如下:

复制

 
  1. sret I2C1_Wr1B(u8 addr, u8 reg, u8 dat)
  2. {
  3.     if (HAL_I2C_Mem_Write(&hi2c1, addr << 1, reg, I2C_MEMADD_SIZE_8BIT, &dat, 1, 100) != HAL_OK)
  4.     {
  5.         return SR_ERR;
  6.     }
  7.     return SR_OK;
  8. }
复制

 
  1. sret I2C1_WrBuf(u8 addr, u8 reg, void* buf, I2C1_LEN_T len)
  2. {
  3.     if (HAL_I2C_Mem_Write(&hi2c1, addr << 1, reg, I2C_MEMADD_SIZE_8BIT, buf, len, 100) != HAL_OK)
  4.     {
  5.         return SR_ERR;
  6.     }
  7.     return SR_OK;
  8. }

将显示缓存区写入显示屏时,可以使用HAL库函数直接将整个缓存区写入显示屏

OLED 驱动代码如下

复制

 
  1. void OLED_SSD1306_Init(void)
  2. {
  3.     u8 i;
  4.     OLED_SSD1306_IIC_Init();
  5.     for (i=0; i<sizeof(OLED_SSD1306_CONFIG_TABLE); i++)
  6.     {
  7.         OLED_SSD1306_W_CMD(OLED_SSD1306_CONFIG_TABLE[i]);
  8.     }
  9. }
复制

 
  1. void OLED_SSD1306_Clear(u8 color)
  2. {
  3.     u8 i;
  4.     for(i=0; i<8; i++)
  5.     {
  6.         OLED_SSD1306_SetXY(0, i);
  7.         OLED_SSD1306_FillnB(color, 128);
  8.     }
  9. }
复制

 
  1. void OLED_SSD1306_Draw(void* buf, u8 x, u8 page, u8 w, u8 h)
  2. {
  3.     u8 i, *img;
  4.     img = buf;
  5.     for(i=0; i<(h>>3); i++)
  6.     {
  7.         OLED_SSD1306_SetXY(x, (u8)(page+i));
  8.         OLED_SSD1306_WritenB(0x40, img, w);
  9.         img+=w;
  10.     }
  11. }

【动态OLED显示屏】

驱动 OLED 只是应用的第一步,很多场景下,需要显示屏有不同的动态效果,例如显示动态波形,图像这里开辟一块 10K 的缓存给 OLED 进行绘制使用,最少需要 1K,调用绘制函数在这 1K 的内存里绘制图形,绘制完更新到显示屏上,视频如开头


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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐