系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理
目录
SPI的物理层接口及互联
SPI(Serial Peripheral Interface,串行外围设备接口),是由摩托罗拉公司提出的一种高速全双工串行同步通信接口,首先出现在其M68HC系列处理器中。由于其传输速度快、简单方便成本低
物理层接口
主设备和从设备通信之间,主设备片选信号拉高,从设备拉低
互联
多个并联,主微控制器花费GPIO引脚作为片选信号
SPI的时钟极性及时钟相位
SPI时序,与其时钟极性和时钟相位有关。
时钟极性 (CPOL):
时钟线和时钟极性同高同低
时钟相位(CPHA):
0奇数,1偶数
SPI的数据格式及传输速率
SPI数据格式
SPI数据传输也是以帧为单位,通常可以选择8位或16位数据帧格式。
SPI数据,可以由高位到低位(即MSB在前LSB在后),也可以由低位到高位(即LSB在前MSB在后)依次传输。到底采用什么数据格式,由具体SPI设备指定。
根据不同的SPI时序(时钟极性和时钟相位)和数据格式,SPI数据传输实例如下:
SPI时序为CPOL=0、CPHA=0且数据格式为8位数据帧、低位在前高位在后传输:
SPI时序为CPOL=0、CPHA=1且数据格式为8位数据帧、高位在前低位在后传输
SPI时序为CPOL=1、CPHA=0且数据格式为8位数据帧、低位在前高位在后传输
SPI时序为CPOL=1、CPHA=1且数据格式为8位数据帧、高位在前低位在后传输
(UART低位在前,IIC高位在前)
SPI传输速率
SPI具有较高的传输速率,它的时钟SCK最高可达18MHz。
STM32中SPI的特性
通常,它被配置为主模式,并为各个从设备提供通信时钟SCK。
SPI的工作模式、配置步骤及数据收发过程
工作模式
主模式和从模式,主模式和从模式下均可由软件或硬件进行NSS管理,动态改变主∕从操作模式;
收发过程
在STM32F103微控制器使用SPI发送数据前,程序员完成SPI物理层(如引脚)和协议层(时钟极性、时钟相位、数据格式和传输速率等)的相关配置,并将数据并行地写入发送缓冲区,进行SPI数据的收发。
在接收时,接收到的数据被存放在一个内部的接收缓冲器中;在发送时,在被发送之前,数据将首先被存放在一个内部的发送缓冲器中。对SPI_DR寄存器的读操作,将返回接收缓冲器的内容;写入SPI_DR寄存器的数据将被写入发送缓冲器中。
从模式下开始传输
─ 当从设备接收到时钟信号并且第一个数据位出现在它的MOSI时,数据传输开始,随后的数据位依次移动进入移位寄存器;
─ 与此同时,在传输第一个数据位时,发送缓冲器中的数据被并行地传送到8位的移位寄存器,随后被串行地发送到MISO引脚上。软件必须保证在SPI主设备开始数据传输之前在发送寄存器中写入要发送的数据。
主模式下开始传输
─ 当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;
─ 在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,然后按顺序被串行地移位送到MOSI引脚上;
─ 与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。
SPI的状态标志和中断(两个重要的:TXE和RXNE)
状态标志:
中断:
不同的SPI,有着不同的中断向量。而对于同一个SPI,它的各种中断事件都被连接到同一个中断向量。
SPI的常用库函数(初始化设置、收发数据)
SPI_I2S_DeInit:将SPIx的寄存器恢复为复位启动时的默认值。
SPI_Init:根据SPI_InitStruct中指定的参数初始化指定SPI的寄存器。
SPI_Cmd:使能或禁止指定SPI。
SPI_I2S_SendData:通过SPI/I2S发送单个数据。
SPI_I2S_ReceiveData:返回指定SPI/I2S最近接收到的数据。
SPI_I2S_GetFlagStatus:查询指定SPI/I2S的标志位状态。
SPI_I2S_ClearFlag:清除指定SPI/I2S的标志位(SPI_FLAG_CRCERR)。
SPI_I2S_ITConfig:使能或禁止指定的SPI/I2S中断。
SPI_I2S_GetITStatus:查询指定的SPI/I2S中断是否发生。
SPI_I2S_ClearITPendingBit:清除指定的SPI/I2S中断挂起位(SPI_IT_CRCERR)。