STM8L SPI使用过程记录
工作需要,需要使用SPI方式和DSP进行通信,关于SPI通信,作为一名新手,还停留在大学时候学的MOSI/MISO阶段,没有实际的应用经验,所以遇到了不少有趣的事情,记录一下,防止以后再犯同样的错误。
SPI从机:STM8L
SPI主机:DSP
问题一:主机接收异常
现象:从机向主机发送 “1234”,主机收到“11223334”
过程及分析: 从机向主机数据的时候,主机轮训去读,但是一直读到数据如上,一直不正常,主机SPI频率为4M,从机主机频率为8M,通过示波器测量也是只要主机发送clk去读,从机就返回异常的数据,一直找不到原因,后来询问别人猜测是主机SPI频率太快导致的此问题
解决方法:降低SPI主机的频率,数据接收正常
问题二:从机接收异常
现象:主机发送“12345”,从机只能接收到“12”
过程及分析:有点尴尬了,刚刚主机接收正常。马上从机接收异常。。。。当时在从机中采用的是接收到一个字符,就立马通过printf重定向的方式打印出来,后来采取接收几个字符再一起打印出来。猜测原因是STM8L中的printf重定向占用太多时间,导致接收数据异常
解决方法:去掉printf重定向
问题三:从机接收到大量0xFF无用数据
现象:从机发送完数据后,立马读取数据,会读到0XFF等无用数据
过程及分析:从机在向主机发送数据后,立马会读到0xff无用数据,通过询问电子得知,当主机在读数据的时候,MOSI引脚被拉高,此时从机去读数据,则会读到0xFF,因此需要做些判断,如果是0Xff,则丢弃无用数据
解决方法:从机读数据时做判断
问题四:从机配置成接收中断方式,当发送数据过程中,系统卡死
现象:从机配置成接收中断方式,当发送数据过程中,系统卡死,没有反应
过程及分析:以上现象比较奇怪,后来通过添加打印信息进行分析,其实原因和上面一样,当从机发送数据之后,主机读数据会导致MOSI拉高,而从机又被配置成接收中断,此时就会触发中断,然后从机就会一直接收,导致吸引卡死,因此我们现在的方法是在从机发送数据之前先关闭接收中断,当确认数据发送完毕之后,再打开接收中断
解决方法:发送时候关闭接收中断,发送完毕打开接收中断
问题五:从机接收或者发送阻塞
现象:从机接收或者发送数据时候可能会阻塞
过程及分析:特别是在接收中断中,可能触发中断后,从机就会接收阻塞,导致整个系统没有反应,现在采用的方法是增加超时机制,超过一定时间数据没有接收到或者没有发送出去,就直接退出,不用阻塞
解决方法:增加超时机制
不定时更新中。。。。。