基于STM32G4的0.96寸OLED显示屏驱动程序(HAL库),支持硬件/软件I2C
内容提要
本文介绍了基于STM32G474的0.96寸OLED(SSD1306)显示屏驱动程序,支持硬件IIC/软件IIC,可以显示英文、整数、浮点数、汉字、图像、二进制数、十六进制数等内容,支持绘制点、直线、矩形、圆、椭圆、三角形等,支持多种字体。提供了硬件和软件I2C的配置方法,以及相关的代码和工程下载地址。
延伸解读
硬件I2C与软件I2C的取舍
文章默认使用硬件I2C(I2C3,SCL=PA8,SDA=PC9),也可通过宏定义切换为软件I2C。硬件I2C由外设自动处理时序,不占用CPU,但引脚固定;软件I2C用GPIO模拟,引脚灵活,但需注意延时参数Delay_time(170MHz主频下为3,100MHz以内可改为0),否则可能超出I2C最大速度。选择时需权衡引脚资源与CPU开销。
显存缓冲与局部刷新机制
所有显示函数只操作全局显存数组OLED_DisplayBuf[8][128],需调用OLED_Update或OLED_UpdateArea才会真正发送到屏幕。这种设计将绘图与通信解耦,便于批量更新。局部刷新函数OLED_UpdateArea会按页对齐,若指定区域跨页,同一页的剩余部分也会被更新,因此刷新区域可能略大于预期,但能减少数据传输量。
图形绘制算法的效率考量
画线、画圆、画椭圆均采用Bresenham算法,避免耗时的浮点运算,适合在STM32G4这类无FPU或主频有限的MCU上运行。填充三角形使用pnpoly算法判断点是否在多边形内,填充圆和椭圆则通过遍历对称点实现。这些算法在保证精度的同时,兼顾了执行效率,但填充大图形时仍可能占用较多CPU时间。
移植与配置注意事项
工程基于STM32G474和HAL库,使用Keil5或VSCode+EIDE开发,文件为UTF-8编码。若使用其他I2C引脚,需在CubeMX中将User Label设为I2C3_SCL和I2C3_SDA,并修改OLED.c中的宏定义。显示中文时,编译器需添加--no-multibyte-chars选项(AC6不用),且汉字必须在OLED_Data.c的OLED_CF16x16数组中定义,否则显示问号方框。
Q&A
STM32G4的OLED显示屏驱动程序支持哪些显示内容?
该驱动程序支持显示英文、整数、浮点数、汉字、图像、二进制数和十六进制数等内容。
如何配置STM32G4的硬件I2C?
在STM32CubeMX中配置I2C外设的引脚为SCL和SDA,并设置为开漏输出模式,启用I2C外设,设置速度模式为Fast Mode Plus。
该驱动程序是否支持软件I2C?
是的,该驱动程序可以通过修改宏定义来选择使用软件I2C。
I2C通讯协议的优点是什么?
I2C协议引脚少、硬件实现简单、可扩展性强,适合多个集成电路间的通讯。
如何下载完整的OLED驱动程序工程?
完整工程可以从百度网盘、123网盘、Gitee和GitHub等多个平台下载。
该驱动程序的创建者是谁?
该程序由江协科技创建,并免费开源共享。