13、SPI
1 SPI基本情况
1.1 SPI简介
Serial Peripheral Interface(SPI),即串行外设设备接口,是一种高速的全双工同步通信总线。
1.2 SPI与IIC比对
功能 | SPI | IIC |
通信方式 | 同步串行全双工 | 同步串行半双工 |
总线接口 | MOSI、MISO、SCL、CS | SDA、SCL |
拓扑结构 | 一主多从、一主一从 | 多主从 |
通信速率 | 50MHz以下 | 100KHz、400KHz、3.4MHz |
从机选择 | 片选引脚选择 | SDA上设备地址片选 |
数据格式 | 8/16位 | 8位 |
传输顺序 | MSB/LSB | MSB |
1.3 SPI四种工作模式
SPI的四种工作模式由时钟极性(CPOL)个时钟相位(CPHA)决定,通信双方必须配置为相同的模式。
CPOL=0,空闲时保持低电平;CPOL=1,空闲时保持高电平。
CPHA=0,在上升沿进行采样;CPHA=1,在下降沿进行采样。
2 SPI 工作原理
2.1 SPI相关寄存器
寄存器名称 | 作用 | 位 | 功能 |
CR1 | 配置SPI核心参数 | 0 | 0:上升沿采样 1:下降沿采样 |
1 | 0:空闲低电平 1:空闲高电平 | ||
2 | 0:从模式 1:主模式 | ||
3 ~ 5 | 设置时钟频率 | ||
6 | 0:禁用SPI 1:使能SPI | ||
7 | 0:先发MSB 1:先发LSB | ||
10 | 0:全双工 1:仅接收 | ||
11 | 0:8位数据帧 1:16位数据帧 | ||
15 | 0:双线双向模式 1:单线双向模式 | ||
DR | 数据读写接口 | 0 ~ 7 | 储存接收和发送的数据 |
2.1 SPI配置步骤
1、初始化SPI:HAL_SPI_Init()
2、配置SPI MSP:HAL_SPI_MSPInit()
3、使能SPI外设:__HAL_SPI_ENABLE()
4、实现SPI收发:HAL_SPI_Transmit()/HAL_SPI_Receive()
2.2 SPI初始化配置
SPI的初始化配置由结构体SPI_InitTypeDef完成,关键成员如下
成员 | 作用 | 可选值 |
Mode | 设置主从模式 | 主机:SPI_MOED_MASTER 从机:SPI_MODE_SLAVE |
Direction | 设置通信方向 | 全双工:SPI_DIRECTION_2LINES 只接收:SPI_DIRECTION_2LINES_RXONLY 单线:SPI_DIRECTION_1LINE |
DataSize | 设置数据帧长度 | 8位:SPI_DATASIZE_8BIT 16位:SPI_DATASIZE_16BIT |
CLKPolarity | 设置CPOL | 空闲低:SPI_POLARITY_LOW 空闲高:SPI_POLARITY_HIGH |
CLKPHASE | 设置CPHA | 上升采样:SPI_PHASE_1EDGE 下降采样:SPI_PHASE_2EDGE |
BaudRatePrescaler | 设置SPI时钟分频 | SPI_BAUDRATEPRESCALER_2 ~ 256 |
FirstBit | 设置起始位 | 高在前:SPI_FIRSTBIT_MSB 低在前:SPI_FIRSTBIT_LSB |

浙公网安备 33010602011771号