调试两块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非空就应该指示数据可以接收的。