1. 准备工作与环境搭建
在开始驱动SSD1306 OLED屏幕之前,我们需要准备一些硬件和软件工具。硬件方面,你需要一块STM32最小系统板(比如常见的STM32F103C8T6蓝色小板)、一块0.96寸的SSD1306 OLED屏幕(I2C接口)、几根杜邦线以及一个面包板用于连接。软件方面,你需要安装STM32CubeMX和Keil MDK或者STM32CubeIDE,这些都是STM32开发的常用工具。
我第一次接触OLED屏幕的时候,觉得这东西挺神奇的,这么小的一个屏幕居然能显示文字和图形,而且功耗还特别低。SSD1306驱动的OLED屏幕在嵌入式项目中特别常见,价格便宜,显示效果也不错,特别适合用来做传感器数据的实时显示或者简单的用户界面。
OLED屏幕上有四个引脚:VCC接3.3V或5V电源,GND接地,SCL是I2C时钟线,SDA是I2C数据线。有些模块上可能还有RES和DC引脚,但I2C模式下这两个引脚通常不需要连接。STM32的I2C引脚是固定的,比如I2C1的SCL在PB6,SDA在PB7,I2C2的SCL在PB10,SDA在PB11,具体要看你的芯片型号。
2. STM32CubeMX配置I2C接口
打开STM32CubeMX,首先选择你的STM32芯片型号。我用的是一块STM32F103C8T6,这款芯片性价比很高,资源也足够驱动OLED屏幕。在Pinout视图中,找到I2C1或者I2C2,根据你的接线选择。我习惯用I2C1,所以就把PB6和PB7配置为I2C1的SCL和SDA。
配置I2C参数的时候,需要注意SSD1306的I2C地址通常是0x78或者0x7A,具体要看模块的配置。大部分模块的地址是0x78,但有些模块可以通过电阻选择地址。I2C的速度模式选择标准模式(100kHz)或者快速模式(400kHz)都可以,SSD1306支持快速模式,所以我们可以选400kHz以提高刷新速度。
在Configuration标签页中,进入I2C配置,确保I2C模式设置为I2C,不要选错了。其他参数保持默认一般就可以工作。我还习惯开启I2C的中断,这样传输数据的时候可以更高效,不过简单的项目用轮询方式也可以。
时钟配置也很重要,确保系统时钟和I2C时钟都正确设置。STM32F103的时钟树配置稍微有点复杂,但CubeMX提供了可视化工具,设置起来并不难。一般我们会把系统时钟设置为72MHz,然后I2C时钟来自APB1总线,通常是36MHz。
最后生成代码的时候,选择你喜欢的IDE,我一般用Keil MDK,所以工具链选择MDK-ARM。代码生成选项中,建议勾选"生成外围设备初始化代码"和"为每个外围设备生成独立的.c和.h文件",这样代码结构更清晰。
3. 添加SSD1306驱动库
CubeMX生成的代码只是配置了硬件,要驱动OLED屏幕我们还需要SSD1306的驱动库。网上有很多开源的SSD1306驱动库,我推荐使用afiskon的stm32-ssd1306库,这个库功能完整,支持I2C和SPI接口,而


2479

被折叠的 条评论
为什么被折叠?



