0
点赞
收藏
分享

微信扫一扫

F407_SPI

进击的铁雾 2022-03-14 阅读 14

1、SPI协议介绍

即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在ADC、 LCD等设备与MCU间,要求通讯速率较高的场合。

SCL:时钟,主从设备只有一个线 (FCKn/2)

MOSI(master out slave in 主输出从输入):时钟,主从设备只有一个线

MISO:时钟,主从设备只有一个线

NSS :表示片选,每一个从机一个线,拉低选中那个设备

1、SPI基本通信协议

标号1处, NSS信号线由高变低,是SPI通讯的起始信号。 NSS是每个从机各
自独占的信号线,当从机检在自己的NSS线检测到起始信号后,就知道自己
被主机选中了,开始准备与主机通讯。
• 在图中的标号2处, NSS信号由低变高,是SPI通讯的停止信号,表示本次通
讯结束,从机的选中状态被取消。

SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。
MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出
是同时进行的(STM32 配置是双工同步双线传输)
 

2、CPOL/CPHA及通讯模式

时钟极性CPOL是指SPI通讯设备处于空闲状态时, SCK信号线的电平信号(即SPI通讯开始前、 NSS线为高电平时SCK的状态)。 CPOL=0时, SCK在空闲状态时为低电平 下图标号1处, CPOL=1时,则相反标号2。
•时钟相位CPHA是指数据的采样的时刻,当CPHA=0时, MOSI或MISO数
据线上的信号将会在SCK时钟线的“奇数边沿”被采样标号3处。当CPHA=1时,
数据线在SCK的“偶数边沿”采样标号4处

 

2、STM32的SPI外设简介

STM32的SPI外设可用作通讯的主机及从机,支持最高的SCK时钟频率为fpclk/2 (STM32F407型号的芯片默认fpclk2为84MHz, fpclk1为42MHz),完全支持SPI协议的4种模式,数据帧长度可设置为8位或16位,可设置数据MSB先行或LSB先行。它还支持双线全双工(前面小节说明的都是这种模式)、双线单向以及单线模式

 

 数据控制逻辑

SPI的MOSI及MISO都连接到数据移位寄存器上,数据移位寄存器的数据来源来源于接收缓冲区及发送缓冲区。通过写SPI的“数据寄存器DR”把数据填充到发送缓冲区中。通过读“数据寄存器DR”,可以获取接收缓冲区中的内容。其中数据帧长度可以通过“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可选择MSB先行还是LSB先行

整体控制逻辑

整体控制逻辑负责协调整个SPI外设,控制逻辑的工作模式根据“控制寄存器(CR1/CR2)”的参数而改变,基本的控制参数包括前面提到的SPI模式、波特率、 LSB先行、主从模式、单双向模式等等。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR)”,只要读取状态寄存器相关的寄存器位,就可以了解SPI的工作状态了。除此之外,控制逻辑还根据要求,负责控制产生SPI中断信号、 DMA请求及控制NSS信号线。实际应用中,一般不使用STM32 SPI外设的标准NSS信号线,而是更简单地使用普通的GPIO,软件控制它的电平输出,从而产生通讯起始和停止信号。


 控制NSS信号线,产生起始信号(图中没有画出);把要发送的数据写入到“数据寄存器DR”中,该数据会被存储到发送缓冲区;
通讯开始, SCK时钟开始运行。 MOSI把发送缓冲区中的数据一位一位地传输出去; MISO则把数据一位一位地存储进接收缓冲区中;当发送完一帧数据的时候,“状态寄存器SR”中的“TXE标志位”
会被置1,表示传输完一帧,发送缓冲区已空;

类似地,当接收完
一帧数据的时候,“RXNE标志位”会被置1,表示传输完一帧,接收缓冲区非空;等待到“TXE标志位”为1时,若还要继续发送数据,则再次往“数据寄存器DR”写入数据即可;等待到“RXNE标志位”为1时,通过读取“数据寄存器DR”可以获取接收缓冲区中的内容。
通讯过程
假如使能了TXE或RXNE中断, TXE或RXNE置1时会产生SPI中断信号,
进入同一个中断服务函数,到SPI中断服务程序后,可通过检查寄存器
位来了解是哪一个事件,再分别进行处理。也可以使用DMA方式来收
发“数据寄存器DR”中的数据。

举报

相关推荐

0 条评论