spi中断接收模式被干扰后数据会一直错位

2019-07-14 14:58发布



硬件是这样设计的:
芯片STM32f103vb,作为从设备接收SPI主设备发送过来的固定长度的数据,现定为每秒发送一次,数据为9个16位数据。
从机的PC6引脚检测到有上升沿,表明主设备将要发送数据过来。发送完数据后,过一段时间PC6被拉低。

一开始是想用DMA方式接收的,PC6上升沿中断的回调函数里调用DMA接收函数,接收9个数据。
结果发现,用万用表表笔或示波器表笔碰触SCLK引脚,会产生数据错位。且,一旦错位,以后接收的数据会始终保持错位。

后来就想先改成SPI中断方式接收。同样再PC6上升沿中断回调函数里调用SPI中断接收函数,接收9个数据,并在PC6下降沿时关闭SPI中断。
结果可能是主设备开机时发送的数据不正常,如果主从设备同时开机的话,从设备就总是接收溢出错误。
后来在溢出错误处理部分的关闭SPI中断后,又清了一次溢出错误标志,开机问题算是解决了。
但,同样存在,用表笔碰触SCLK引脚,会造成接收数据移位的问题。


请大家帮忙分析下为何错位会一直存在?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
60user189
1楼-- · 2019-07-15 11:17
把SPI的通信线都接上上拉,同时加上滤波电容。能增强干扰能力。
谦谦三君子
2楼-- · 2019-07-15 13:47
cdkjwdjqw 发表于 2018-12-26 11:16
你可以建立回答机制,一问一答  那样的话效率低了,或者CRC校验

就是对效率有要求...
不过即使采用回答机制,也不能纠正从机的错位吧?
CRC校验其实用上了,倒数第二个数据既是。

问答机制或CRC校验可以检测出接收错误,但如何使下次接收数据不再保持错位?
目前的做法是重新初始化SPI,但感觉初始化SPI执行的操作太多了。
谦谦三君子
3楼-- · 2019-07-15 14:07
60user189 发表于 2018-12-26 11:34
把SPI的通信线都接上上拉,同时加上滤波电容。能增强干扰能力。

都有上拉的。当然实际使用未必会因为干扰造成这种结果。我是偶然发现SCLK上引入干扰后会造成这种接收数据持续错位的问题。
主要是想通过软件来解决干扰消失后依旧错位的问题。
cdkjwdjqw
4楼-- · 2019-07-15 15:24
 精彩回答 2  元偷偷看……
wenxueshu
5楼-- · 2019-07-15 19:57
把SPI的通信线都接上上拉,同时加上滤波电容
xieweibin
6楼-- · 2019-07-15 22:35
楼主在使能SPI后,
有没有第一时间清除接收缓冲区中断标志?

一周热门 更多>