STM32双机SPI全双工通信

博主在调试基于STM32F407的SPI全双工通信时遇到问题,主机发数据给从机正常,但从机发给主机时,主机接收不到或数据出错。经研究发现,问题出在使用的Motorola SPI通信协议本身限制导致时序不同步,更换为TI协议并更改SPI寄存器后解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(基于STM32F407的SPI全双工通信时序不同步问题!!)

首先吐槽一波,调一个星期的SPI,始终没有很好的效果。

网上有很多SPI主从通信的例子,但是两片STM32单片机进行通信,基本很少,就算有,别人也不公开啊!!!没办法,自己研究呗!!

就是主机发给从机,从机能接收到数据,而从机发给主机,主机要么接收不到数据,要么接收的数据出错!!很难过!!本来打算放弃了,但是无意间浏览一个帖子,启发了我,给了我思路;

一直使用的SPI通信协议为 Motorola SPI 通信协议,什么是 Motorola SPI 通信??我也不知道,就知道调用库函数,用了什么协议都不知道,血淋淋的教训。所以啊,学习还是要看本质,会调用库函数永远都不能成为高手。PS:库函数里面使用的SPI的通信协议就是 Motorola SPI 通信协议;

问题就出在这个地方,使用的协议本身的限制,就造成了时序不同步的问题。怎么办??换协议------------TI协议

TI协议是什么??TI协议就是德州器件公司使用含有SPI功能器件上面的协议。通过更改SPI的寄存器,使用TI模式,就解决了时序不同步问题!

下面是SPI配置代码一部分:

	SPI1->CR2|=0X10;							//开启SPI的TI模式

SPI在TI协议下连续传输时序图

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

重点的部分已经说完,就不放源代码了,自己动手会学的更多!

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值