STM32——HAL库开发笔记13(SPI的五个参数)(参考来源:b站铁头山羊)
本文主要介绍了SPI的五个参数,即波特率、比特位的传输顺序(MSB First / LSB First)、数据位的长度(8/16位)、时钟的极性、时钟的相位。
一、波特率
1、波特率概述
波特率(Baud Rate)我们知道SPI总线通过高低电压变化来传输数据,低电压表示0,高电压表示1,每个时钟周期传输二进制的一个比特位,因此,我们把每秒钟传输高低电压的数量称之为波特率。波特率越高,数据传输速度就越快。在单片机中,波特率决定了串口通信的速度,直接影响数据传输的效率和稳定性。SPI总线没有规定波特率的取值范围,一般取几兆到几十兆赫兹。
2、波特率选取原则
1、选取允许的最大值
2、考虑设备所能承受的极限
3、考虑电路板能承受的极限
二、比特位的传输顺序(MSB First / LSB First)
计算机使用二进制表示数字。对于一个无符号八位整数来说由八个比特位组成,分别为比特零到比特七,每个比特位拥有不同的权重,权重依次为,
,……,
。比特0的权重最低,称为LSB,比特7的权重最高,称为MSB。LSB为最低有效位,MSB为最高有效位。
我们就有了MSB First : 先传最高有效位 ; LSB First : 先传最低有效位。
比如传输99,转化为二进制00100011。最左边的0代表最高有效位MSB,最右边的1代表LSB。
如果MSB First传输,那么高位在前,低位在后,如果LSB First传输,那么低位在前,高位在后。
三、数据位的长度
数据位的长度分为两种:8bit和16bit
8 bit : 8位一组,每组1字节
16 bit : 16位一组,每组1个16位的整数
例如,我们传输一个0xb51f整数,用MSB方式传输。
若用8 bit方式,则需要把0xb51f 拆分为两个字节{ 0xb5 , 0x1f} ,首先发送0xb5,将0xb5展开为二进制 :1011 0101,先发MSB再发LSB。然后我们再发送0x1f,展开为二进制为 :00011111,先发MSB再发LSB。最终波形如图:
若用16 bit方式,把0xb51f直接展开16位,波形如下图
四、时钟的极性
时钟的极性分为两种,低极性和高极性。
低极性 :空闲状态下时钟的信号是低电压。
高极性 :空闲状态下时钟的信号是高电压。
由此引申出第一边沿和第二边沿的概念。对于低极性,由于第一个出现的边沿是上升沿,第二个出现的边沿是下降沿,所以我们把所有的上升沿称为第一边沿,所有的下降沿称之为第二边沿。
对于高极性,由于第一个出现的边沿是下降沿,第二个出现的边沿是上升沿,所以我们把所有的下降沿称为第一边沿,所有的上升沿称之为第二边沿。
五、时钟的相位
比特位的传输可以分为两个阶段,发送阶段和采集阶段,要发送1,发送方就把电压拉高;发送0,发送方就把电压拉低。在采集阶段,发送方维持电压不变,等待接收方读取数据。
时钟的相位有两种:第一边沿采集,第二边沿采集。
如果接收方在第一/二边沿采集信号,我们就称之为第一/二边沿采集信号。
进一步引申出时钟的四种模式 :
模式0:低极性第一边沿采集
模式1 :低极性第二边沿采集
模式2 :高极性第一边沿采集
模式3:高极性第二边沿采集
作者:SRA.