machunshui的笔记 https://passport2.21ic.com/?389193 [收藏] [复制] [RSS]

日志

STM32 SPI主接收的一次调试经过

热度 1已有 2070 次阅读2014-4-29 09:36 |个人分类:STM32|系统分类:ARM| STM32, SPI, 主接收

调试两块STM32板,
一块板的stm32的SPI做主,一块做从。

当主机接收从机数据的时候,会发生接收数据错位的情况(好比第一个数据跑到第三位,第二个数据跑到第四位, 依此类推),或者个别数据丢失的情况。
本来程序,描述为:

1.等待SPI TX空
2.发送数据
3.等待SPI RX非空
4.接收数据
这种情况下,部分波特率情况下,除了前几次出错外,后若干干次数据可以,但是变换发送波特率,数据错位,出错。

后来改为:
1.等待SPI TX空
2.发送数据
3.等待SPI TX空
4.等待SPI RX非空
5.接收数据
大为好转,但是使用低波特率,部分情况下仍然会出错(个别数据错误)

再改为:
1.等待SPI TX空
2.发送数据
3.等待SPI TX空
4.等待SPI RX非空
5.延时
6.接收数据

根据不同不同波特率情况调整延时,数据都正确,问题解决。

分析:
主要是波特率慢的时候,虽然 SPI RX已经非空,但是SPI数据寄存器的8bit,没有全部完成移位,导致数据出错,
当然这应该也是stm32的一个小BUG,SPI RX非空就应该指示数据可以接收的。

路过
1

鸡蛋

鲜花

握手

雷人

刚表态过的朋友 (1 人)

评论 (0 个评论)