基于STM32G4的0.96寸OLED显示屏驱动程序(HAL库),支持硬件/软件I2C

💡 原文中文,约33800字,阅读约需81分钟。
📝

内容提要

本文介绍了基于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等多个平台下载。

该驱动程序的创建者是谁?

该程序由江协科技创建,并免费开源共享。

🏷️

标签

➡️

继续阅读