stm32中SPI通信协议

总结stm32中的SPI通信

概要

SPI的工作方式与串行通信略有不同 - 它使用同步数据总线而不是异步数据总线。考虑到这一点,它使用单独的数据线和时钟,使接收端和发送端彼此保持完美同步。时钟是一个振荡信号,它告诉接收器何时对数据线上的位进行采样。这是时钟信号的上升沿或下降沿。当接收器检测到该边沿时,它将立即查看数据线以读取下一个位。SPI受欢迎的一个原因是,接收硬件可以是一个简单的移位寄存器,比异步串行通信所需的UART更简单、更便宜。

SPI通信协议有四根线组成:CS(NSS、SS)、SCK、SDI、SDO 。主要应用在EEPROM、FLASH、实时时钟、AD转换器上,以及数字信号处理器和数字信号解码器之间。

基本特点:

  1. 全双工
  2. 同步
  3. 串行
  4. 可以多主机
  5. 只有主机可以产生信号

如果主机连接多个从设备时,则每个从设备上都需要有一个片选引脚接入到主设备机中,当我们的主设备希望和某个从设备通信时,需要将对应从设备的片选引脚电平拉低。同时,SPI协议还规定时钟信号必须由主机提供给从机,从机自身不能产生和控制时钟信号,没有时钟信号同步从机不能正常工作。

主机和从机的连接方式:

时钟配置

由于SPI是同步的通信协议,所以其是需要时钟的。

配置三个参数:

  1. 时钟频率:理论上可以配置任意大小的频率,但是一般受限于系统可以提供的时钟大小,SPI最大时钟频率。
  2. 时钟极性:CPOL,表示SPI总线的极性,当其为0时,SPI总线的空闲状态是低电平,反之为高电平。
  3. 时钟相位:CPHA,表示SPI总线的相位,当其为0的时候,表示从第一个跳变沿开始采样,为1的时候表示从第二个跳变沿开始采样。

CPOL和CPHA可以组合出四种工作模式,可以根据不同器件的支持情况和自己的需求进行选择和配置。

SPI通讯的优缺点

优点:

  1. 全双工通讯,传输速度快
  2. 没有开始位、停止位。数据传输不会终止

缺点:

  1. 没有校验位,数据传输的准确性不足
  2. 相较于I2C,其有4根线比较复杂

编程

初始化结构体定义

1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct
{
uint16_t SPI_Direction; /*设置SPI的单双向模式 */
uint16_t SPI_Mode; /*设置SPI的主/从机端模式 */
uint16_t SPI_DataSize; /*设置SPI的数据帧长度,可选8/16位 */
uint16_t SPI_CPOL; /*设置时钟极性CPOL,可选高/低电平*/
uint16_t SPI_CPHA; /*设置时钟相位,可选奇/偶数边沿采样 */
uint16_t SPI_NSS; /*设置NSS引脚由SPI硬件控制还是软件控制*/
uint16_t SPI_BaudRatePrescaler; /*设置时钟分频因子,fpclk/分频数=fSCK */
uint16_t SPI_FirstBit; /*设置MSB/LSB先行 */
uint16_t SPI_CRCPolynomial; /*设置CRC校验的表达式 */
} SPI_InitTypeDef;


stm32中SPI通信协议
https://ysc2.github.io/ysc2.github.io/2023/12/02/stm32中SPI通信协议/
作者
Ysc
发布于
2023年12月2日
许可协议