硬件是这样设计的:
芯片为
STM32f103vb,作为从设备接收SPI主设备发送过来的固定长度的数据,现定为每秒发送一次,数据为9个16位数据。
从机的PC6引脚检测到有上升沿,表明主设备将要发送数据过来。发送完数据后,过一段时间PC6被拉低。
一开始是想用DMA方式接收的,PC6上升沿中断的回调函数里调用DMA接收函数,接收9个数据。
结果发现,用万用表表笔或示波器表笔碰触SCLK引脚,会产生数据错位。且,一旦错位,以后接收的数据会始终保持错位。
后来就想先改成SPI中断方式接收。同样再PC6上升沿中断回调函数里调用SPI中断接收函数,接收9个数据,并在PC6下降沿时关闭SPI中断。
结果可能是主设备开机时发送的数据不正常,如果主从设备同时开机的话,从设备就总是接收溢出错误。
后来在溢出错误处理部分的关闭SPI中断后,又清了一次溢出错误标志,开机问题算是解决了。
但,同样存在,用表笔碰触SCLK引脚,会造成接收数据移位的问题。
请大家帮忙分析下为何错位会一直存在?
对于用表笔接触下SCLK会导致错位,可以这样试下:
1.那个SPI速度是可以设置的,看看调低点速率,会不会这样。
2.在SPI接口的数据线与CLK线,全部上拉,有可能时,最好主从间还串联个10欧姆的电阻,这两个方法主要是为了在传输数据是,保证电平稳定的措施。
一周热门 更多>