过往分享
【国民技术N32项目移植】1. 新建工程+LED与按键跳坑总结
【国民技术N32项目移植】2. 硬件IIC驱动OLED
前言
上一篇文章讲解了如何使用硬件IIC来驱动OLED,硬件IIC相比较于软件IIC有速度快的优势,如果是软件IIC驱动,刷新频率可能会跟不上。
因为使用了RT-Thread OS,为了便于OLED的驱动,会使用软件包SSD1306,但是SSD1306是使用RT-Thread OS的软件IIC驱动的,为了与硬件IIC结合起来使用,添加了SSD1306的软件包之后,需要修改驱动源码,本文将详细描述如何使用SSD1306的软件包结合硬件IIC来驱动OLED。
硬件IIC的代码实现参考前一篇帖子:【国民技术N32项目移植】2. 硬件IIC驱动OLED。
添加软件包
本文使用RT-Thread studio开发。点击RT-Thread Setting添加软件包。
- 添加软件包很方便,如下图所示。
- 修改OLED的从机地址为0x78, SSD1306的默认地址是0x3C,即0x78右移一位的值。默认是7位,虽然N32G45X的硬件IIC也是使用的7为地址,但是需要提供全地址,及0x78,所以这里修改为0x78。
这里只需要修改从机地址,即可,其他都不需要在修改,对硬件IIC不适用。
代码修改
SSD1306的代码是与RT-Thread OS的软件IIC结合起来使用的,所以我们需要对底层驱动代码进行修改才能切换为硬件IIC,修改方式如下:
- 添加硬件IIC头文件
- 修改SSD1306的写命令与写数据的驱动函数为硬件IIC的驱动函数,如下图所示:
main函数测试代码
完成了上述步骤之后,SSD1306就修改为了使用硬件IIC驱动了,但是我们还不知道是否修改成功,所以在main函数中写测试代码进行测试,如下:
i2c_config();
ssd1306_Init();
ssd1306_Fill(Black);
ssd1306_SetCursor(4, 0);
ssd1306_WriteString("N32G45XVL-STB", Font_7x10, White);
ssd1306_SetCursor(4, 24);
ssd1306_WriteString("elecfans", Font_11x18, White);
ssd1306_SetCursor(50, 42);
ssd1306_WriteString("-hehung", Font_11x18, White);
ssd1306_UpdateScreen();
试验效果
如下图,经过实际测试,硬件IIC比软件IIC刷新频率高很多,显示动态图像会比较流畅。
注意事项
- 因为修改了SSD1306的源码,如果重新加载ssd1306,修改的代码会被覆盖,所以要做好备份,防止代码丢失。或者将ssd1306的整个代码拷贝到其他目录下,如application目录下。
- 如果想要回复到默认的ssd1306的代码,只需要将ssd1306的软件包删掉之后,重新加载就可以了。
|