STM32之SPI通信协议

前言:STM32的SPI通信协议是STM32较为常用的一种与外设进行通信的方式。它相较于I2C通信有着频率高,传输速度快。但是SPI如果要挂载多个从机,就必须要多根数据线SS进行片选操作,所以硬件开销较大,但配置较I2C简单。

一、SPI协议简介

SPI为同步时序,就是数据的发送与接收是遵循同一数据线。SPI支持总线挂载多个设备,通过多条线进行片选通信。SPI有四根通信线,其中SCK为时钟线,MOSI为主机发送数据的线,MISO为主机接收从机信号的线,还有SS线为片选信号线,用于选择和哪个从机通信。SPI为全双工模式,可支持同时进行主机发送和接收,但是同一时间只能与一个从机通信,不可同时与两个从机进行通信。但是SPI没有应答机制,所以可能数据传输会出现错误而没有反馈,这一点相较I2C不同。

二、SPI硬件电路

所有从机挂载在同一根数据线上,主机引出多条SS控制线。其中输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入。数据传输方向为主机通过MOSI输出,从机通过MISO输入。数据在一条线上为单向传输。

三、SPI通信方式

首先,闲置状态时,NSS(SS)为高电平。当选择某一从机进行通信时,NSS降为低电平。

而后数据开始通过MOSI与MISO数据线进行传输,数据由高位向低为传输。且当时钟线为高电平时传输一个位的数据,同I2C一样为一位一位传输。

图片来源于江协科技

数据在移位寄存器里,然后一位一位的在主机与从机中传输。 

四、SPI模式的配置

配置步骤
1. 通过 SPI_CR1 寄存器的 BR[2:0] 定义串行时钟波特率
2. 选择 CPOL CPHA 位,定义数据传输和串行时钟间的 相位关系 ( 见图 212)
3. 设置 DFF 位来定义 8 位或 16 位数据帧格式。
4. 配置 SPI_CR1 寄存器的 LSBFIRST 位定义帧格式。
5. 如果需要 NSS 引脚工作在输入模式,硬件模式下,在整个数据帧传输期间应把 NSS 脚连接
到高电平(初始高电平);在软件模式下,需设置 SPI_CR1 寄存器的 SSM 位和 SSI 位。如果 NSS 引脚工作
在输出模式,则只需设置 SSOE 位。
6. 必须设置 MSTR 位和 SPE ( 只当 NSS 脚被连到高电平,这些位才能保持置位 )
在这个配置中, MOSI 引脚是数据输出,而 MISO 引脚是数据输入。
五、SPI软件实现与硬件实现
这部分先等我把代码部分上传了再补充
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Young member

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值