打印
[开发工具]

STM32_SPI通信和CubeMX相关配置

[复制链接]
249|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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,因为接收的同时会向从机发送接收缓冲区,如果不赋初值那么就会随机发送数据,这可能造成意想不到的错误。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/2302_77864418/article/details/147167246

使用特权

评论回复
沙发
powerantone| | 2025-5-13 16:32 | 只看该作者
路过支持下。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

150

帖子

1

粉丝