《基于波特律动驱动的OLED开发指南:移植、取模与多字体显示》
摘要:本文介绍了STM32中OLED中文显示的完整实现过程,包括HAL库I2C配置、驱动代码移植以及汉字显示方法。重点讲解了使用波特律动LED字模生成器获取汉字点阵数据,处理UTF-8编码格式的注意事项,以及两种字模载入方式(直接粘贴和融入原有数组)。文章还详细说明了解决重名字模数组的方法,并强调在font.h中的结构体声明要点。最后展示了通过正确配置实现OLED中文显示的效果,感谢相关开源贡献者
目录
1.HAL库配置
基本配置可以看我往期的文章STM32烧录必看:STLink接线与供电详解(含用 JTAG 连 ST-Link),讲解得很到位了,主要是配置一下I2C。

对于要开启哪个I2C通道,可以先下载例程代码,看看它使用的是哪个。以下图为例,就是使用的I2C2.

基本上不需要修改就可以使用了,如果你需要更快的传输,可以将速度改快一点

2. 代码驱动与移植
打开波特律动LED字模生成器网站,根据自己的OLED芯片选择对应的驱动进行下载。

解压之后在Core->Inc路径下找到font.h和oled.h

在Core->Src路径下font.c和oled.c

将其添加到自己的工程当中,你可以像我一样创建一个OLED的文件来存放与之相关的文件。
显示结果就是这样

PS:如果你创建了OLED文件夹,记得在CMakeLists.txt文件里面声明一下

3.中文显示
3.1 汉字取模
打开波特律动LED字模生成器网站

第一步:对汉字大小进行定制
第二步:输入汉字
第三步:获取到对应汉字的字模
第四步:复制到工程文件里面
3.2 编码格式
所有文件都应该以UTF-8的格式进行编码。
这里以clion为例,将第三步里的三个编码全部改成UTF-8的格式

如果在这里显示UTF-8,则说明编码格式是正确的。

如果这里没有显示UTF-8,如GBK编码等,可以在编码器中点击+号,添加文件。

如果显示了下图的情况,果断选择转化。

PS:我这里是为了演示才显示的UTF-16,实际应该为UTF-8
最后在CMakelists.txt文件中添加以下代码
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -finput-charset=UTF-8 -fexec-charset=UTF-8")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finput-charset=UTF-8 -fexec-charset=UTF-8")

3.实战操练
3.1 字模载入
打开font.c文件,粘贴获得的字模。
以下介绍两种载入的方法
3.1.1直接粘贴
3.1.1.1正常情况
在font.c文件的底部进行粘贴

在font.h文件里面进行声明。注意要写extern关键词,因为main.c文件里面要使用

3.1.1.2重名问题
由于每次生成的字模默认是存储在zh16x16[][36]数组里面的,难免会遇到重名问题。此时只需要修改一下数组的名称,再重复上述操作即可。主要关注以下几个点
在font.c文件里面,1与2的名称不能一样。
注意后面的数组引用,也要进行相应的修改。

在font.h文件里面,声明的是结构体,而不是数组。这点要注意

最后,在main.c文件里面,使用的也是结构体

3.1.2融入大家庭
直接在原有的字模数组里面添加,注意长度方面也要做出修改。如果你不知道或者懒得计算有多少个字,可以使用sizeof(zh16x16)
优点:
- 可以避免记忆数组名,直接以长宽为标准记忆。
- 可以避免重名现象。
- 也可以减少对数组的声明等。
缺点:操作繁琐了一点,对于一些小型项目不是很方便

结果呈现

最后非常感谢keysking这些大佬的高质量教学,以及开源软件,让我能更深入了解OLED的相关知识。
更多推荐



所有评论(0)