首页 理论教育 基于STM32固件库编程:STM32SPI硬件结构

基于STM32固件库编程:STM32SPI硬件结构

时间:2023-10-21 理论教育 版权反馈
【摘要】:与USART、ADC一样,STM32的SPI也是通过GPIO复用来使用的。STM32F407系列具体的SPI复用引脚如表9-2所示。表9-2STM32F407的SPI与复用GPIO其中SPI1、SPI4、SPI5、SPI6是APB2上的设备,最高通信速率为42Mbit/s;SPI2、SPI3是APB1上的设备,最高通信速率为21Mbit/s。STM32F407的SPI结构如图9-6所示,外围的MOSI、MISO、SCLK与NSS均有GPIO复用。值得注意的是,虽然STM32配置了NSS引脚的复用GPIO,但实际应用中,NSS也可以用GPIO的高低电平输出代替,非常方便,可以简化程序。

基于STM32固件库编程:STM32SPI硬件结构

与USART、ADC一样,STM32的SPI也是通过GPIO复用来使用的。STM32F407系列具体的SPI复用引脚如表9-2所示。

表9-2 STM32F407的SPI与复用GPIO

其中SPI1、SPI4、SPI5、SPI6是APB2上的设备,最高通信速率为42Mbit/s;SPI2、SPI3是APB1上的设备,最高通信速率为21Mbit/s。

STM32F407的SPI结构如图9-6所示,外围的MOSI、MISO、SCLK与NSS均有GPIO复用。它的主要核心部分是位于发送缓冲区与接收缓冲区中间的移位寄存器和用于产生SCLK的波特率发生器。图中可以看到几个主要的控制状态寄存器,如SPI_CR1、SPI_CR2与SPI_SR,通过设置与查询进行SPI的设置与控制。这些寄存器均为16位。

值得注意的是,虽然STM32配置了NSS引脚的复用GPIO,但实际应用中,NSS也可以用GPIO的高低电平输出代替,非常方便,可以简化程序。另外,点对点传输的应用中甚至不需要NSS控制。

图9-6 SPI接口框图

1.时钟SCLK

STM32可以作为主设备或者从设备工作。一般来说,MCU作为主设备,外部设备作为从设备,主设备负责SCLK的产生工作。SCLK线的时钟信号,由波特率发生器根据控制寄存器SPI_CR1中的BR[0:2]位控制。这些位用于对fpclk时钟的分频因子的设置。fpclk分频后的信号就是SCLK引脚的输出时钟频率,计算方法见表9-3。其中fpclk频率指的就是SPI所在的APB总线频率:APB1为fpclk1,APB2为fpclk2

表9-3 BR[2:0]位对应fpclk的分频

2.通信控制

(1)SPI_CR1。

如同前面学习的内容,SPI通信过程中需要设置SPI_CR1寄存器工作模式。以下设置位必须在通信前设置好,不能在通信过程中设置,否则会造成数据错乱。

SPI_CR1的CPOL位与CPHA位用于设置SPI的工作模式。当CPOL为0(表示空闲状态)时,SCLK保持低电平;当CPOL为1(表示空闲状态)时,SCLK保持高电平。CPHA为0,表示从第一个时钟(奇数)边沿开始采样数据;CPHA为1,表示从第二个时钟(偶数)边沿开始采样数据。

SPI_CR1的DFF位可配置SPI的传送模式为8位或16位模式,因为SPI属于同步串行通信,数据打包按8位或者16位。DEF为0,表示发送/接收选择8位数据帧格式;DEF为1,表示发送/接收选择16位数据帧格式。

SPI_CR1的LSBFIRST位可配置选择MSB先行还是LSB先行,相当于移位寄存器的左移与右移。该位为0时MSB先发送,为1时LSB先发送。

SPI_CR1的BIDIMODE(Bidirectional Data Mode Enable)用于设置双向通信数据模式,为0表示选择双线单向通信数据模式,为1表示选择单线双向通信数据模式。所谓双线单向通信数据模式即标准4线的SPI通信模式;而单线双向通信数据模式指的是只有一根数据传输线,即MOSI与MISO共用一根数据线,分时工作。

SPI_CR1的BIDIOE(Output Enable in Bidirectional Mode)用于双向通信模式下的输出使能。此位结合BIDIMODE位,用于选择双向通信模式下的传输方向,为0时禁止输出(只接收模式),为1时使能输出(只发送模式)。注意:在主模式下,使用MOSI引脚;在从模式下,使用MISO引脚。

SPI_CR1的RXONLY(Receive Only)用于设置只接收。此位结合BIDIMODE位,用于选择双线单向模式下的传输方向。此位也适用于多从模式系统,此类系统不会访问特定从器件,也不会损坏访问的从器件的输出。该位为0表示全双工(发送和接收),为1表示关闭输出(只接收模式)。

SPI_CR1的SPE(SPI Enable)位用于SPI使能,为0时关闭外设,为1时使能外设。

SPI_CR1的MSTR(Master Selection)位用于设置主模式,为0时从设备配置,为1时主设备配置。(www.xing528.com)

SPI_CR1的SSM(Software Slave Management)位用于软件从器件管理,当SSM位置1时,NSS引脚输入替换为SSI位的值。0代表禁止软件从器件管理,1代表使能软件从器件管理。

SPI_CR1的SSI(Internal Slave Select)位用于内部从器件选择,仅当SSM位置1时,此位才有效。此位的值将作用到NSS引脚上,并忽略NSS引脚的IO值。

还有用于CRC校验的设置位CRCEN与CRCNEXT,一般不使用CRC校验将其关闭(默认关闭)。

(2)SPI_CR2。

SPI_CR2的TXEIE(TX Buffer Empty Interrupt Enable)用于发送缓冲区空中断使能,0代表屏蔽TXE中断,1代表使能TXE中断。当TXE标志置1时产生中断请求。

SPI_CR2的RXNEIE(RX Buffer Not Empty Interrupt Enable)用于接收缓冲区非空中断使能,0代表屏蔽RXNE中断,1代表使能RXNE中断。RXNE标志置1时产生中断请求。

SPI_CR2的ERRIE(Error Interrupt Enable)用于错误中断使能。此位用于控制在发生错误状况时是否产生中断(SPI模式中的CRCERR、OVR、MODF以及I2S模式中的UDR、OVR和FRE),为0代表屏蔽错误中断,为1代表使能错误中断。

SPI_CR2的FRF(Frame Format)用于设置帧格式,为0代表采用SPI Motorola模式,为1代表采用SPI TI模式。SPI首先由Motorola公司制定,TI公司也推出了类似SPI的SSI(Synchronous Serial Interface)的接口协议标准。二者的主要区别在于SSI有帧同步信号,而SPI没有:SPI时序可设置,SSI时序固定。在使用时,我们应了解设备使用哪种标准。

SPI_CR2的SSOE(SSOutput Enable)用于SS输出使能,0代表在主模式下禁止SS输出,可在多主模式配置下工作;1代表在主模式下使能SS输出,不能在多主模式环境下工作。

SPI_CR2的TXDMAEN(TX Buffer DMA Enable)与RXDMAEN(RX Buffer DMA Enable)用于发送缓冲区与接收缓冲区DMA使能,0代表关闭,1代表使能。不使用DMA模式时,默认关闭。

3.接收和发送缓冲区

SPI的发送与接收过程大致如下:在接收过程中,收到数据后,先存储到内部接收缓冲区中;而在发送过程中,先将数据存储到内部发送缓冲区中,然后发送数据。对SPI_DR寄存器的读访问将返回接收缓冲值,而对SPI_DR寄存器的写访问会将写入的数据存储到发送缓冲区中。这种操作与USART的数据缓冲区的操作类似,虽然只有一个名字SPI_DR,但它是两个独立的缓冲区共用一个寄存器名字(地址)。

SPI_DR寄存器具有16位,对于8位数据帧,缓冲区为8位,只有寄存器的LSB(SPI_DR[7:0])用于发送/接收。在接收模式下,寄存器的MSB(SPI_DR[15:8])强制为0。对于16位数据帧,缓冲区为16位,整个寄存器SPI_DR[15:0]均用于发送/接收。

4.SPI状态寄存器

SPI_SR寄存器输出SPI的工作状态,通过读取SPI_SR,可以获取SPI的工作状态。主要的位信息如下:

SPI_SR的TXE(Transmit Buffer Empty)为发送缓冲区空标志,0表示发送缓冲区非空,1表示发送缓冲区为空。

SPI_SR的RXNE(Receive Buffer Not Empty)为接收缓冲区非空标志,0表示接收缓冲区为空,1表示接收缓冲区非空。

SPI_SR的BSY(Busy Flag)为输出忙标志,0表示SPI(或I2S)不繁忙,1表示SPI(或I2S)忙于通信或者发送缓冲区不为空。此标志由硬件置1和清0。注意:请勿使用BSY标志处理每次数据发送或接收,最好改用TXE标志和RXNE标志。

SPI_SR的OVR(Overrun Flag)为上溢标志,0表示未发生上溢,1表示发生上溢。此标志由硬件置1,可由软件序列复位。

SPI_SR的MODF(Mode Fault)为模式故障标志,0表示未发生模式故障,1表示发生模式故障。此标志由硬件置1,可由软件序列复位。

SPI_SR的CRCERR(CRCError Flag)为CRC错误标志,0表示接收到的CRC值与SPI_RXCRCR值匹配,1表示接收到的CRC值与SPI_RXCRCR值不匹配。此标志由硬件置1,通过软件写入0来清0。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈