数码之家

 找回密码
 立即注册
搜索
查看: 298|回复: 2

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

[复制链接]
发表于 2024-3-17 21:07:39 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
基于STM32G474的0.96寸OLED(SSD1306)显示屏驱动程序(4针脚I2C接口),支持硬件IIC/软件IIC,HAL库版。

这款驱动程序比较完善,可以实现 英文、整数、浮点数、汉字、图像、二进制数、十六进制数 等内容显示,可以画点、直线、矩形、圆、椭圆、三角形等,支持多种字体,差不多相当于一个简易版图形库了。

该程序是基于江协科技的代码二次修改的,原版程序是基于STM32F103的,且只支持软件I2C,我修改后支持硬件I2C,也可以修改宏定义改成使用软件I2C。

测试硬件为NUCLEO-G474RE开发板

关于OLED的驱动原理,以及驱动程序的使用教程可以看江协科技的视频:https://url.zeruns.tech/L7j6y

  • STM32使用硬件I2C读取SHTC3温湿度传感器:https://blog.zeruns.tech/archives/692.html
  • 移植好U8g2图形库的STM32F407标准库工程模板:https://blog.zeruns.tech/archives/722.html
  • 基于STM32F1的0.96寸OLED显示屏驱动程序,支持硬件/软件I2C:https://blog.zeruns.tech/archives/769.html

电子/单片机技术交流群:820537762

效果图
1710612830448.gif
IMG_20240317_021954.jpeg
IMG_20240317_022008.jpeg

I2C协议简介
I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备(那些电平转化芯片),现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
I2C只有一跟数据总线 SDA(Serial Data Line),串行数据总线,只能一位一位的发送数据,属于串行通信,采用半双工通信。
半双工通信:可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替进行,其实也可以理解成一种可以切换方向的单工通信,同一时刻必须只能一个方向传输,只需一根数据线。
对于I2C通讯协议把它分为物理层和协议层物理层规定通讯系统中具有机械、电子功能部分的特性(硬件部分),确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准(软件层面)。

I2C物理层
I2C 通讯设备之间的常用连接方式
image.png
(1) 它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线SDA(Serial Data Line ),一条串行时钟线SCL(Serial Clock Line )。数据线即用来表示数据,时钟线用于数据收发同步
(3) 总线通过上拉电阻接到电源。当 I2C 设备空闲时会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
I2C通信时单片机GPIO口必须设置为开漏输出,否则可能会造成短路。
关于更多STM32的I2C相关信息和使用方法可以看这篇文章:https://url.zeruns.tech/JC0Ah
还有江协科技的STM32入门教程:https://www.bilibili.com/video/BV1th411z7sn?p=31
我这里就不详细讲解了。

使用说明
默认是使用硬件IIC的,用的I2C3,SCL是PA8,SDA是PC9。
硬件I2C
STM32CubeMX配置,找到你要用的I2C外设的引脚,并设置引脚功能为SCL和SDA,如下图所示是I2C3的SCL。
image-20240317002450658.png
接着配置I2C外设,启用对应的I2C外设,速度模式设置为 Fast Mode Plus,速度改成 1000,其他默认就行。
I2C829c2d4769742895.png
配置GPIO,上面设置完后会自动把那两个引脚配置为复用开漏输出模式,接着只需要把IO输出速度改成 Very High ,还有GPIO标签(User Label)定义分别改成I2C3_SCL和I2C3_SDA就行,如果是用的别的I2C也可以设置成别的值,代码对应处要修改一下。改完后点击生成代码。
I2C_GPIO.png
OLED.c文件里,将 #define OLED_USE_SW_I2C 注释掉,将 #define OLED_USE_HW_I2C 取消注释,如果你用的是别的引脚作为I2C引脚,并且定义了别的名字那就将代码里的 I2C3_SCL 和 I2C3_SDA 也改一下。
image-20240317003414458.png
软件I2C
STM32CubeMX配置,设置两个引脚作为I2C的SCL和SDA信号线,修改IO口的 User Lable 分别为I2C3_SCL和I2C3_SDA,如果改成别的需要到代码里修改一下,IO模式设置为开漏输出,默认输出电平高电平,上拉输出,速度设置到最高,如下图所示。改为后点击生成代码。
I2C.png
OLED.c文件里,将 #define OLED_USE_HW_I2C 注释掉,将 #define OLED_USE_SW_I2C 取消注释,如果你用的是别的引脚作为I2C引脚,并且定义了别的名字那就将代码里的 I2C3_SCL 和 I2C3_SDA 也改一下。
image-20240317001749175_bebe48917fc7a6d9e041be6ae5177659.png

需要用的元件
  • STM32开发板入门套件:https://u.jd.com/fQS0YAe
  • STM32G474开发板:https://s.click.taobao.com/8OwQ8vt
  • OLED模块:https://s.click.taobao.com/EF0Evwt
  • 杜邦线:https://s.click.taobao.com/VMkDvwt
  • 面包板:https://s.click.taobao.com/bhg8Txt
  • DAPLink(可代替ST-Link,带虚拟串口):https://s.click.taobao.com/QVQ8Txt
江协科技的STM32入门套件:https://s.click.taobao.com/NTn9Txt

程序
完整工程下载地址:
百度网盘:链接: https://url.zeruns.tech/0CQJG 提取码: 0169
123网盘(不限速):https://www.123pan.com/s/2Y9Djv-O0cvH.html 提取码:vvDt

Gitee开源地址:https://gitee.com/zeruns/STM32-HAL-OLED-I2C
GitHub开源地址:https://github.com/zeruns/STM32G4-OLED-SSD1306-I2C-HAL
求点个Star
工程使用Keil5创建,用Vscode+EIDE开发,两个软件都可以打开此工程。
工程文件全部使用UTF-8编码,如果打开显示乱码需要修改编辑器编码为UTF-8。

推荐阅读
  • 高性价比和便宜的VPS/云服务器推荐: https://blog.zeruns.tech/archives/383.html
  • 做了个三相电量采集器开源出来,可以方便监测家里用电情况:https://blog.zeruns.tech/archives/771.html
  • 我的世界开服教程:https://blog.zeruns.tech/tag/mc/
  • 幻兽帕鲁开服教程:https://blog.zeruns.tech/tag/PalWorld/
  • 睿登RD6012P数控可调电源简单开箱评测,60V 12A数控直流电源:https://blog.zeruns.tech/archives/740.html
  • 拓竹P1SC 3D打印机开箱体验:https://blog.zeruns.tech/archives/770.html
  • 不同品牌和种类的电容与电感实测对比(D值、Q值、ESR、X):https://blog.zeruns.tech/archives/765.html


打赏

参与人数 2家元 +27 收起 理由
cao57508 + 12 謝謝分享
jf201006 + 15 謝謝分享

查看全部打赏

发表于 2024-3-18 15:25:22 | 显示全部楼层
开发板不便宜吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-18 15:50:47 | 显示全部楼层
soma 发表于 2024-3-18 15:25
开发板不便宜吧

同学手里低价收的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 14:49 , Processed in 0.280800 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表