1. SPI通信基础与STM32硬件架构解析
SPI(Serial Peripheral Interface)作为嵌入式领域最常用的同步串行通信协议之一,在STM32开发中占据重要地位。我第一次接触SPI是在调试一个温湿度传感器模块时,当时被其简洁的四线制结构和高效的传输速率所吸引。与I2C相比,SPI没有复杂的地址机制和应答信号,在点对点通信场景下表现出更好的实时性。
STM32全系列芯片都内置了硬件SPI控制器,以F1系列为例,SPI1挂载在APB2总线(最高72MHz),SPI2/3挂载在APB1总线(最高36MHz)。硬件SPI控制器完全由DMA接管数据传输时,CPU负载几乎为零,这使得SPI特别适合高频数据采集场景。我曾用SPI接口以18MHz时钟驱动AD7606进行16位8通道同步采样,实测传输稳定性远超并行总线方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SPI物理层与工作模式深度剖析
2.1 四线制信号解析
- SCLK(Serial Clock):时钟信号由主机产生,频率可达fPCLK/2。在F407系列中,使用APB1总线时最高21MHz,APB2总线可达42MHz
- MOSI(Master Output Slave Input):主出从入数据线,传输方向固定
- MISO(Master Input Slave Output):主入从出数据线,需注意从机未选中时应置高阻态
- SS(Slave Select):低电平有效的片选信号,多从机系统中需特别注意GPIO驱动能力
实际布线时,SCLK建议串联22Ω电阻抑制振铃,SS线长度超过15cm时应加入74HC245等缓冲器
2.2 CPOL与CPHA的四种组合
通过CPOL(Clock Polarity)和CPHA(Clock Phase)可配置四种工作时序模式:
| 模式 | CPOL | CPHA | 时钟空闲状态 | 采样时刻 |
|---|---|---|---|---|
| 0 | 0 | 0 | 低电平 | 第一个跳变沿(上升沿) |
| 1 | 0 | 1 | 低电平 | 第二个跳变沿(下降 |
