目录
1. SPI 通信介绍
- SPI(Serial Peripheral Interface)是由 Motorola 公司开发的一种通用数据总线
- 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
- 同步,全双工
- 支持总线挂载多设备(一主多从)
2. SPI 硬件电路
- 所有SPI设备的SCK、MOSI、MISO分别连在一起
- 主机另外引出多条SS控制线,分别接到各从机的SS引脚
- 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
3. SPI 移位示意图
SPI 通信的实质就是主机和从机进行数据交换,如果另一方不需要对方的数据的话此时只需要用0x00或者0xFF来和对方进行数据交换即可。
缺点:存在一些资源浪费的现象,比如只需要单方向传输数据却又双方交换数据。
4. SPI 时序基本单元
4.1 起始与终止条件
5. SPI 四种模式
在交换一个字节的流程中 SPI 根据 CPOL 和CPHA 的取值不同具有四种不同的模式
- CPOL(极性):规定了 SCK 时钟信号空闲状态的电平。
- CPHA(相位):规定了数据是在 SCK 时钟的上升沿被采样还是下降沿被采样。
模式0:CPOL = 0,CPHA = 0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样(第一个边沿),数据在SCK时钟的下降沿切换
模式1:CPOL = 0,CPHA = 1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样(第二个边沿),数据在SCK时钟的上升沿切换
模式2:CPOL = 1,CPHA = 0。SCK串行时钟线空闲是为高电平,数据在SCK时钟的下降沿被采样(第一个边沿),数据在SCK时钟的上升沿切换
模式3:CPOL = 1,CPHA = 1。SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样(第二个边沿),数据在SCK时钟的下降沿切换
6. SPI 基本结构
7. STM32 硬件 SPI 配置
7.1 初始化 GPIO
7.2 初始化 SPI 结构体
7.2 STM32 硬件 SPI 交换一个字节
因为 SPI 都是和从机进行交换数据的,因此函数参数为需要发送的数据,返回值为交换完接收到的对方的数据。