STM32_SPI通信和CubeMX相关配置

注:本篇文章部分图片来自铁头山羊

SPI通信共有四种线,分别为MOSI,MISO,SCK,NSS

MOSI:主机向从机发送数据的数据线,低电压为0高电压为1,与从机MOSI相连。

MISO:从机向主机发送数据的数据线,低电压为0高电压为1,与从机MISO相连。

SCK:串行时钟线,时钟信号由主机产生,每个时钟周期发送一位数据,因此时钟频率决定发送数据的快慢,与从机SCK相连。

NSS(n):从机选择线,低电压有效的从机选择线,主机有多个NSS线从机只有一个NSS线,主机每个NSS线连接到对应从机的NSS线,所以主机只要向对应的NSS线发送低电压就可以选择对应的从机

下图可以更好地理解线路相连
在这里插入图片描述

SPI的五个参数

SPI共有5个参数:波特率,比特位传输顺序,数据位长度,时钟的极性,时钟的相位。

波特率(bps):

波特率=每秒钟传输高低电压的数量。

SPI总线没有规定波特率的范围,一般取几兆到几十兆bps

SPI波特率选取原则:1.选择允许的最大值。2.考虑设备所能承受的极限。3.考虑电路板所能承受的极限。

比特位传输顺序:

传输顺序分为MSB First(先传最高有效位)和LSB First(先传最低有效位),例如传输一组无符号八位整数0110 0011,如果是MSB传输顺序就是0110 0011,如果是LSB传输顺序就是11000110

数据位长度:

8-bit:8位一组,每组1个字节

16-bit:16位一组,每组1个16位整数

如果我们传输一个4位16进制数0xb51f,使用MSB的传输方式,那么下图分别就是8-bit和16-bit两种传输方式
在这里插入图片描述

时钟的极性:

通过下图我们可以知道时钟极性=低,空闲状态为低电压。反之则为高电压,极性为低时第1边沿是上升沿,第2边沿是下降沿。
在这里插入图片描述

时钟的相位:

因为高低电平的变换需要时间,所以SPI数据的发送分为两个阶段,分别为SPI数据的采集和发送。其中数据的采集是在时钟线边沿进行的,如下图所示
在这里插入图片描述

时钟的相位分为第1边沿采集和第2边沿采集,如果接收方在第1边沿采集信号就叫做第1边沿采集,如果接收方在第2边沿采集信号就叫做第2边沿采集。

时钟的4种模式

根据我们上述所讲的时钟的极性时钟的相位可以分为4种时钟模式,模式0(极性低,第1边沿采集),模式1(极性低,第2边沿采集),模式2(极性高,第1边沿采集),模式3(极性高,第2边沿采集)。下图可以更好的理解。
在这里插入图片描述

CubeMX的相关配置

在这里插入图片描述

如图我们可以看到SPI有8种工作模式,一般来说我们只选择Full-duplex Master模式,下面是详细解释。

其中Master是主机的意思,Slave是从机的意思。一般来说我们会让单片机作为主机。

Full-Duplex是全双工通信,Half-Duplex是半双工通信,全双工通信就是数据的收发可以同时进行,半双工通信就是数据的收发不可以同时进行。

Receive Only就是只能接收,Transmit Only就是只能发送。
在这里插入图片描述

除了模式的选择还有上图硬件NSS信号的选择,一般来说硬件NSS用于多主机通信,基本用不到,所以我们选择Disable即可。

配置完成之后CubeMX会帮我们分配相关引脚,下图就是分配的引脚,我们可以发现CubeMX只分配了三个引脚(SCK,MISO,MOSI)没有分配NSS引脚,而这就需要我们自己配置NSS引脚了,随意选择一个GPIO引脚作为输出(使用通用输出推挽模式)即可,这里不做展示了
在这里插入图片描述
下面是SPI相关参数的配置讲解,其中我框选的参数一般都需要我们自行配置,其相关配置需要查询从机的参考手册来配置符合从机规定的参数。
在这里插入图片描述

HAL库三个相关函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:使用HAL_SPI_Receive()函数时,接收缓冲区需要赋初值,一般为0xff,因为接收的同时会向从机发送接收缓冲区,如果不赋初值那么就会随机发送数据,这可能造成意想不到的错误。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐