本章目标:
-
理解三大同步串行总线(SPI、I²C、I²S)的原理与时序差异
-
掌握常见 STM32 系列微控制器中各总线的寄存器配置与驱动框架
-
通过实战案例,完成 SPI 驱动 TFT LCD、I²C 驱动温湿度传感器、I²S 驱动音频 Codec
章节结构
三大总线概览与对比
SPI
2.1 SPI 原理与时序
2.2 STM32 SPI 寄存器解析
2.3 SPI 驱动框架(中断 / DMA)
2.4 实战案例:SPI + DMA 驱动 TFT LCDI²C
3.1 I²C 原理与波特率
3.2 STM32 I²C 寄存器解析
3.3 I²C 驱动框架(事件 / 错误中断)
3.4 实战案例:I²C 驱动 BME280 温湿度传感器I²S
4.1 I²S 原理与音频帧格式
4.2 STM32 I²S 寄存器解析
4.3 I²S 驱动(DMA + 双缓冲)
4.4 实战案例:I²S 驱动 WM8994 音频 Codec本章小结与选型建议
2.1 三大总线概览与对比
特性 | SPI | I²C | I²S |
---|---|---|---|
线数 | 4(SCLK、MOSI、MISO、SS) | 2(SCL、SDA) | 3(CK、SD、WS) |
拓扑 | 主从式,多从需片选 | 多主多从,硬件仲裁 | 主从式,多从需片选 |
时钟 | 主设备输出 | 主设备输出 | 主设备输出 |
同步/异步 | 同步 | 同步 | 同步 |
速度 | 高(几十 Mbps) | 低(几百 kbps) | 中(几 Mbps,用于音频) |
典型应用 | Flash、LCD、传感器、DAC | 传感器、EEPROM、RTC | 音频 Codec、DAC、ADC |
硬件复杂度 | 中等,片选多时需多个 SS | 简单,地址编码 | 类似 SPI,但增加 WS(帧同步) |
2.2 SPI 原理与时序
2.2.1 SPI 基本工作模式
SPI(Serial Peripheral Interface)由 Motorola 提出,典型信号线:
-
SCLK:时钟,由主机输出
-
MOSI(Master Out Slave In)
-
MISO(Master In Slave Out)
-
SS / CS(Slave Select / Chip Select),低电平选中该从机
四种模式(Mode 0~3)决定时钟极性(CPOL)与相位(CPHA):
Mode | CPOL | CPHA | 描述
-----|------|------|---------------
0 | 0 | 0 | 上升沿采样,空闲低
1 | 0 | 1 | 下降沿采样,空闲低
2 | 1 | 0 | 下降沿采样,空闲高
3 | 1 | 1 | 上升沿采样,空闲高
时序示意图
CPOL=0, CPHA=0 (Mode 0) ___ ___ ___ _| |___| |___| | SCLK ___ ___ ___ ___ __| | | | |__ MOSI (数据在 SCLK 采样沿前稳定)
2.2.2 STM32 SPI 寄存器解析
以 SPI1 为例(基址 0x40013000):
-
SPI_CR1
-
DFF
:数据宽度(8/16 bit) -
CPOL
/CPHA
:时钟配置 -
BR[2:0]
:波特率分频器(fPCLK
-