前言:STM32的SPI通信协议是STM32较为常用的一种与外设进行通信的方式。它相较于I2C通信有着频率高,传输速度快。但是SPI如果要挂载多个从机,就必须要多根数据线SS进行片选操作,所以硬件开销较大,但配置较I2C简单。
一、SPI协议简介
SPI为同步时序,就是数据的发送与接收是遵循同一数据线。SPI支持总线挂载多个设备,通过多条线进行片选通信。SPI有四根通信线,其中SCK为时钟线,MOSI为主机发送数据的线,MISO为主机接收从机信号的线,还有SS线为片选信号线,用于选择和哪个从机通信。SPI为全双工模式,可支持同时进行主机发送和接收,但是同一时间只能与一个从机通信,不可同时与两个从机进行通信。但是SPI没有应答机制,所以可能数据传输会出现错误而没有反馈,这一点相较I2C不同。
二、SPI硬件电路
所有从机挂载在同一根数据线上,主机引出多条SS控制线。其中输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入。数据传输方向为主机通过MOSI输出,从机通过MISO输入。数据在一条线上为单向传输。
三、SPI通信方式
首先,闲置状态时,NSS(SS)为高电平。当选择某一从机进行通信时,NSS降为低电平。
而后数据开始通过MOSI与MISO数据线进行传输,数据由高位向低为传输。且当时钟线为高电平时传输一个位的数据,同I2C一样为一位一位传输。
图片来源于江协科技
数据在移位寄存器里,然后一位一位的在主机与从机中传输。
四、SPI模式的配置