STM8L SPI使用过程记录
2018-01-18 19:50
806 查看
STM8L SPI使用过程记录
工作需要,需要使用SPI方式和DSP进行通信,关于SPI通信,作为一名新手,还停留在大学时候学的MOSI/MISO阶段,没有实际的应用经验,所以遇到了不少有趣的事情,记录一下,防止以后再犯同样的错误。
SPI从机:STM8L
SPI主机:DSP
过程及分析: 从机向主机数据的时候,主机轮训去读,但是一直读到数据如上,一直不正常,主机SPI频率为4M,从机主机频率为8M,通过示波器测量也是只要主机发送clk去读,从机就返回异常的数据,一直找不到原因,后来询问别人猜测是主机SPI频率太快导致的此问题
解决方法:降低SPI主机的频率,数据接收正常
过程及分析:有点尴尬了,刚刚主机接收正常。马上从机接收异常。。。。当时在从机中采用的是接收到一个字符,就立马通过printf重定向的方式打印出来,后来采取接收几个字符再一起打印出来。猜测原因是STM8L中的printf重定向占用太多时间,导致接收数据异常
解决方法:去掉printf重定向
过程及分析:从机在向主机发送数据后,立马会读到0xff无用数据,通过询问电子得知,当主机在读数据的时候,MOSI引脚被拉高,此时从机去读数据,则会读到0xFF,因此需要做些判断,如果是0Xff,则丢弃无用数据
解决方法:从机读数据时做判断
过程及分析:以上现象比较奇怪,后来通过添加打印信息进行分析,其实原因和上面一样,当从机发送数据之后,主机读数据会导致MOSI拉高,而从机又被配置成接收中断,此时就会触发中断,然后从机就会一直接收,导致吸引卡死,因此我们现在的方法是在从机发送数据之前先关闭接收中断,当确认数据发送完毕之后,再打开接收中断
解决方法:发送时候关闭接收中断,发送完毕打开接收中断
过程及分析:特别是在接收中断中,可能触发中断后,从机就会接收阻塞,导致整个系统没有反应,现在采用的方法是增加超时机制,超过一定时间数据没有接收到或者没有发送出去,就直接退出,不用阻塞
解决方法:增加超时机制
不定时更新中。。。。。
工作需要,需要使用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拉高,而从机又被配置成接收中断,此时就会触发中断,然后从机就会一直接收,导致吸引卡死,因此我们现在的方法是在从机发送数据之前先关闭接收中断,当确认数据发送完毕之后,再打开接收中断
解决方法:发送时候关闭接收中断,发送完毕打开接收中断
问题五:从机接收或者发送阻塞
现象:从机接收或者发送数据时候可能会阻塞过程及分析:特别是在接收中断中,可能触发中断后,从机就会接收阻塞,导致整个系统没有反应,现在采用的方法是增加超时机制,超过一定时间数据没有接收到或者没有发送出去,就直接退出,不用阻塞
解决方法:增加超时机制
不定时更新中。。。。。
相关文章推荐
- 记录J-Flash ARM使用过程中的一个纠结问题
- 使用VS2010编译OpenSSL的过程记录
- 记录Android studio使用过程中遇到的问题
- 我在Suse 11 Sp3上使用anaconda安装TensorFlow的过程记录
- 记录使用Homebrew安装Mysql全过程
- android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录
- 使用Unity3D进行HTC Vive开发过程中遇到问题记录
- GCC使用过程中的小问题记录
- c++ builder使用过程中,记录的bug
- vs+opencv 使用过程中所遇问题记录 day2
- 基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合
- 记录安卓模拟器 Genymotion 使用过程中遇到的一些问题
- Github使用过程记录
- LoadRunner 使用过程中问题及解决办法记录
- 对Shanty-Mongo使用过程的一些记录
- [Metro]使用CSS3+html5+js创建文字颜色渐变(CSS3 Text Gradient) (记录验证过程暂停)
- CentOS Linux下使用yum 命令安装MySQL过程记录。
- 记录一次SqlServer查询优化的过程(聚合索引的使用)
- 记录安卓模拟器 Genymotion 使用过程中遇到的一些问题
- 【51单片机学习过程记录】8 中断 之定时计数器0的使用