有了这块 0.96 寸 OLED 屏幕(SSD1306 驱动),你的单片机终于有了自己的“脸”。我们要学习的这个新协议叫 I2C (Inter-Integrated Circuit),它是嵌入式世界里应用最广的协议之一,因为它的硬件连接极其简单:只需要两根线。
1. 认识 I2C:两根线的“交响乐”
I2C 协议由飞利浦(现 NXP)发明,它的核心在于“主从架构”和“寻址机制”。
- SCL (Serial Clock):时钟线,由主设备(STM32)产生稳定的节拍。
- SDA (Serial Data):数据线,所有的信息、指令和数据都在这根线上传输。
为什么它比串口厉害? 串口通常只能“一对一”,而 I2C 可以在同一组引脚上连接多达 128 个设备(如屏幕、温湿度传感器、陀螺仪),只要它们的“地址”不一样,就像是总线上的“门牌号”。
2. 硬件连接:别接错 5V
对于 STM32F103C8T6,我们通常使用 I2C1。
| OLED 引脚 | STM32 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 严禁接 5V,否则可能烧毁 OLED 驱动芯片。 |
| GND | GND | 电源负极。 |
| SCL | PB6 | I2C1 的时钟信号。 |
| SDA | PB7 | I2C1 的数据信号。 |
3. STM32CubeIDE 配置 (.ioc)
- 在左侧点击 Connectivity -> I2C1。
- 将 I2C 模式设置为 I2C。
- 参数设置 (Parameter Settings):
- I2C Speed Mode:保持 Standard Mode (100KHz) 即可,对于初学者更稳;如果你追求流畅,可以选 Fast Mode (400KHz)。
- 你会看到引脚图上 PB6 (SCL) 和 PB7 (SDA) 变绿了。
- 保存并生成代码。
4. 为什么要用库?
串口发数据很简单(发个字符就行),但 OLED 屏幕非常复杂。要显示一个字母 ‘A’,你需要告诉驱动芯片:
- “我要在某个坐标画点”。
- “这个点的颜色是亮还是灭”。
- “点阵模组是如何排列的”。
为了不让代码写成“天书”,我们通常会引入成熟的开源驱动库。最常用的是 ssd1306_stm32 或轻量化的 u8g2。