SPI介绍
SPI是Serial Pepheral interface缩写,串行外围设备接口。
SPI接口是一种高速的全双工同步通信总线,已经广泛应用在众多MCU、存储芯片、AD转换器和LCD之间。大部分STM32有3个SPI接口,本实验使用的是SPI1。
SPI同一时刻既能发送数据,也能接收数据。
SPI结构框图
SPI 的引脚信息:
MISO(Master In / Slave Out)主设备数据输入,从设备数据输出。
MOSI(Master Out / Slave In)主设备数据输出,从设备数据输入。
SCLK(Serial Clock)时钟信号,由主设备产生。
CS(Chip Select)从设备片选信号,由主设备产生。
SPI的工作原理:
在主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。
这样,两个移位寄存器中的内容就被交换。
外设的写操作和读操作是同步完成的。
如果只是进行写操作,主机只需要忽略接收到的字节。
反之,若主机要读取从机的一个字节,就必须发送一个空字节引发从机传输。
SPI 的传输方式:SPI 总线具有三种传输方式:全双工、单工以及半双工传输方式。
全双工通信,就是在任何时刻,主机与从机之间都可以同时进行数据的发送和接收。
单工通信,就是在同一时刻,只有一个传输的方向,发送或者是接收。
半双工通信,就是在同一时刻,只能为一个方向传输数据。
SPI外设对应的引脚
STM32芯片有多个SPI外设,每个SPI外设输出的信号会到不同的GPIO口。
STM32F1有三个SPI。
SPI工作模式
STM32要与具有SPI接口的器件进行通信,就必须遵循SPI的通信协议。
每一种通信协议都有各自的读写数据时序,当然SPI也不例外。
SPI通信协议就具备4种工作模式。
CPOL,Clock Polarity,就是时钟极性,当主从机没有数据传输的时候即空闲状态,SCL线的电平状态。假如空闲状态是高电平,CPOL=1;若空闲状态时低电平,那么 CPOL = 0。
CPHA,Clock Phase,就是时钟相位。同步通信时,数据的变化和采样都是在时钟边沿上进行的,每一个时钟周期都会有上升沿和下降沿两个边沿,那么数据的变化和采样就分别安排在两个不同的边沿,由于数据在产生和到它稳定是需要一定的时间,假如我们在第1个边沿信号把数据输出了,从机只能从第个边沿信号去采样这个数据。
SPI相关寄存器
SPI相关HAL库驱动介绍
SPI外设相关结构体: