嵌入式技术论坛
直播中

刘洋

7年用户 1259经验值
私信 关注
[经验]

请教大神怎样去使用I2C接口点亮OLED屏幕呢

首先要保证在添加测试代码前的工程能正常运行,然后按如下步骤操作:

添加u8g2库

直接打开工程下的RT-Thread Settings文件,此时有两种办法可以添加u8g2库。

这里是列表文本在软件包中心栏目下点击“立即添加”按钮,在弹出的软件包中心界面检索u8g2,检索结果有两个,添加第一个即可。

在“drivers”栏目点击“更多配置”或者点击右边的箭头,在切换的详细页中选中“软件包”界面,找到”multimedia packages“并展开,然后选中u8g2,这里选中的是老版本而非官方版本,两种的区别请自行测试。

配置u8g2和i2c

这里就直接上图了,按下图的配置,例程可以直接运行。

u8g2的配置

i2c的配置

这里注意需要修改默认的i2c引脚,国民技术N32G-45XVL-STB开发板i2c1的scl和sda默认引脚为PB6和PB7,因此scl改为58,sda改为59。

(这里有个涉及pin脚的细节需要注意,详见文末pin脚说明)

上述两个配置完成之后,组件页面的i2c驱动选项也自动选中了。

在settings页面点击保存(或Ctrl+s),将自动更新项目,将u8g2库源码和例程,以及i2c相关的宏打开。

更新完成之后可以在项目管理器中看到u8g2已经配添加到项目中,并且测试例程注册到命令行中。

编译与下载

这没啥好说的,需要注意的是我们使用的是i2c驱动屏幕,因此需要将u8g2_port.h文件下的“#include ”屏蔽,否则编译会报没有该文件的错误。编译完成后下载即可。

测试

例程中默认打开了finsh命令功能,可以直接使用串口执行测试例程。连接上开发板对应的串口(115200 8N1)之后,重启开发板,可以看到rt-thread的开机打印。

输入help列出所支持的指令,可以看到前面注册的例程指令。

执行指令“ssd1306_12864_hw_i2c_example”,稍等片刻,即可看到oled屏幕出现例程中设定的图案和文字。


pin脚说明

国民技术N32G-45XVL-STB开发板使用的是100pin的芯片(N32G45XVL),但是rt-thread官方例程按64pin芯片(N32G45XRL)测试的。

在本次测试中使用的i2c1信号在不同封装下pin脚不同(但都是PB6和PB7),100pin封装下scl和sdc对应的pin脚序号分别为92和93,64pin封装下对应的pin脚序号是58和59。上述信息参考《UM_N32G45x系列用户手册V2.0.0.pdf》以及项目文件”Libraries\rt_drivers\drv_gpio.c”。

如果不修改项目(即按64pin封装定义),则按上述流程即可跑通例程。

如果要更正为100pin,需要修改两个地方:

Libraries\rt_drivers\drv_gpio.c文件下的N32F10X_PIN_NUMBERS宏定义要修改为100。

rtconfg.h文件下的i2c1 scl和sda管脚要修改为92和93(这里必须吐槽一下,虽然在settings界面下可配置scl和sda为92和93,但是实际不能更新到代码中,因为对话框有规则限制最大值只能为64,大于64的值被忽略,因此需要手动修改rtconfig.h文件)

注意更改为100pin之后,led对应的序号也发生变更,需要更新序号,否则例程中的led闪烁将不能有效执行。

其他问题

虽然例程名称看起来使用了硬件i2c,但是实际上使用的依然是gpio模拟的i2c。

我这个小oeld屏幕右边固定会有两列像素不能控制,而且左边显示缺了一列,屏的资料翻不到了,就不去定位问题了。

原作者:子期非女

更多回帖

发帖
×
20
完善资料,
赚取积分