STM32 SPI通信详解与动画演示
STM32 SPI通信详解
一、SPI简介
SPI(Serial Peripheral Interface) 是由Motorola公司提出的一种高速、全双工、同步的串行通信总线。它广泛应用于MCU与各种外设之间的通信,如Flash存储器、LCD显示屏、传感器、AD/DA转换器等。
SPI的主要特点
| 特性 | 说明 |
|---|---|
| 通信方式 | 同步串行、全双工 |
| 主从模式 | 支持单主多从 |
| 通信速率 | 可达数十MHz |
| 信号线数 | 4线(可简化为3线) |
| 数据位宽 | 通常8位或16位 |
二、SPI信号线说明
SPI总线由4根信号线组成:
| 信号线 | 全称 | 方向 | 功能说明 |
|---|---|---|---|
| SCK | Serial Clock | Master → Slave | 时钟信号,由主机产生 |
| MOSI | Master Out Slave In | Master → Slave | 主机发送、从机接收 |
| MISO | Master In Slave Out | Slave → Master | 从机发送、主机接收 |
| CS/SS | Chip Select / Slave Select | Master → Slave | 片选信号,低电平有效 |
信号时序关系
- CS:片选信号,拉低表示选中从机,开始通信
- SCK:时钟信号,每个时钟周期传输1位数据
- MOSI/MISO:数据在时钟边沿进行采样或切换
三、SPI工作模式
SPI有4种工作模式,由 CPOL(时钟极性) 和 CPHA(时钟相位) 两个参数决定:
| 模式 | CPOL | CPHA | 空闲时SCK | 采样边沿 |
|---|---|---|---|---|
| Mode 0 | 0 | 0 | 低电平 | 上升沿采样 |
| Mode 1 | 0 | 1 | 低电平 | 下降沿采样 |
| Mode 2 | 1 | 0 | 高电平 | 下降沿采样 |
| Mode 3 | 1 | 1 | 高电平 | 上升沿采样 |
最常用的是Mode 0和Mode 3,大多数SPI外设默认支持这两种模式。
四、SPI通信动画演示
下面是一个交互式的SPI通信动画演示,展示了Mode 0模式下的数据传输过程:
🎮 操作说明:
- 在 DATA 输入框中输入要发送的十六进制数据(如
A5、FF、00等) - 点击「发送」按钮开始传输动画
- 观察波形图中 CS、SCK、MOSI、MISO 四个信号的变化
- 点击波形区域可添加标记线,方便分析时序
- 使用右下角 速度按钮 调整动画播放速度(支持0.2x~1.5x)
五、STM32 SPI外设特性
STM32系列MCU内置硬件SPI控制器,主要特性包括:
硬件特性
- 支持主机/从机模式
- 支持全双工、半双工、单工通信
- 数据帧格式:8位或16位
- 波特率预分频器:2~256分频
- MSB/LSB先行可配置
- 支持DMA传输
- 支持中断和轮询方式
时钟配置
SPI时钟由APB总线时钟分频得到:
1 | |
分频系数可选:2, 4, 8, 16, 32, 64, 128, 256
六、STM32 HAL库SPI配置示例
初始化配置
1 | |
数据发送接收
1 | |
片选控制
1 | |
七、SPI应用注意事项
硬件设计
- 信号线长度:高速SPI时,信号线应尽量短,避免阻抗不匹配
- 上拉电阻:CS线建议加上拉电阻,防止误触发
- 去耦电容:SPI外设电源引脚需加去耦电容
软件配置
- 模式匹配:主从设备的CPOL/CPHA必须一致
- 速率选择:不要超过从设备支持的最大速率
- 时序间隔:某些器件在CS拉低后需要等待一段时间
常见问题
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 数据全0xFF | MISO线未连接或从机无响应 | 检查接线和从机供电 |
| 数据错位 | 时钟模式不匹配 | 核对CPOL/CPHA配置 |
| 通信不稳定 | 速率过高或干扰 | 降低波特率,检查布线 |
| 只能发不能收 | GPIO配置错误 | 检查MISO引脚配置 |
八、总结
SPI作为一种高速同步串行通信协议,在嵌入式系统中应用广泛。掌握SPI的工作原理和配置方法,对于嵌入式开发者来说非常重要。通过上面的动画演示,相信你对SPI的时序已经有了直观的理解。
相关资源
STM32 SPI通信详解与动画演示
http://example.com/2025/12/04/stm32-spi-introduction/