Skip to content

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

License

Notifications You must be signed in to change notification settings

zeruns/STM32G4-OLED-SSD1306-I2C-HAL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于STM32的OLED屏驱动程序,支持软件或硬件I2C(HAL库)

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

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

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

测试硬件为NUCLEO-G474RE开发板

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

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

效果图

I2C协议简介

I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备(那些电平转化芯片),现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

I2C只有一跟数据总线 SDA(Serial Data Line),串行数据总线,只能一位一位的发送数据,属于串行通信,采用半双工通信。

半双工通信:可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替进行,其实也可以理解成一种可以切换方向的单工通信,同一时刻必须只能一个方向传输,只需一根数据线。

对于I2C通讯协议把它分为物理层和协议层物理层规定通讯系统中具有机械、电子功能部分的特性(硬件部分),确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准(软件层面)。

I2C物理层

I2C 通讯设备之间的常用连接方式

(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

我这里就不详细讲解了。

使用说明

工程使用Keil5创建,用Vscode+EIDE开发,两个软件都可以打开此工程。

工程文件全部使用UTF-8编码,如果打开显示乱码需要修改编辑器编码为UTF-8。

硬件I2C

STM32CubeMX配置,找到你要用的I2C外设的引脚,并设置引脚功能为SCL和SDA,如下图所示是I2C3的SCL。

接着配置I2C外设,启用对应的I2C外设,速度模式设置为 Fast Mode Plus,速度改成 1000,其他默认就行。

配置GPIO,上面设置完后会自动把那两个引脚配置为复用开漏输出模式,接着只需要把IO输出速度改成 Very High ,还有GPIO标签(User Label)定义分别改成I2C3_SCLI2C3_SDA就行,如果是用的别的I2C也可以设置成别的值,代码对应处要修改一下。改完后点击生成代码。

OLED.c文件里,将 #define OLED_USE_SW_I2C 注释掉,将 #define OLED_USE_HW_I2C 取消注释,如果你用的是别的引脚作为I2C引脚,并且定义了别的名字那就将代码里的 I2C3_SCLI2C3_SDA 也改一下。

软件I2C

STM32CubeMX配置,设置两个引脚作为I2C的SCL和SDA信号线,修改IO口的 User Lable 分别为I2C3_SCLI2C3_SDA,如果改成别的需要到代码里修改一下,IO模式设置为开漏输出,默认输出电平高电平,上拉输出,速度设置到最高,如下图所示。改为后点击生成代码。

OLED.c文件里,将 #define OLED_USE_HW_I2C 注释掉,将 #define OLED_USE_SW_I2C 取消注释,如果你用的是别的引脚作为I2C引脚,并且定义了别的名字那就将代码里的 I2C3_SCLI2C3_SDA 也改一下。

需要用的元件

江协科技的STM32入门套件:https://s.click.taobao.com/NTn9Txt

推荐阅读

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages