1. 项目概述
最近在做一个嵌入式小项目,需要用到STM32通过I2C接口驱动0.96寸OLED显示屏。作为嵌入式开发中最常见的外设之一,OLED屏以其高对比度、低功耗的特性,在各种物联网设备和便携式仪器中广泛应用。这次我选择了STM32CubeIDE作为开发环境,它不仅集成了STM32CubeMX配置工具,还提供了完整的代码生成和调试功能,大大简化了开发流程。
这个项目看似简单,但实际涉及STM32的硬件I2C配置、OLED驱动芯片的初始化、图形库的移植等多个技术点。下面我就把整个实现过程拆解开来,包括硬件连接、CubeMX配置、驱动编写、图形显示等关键环节,特别会分享几个我在调试过程中踩过的坑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与连接
2.1 硬件选型说明
我使用的硬件组合是:
- 主控芯片:STM32F103C8T6(蓝色pill开发板)
- OLED显示屏:0.96寸SSD1306驱动芯片,分辨率128x64,I2C接口
- 其他:杜邦线若干,USB转TTL下载器
选择STM32F103C8T6是因为它价格便宜且性能足够,内置硬件I2C外设,社区资源丰富。而SSD1306驱动的OLED屏是目前最通用的型号,市面上大多数0.96寸OLED都采用这个驱动芯片。
2.2 电路连接要点
I2C接口只需要4根线:
- VCC -> 3.3V(注意OLED屏有5V和3.3V两种版本)
- GND -> GND
- SCL -> PB6(I2C1_SCL)
- SDA -> PB7(I2C1_SDA)
这里有个容易出错的地方:有些OLED模块需要上拉电阻,但大多数模块已经内置了4.7kΩ的上拉电阻。如果使用没有内置上拉电阻的模块,需要在SCL和SDA线上各加一个4.7kΩ的上拉电阻到3.3V。
注意:一定要确认OLED屏的工作电压!我最初错误地接到了5V,导致屏幕虽然能亮但通信不稳定,后来改到3.3V就正常了。
3. STM32CubeIDE环境配置
3.1 新建工程与芯片选型
- 打开STM32CubeIDE,选择"Start new STM32 project"
- 在芯片选择器中输入"STM32F103C8",选择对应的型号
- 设置工程名称(如"OLED_Test"),选择保存路径
- 在Project Explorer中会生成基础工程文件
3.2 I2C外设配置
- 打开.ioc文件进入CubeMX图形化配置界面
- 在"Pinout & Configuration"标签页中,找到"I2C1"
- 将I2C1的模式设置为"I2C"
- 确认PB6和PB7自动配置为I2C1_SCL和I2C1_SDA
- 在Configuration标签页中,设置I2C参数:
- Timing: 标准
