码迷,mamicode.com
首页 > 其他好文 > 详细

学习6__STM32--SPI外设之中断收发

时间:2018-02-04 15:34:15      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:nbsp   spi   结果   匹配   中间   发送   nss   这一   完美解决   

> 目标

STM32双机 SPI中断收发通信

 

> 描述

  #1  STM32双机配置为一主一从模式

  #2  采用主机中断发送,从机中断接收

  #3  收发机制采用不间断收发(发送为空就发送,接收非空就接收,中间无其他操作打断)

  #4  就是单字节发送与接收

 

> 问题

  从机接收端会出现,接收到的数据可能是原始发送数据也会是错误数据,出现这种现象的条件是发送主机复位、发送主机重新上电、随时间变化(物理碰触等)都会产生错误数据,而复位接收从机、重新上电接收从机会纠正数据

 

> 分析

  #1  STM32双机未共地导致      共地后问题依旧

  #2  STM32未使用NSS引脚导致    使用后问题依旧

  #3  工作模式改变尝试(发送与接收工作模式配置为不匹配)    问题依旧

  #4  主机发送太过频繁导致,导致接收来不及接收导致          拉大发送数据周期问题依旧

  #5  从数据结果上分析,应该是发送主机与接收从机未同步导致,接收总线的数据先由移位寄存器接收,再copy至数据寄存器,所以分析数据移位现象是出现在移位寄存器中,比如正在传输中由复位操作或断电操作等,致使移位寄存器只接收了3bit数据,而SPI数据的接收机制是,移位寄存器收满8bit数据后copy至数据寄存器,这一切都是硬件完成,注意数据的搬移是copy,所以移位寄存器中的数据还在,就像刚刚的这种行为导致移位寄存器只接收了3bit数据,未满8bit数据故不会copy至数据寄存器,所以等待恢复工作后,再接收5bit数据,这样满8bit数据后copy至spi->DR,但是这1byte数据中的前3bit与后5bit数据本不是一个有效byte数据,就导致读到1byte无效数据,产生了接收错误数据的现象

 

> 解决

  #1  拉大发送数据周期&在进入接收中断后先关闭SPI外设,然后再读取数据,出中断前开始SPI外设

  #n  。。。

>总结

  #1  这种方法只是暂时解决了该条件下接收错误数据的问题,并未完美解决和分析透这一现象

  #2  不拉大发送数据周期,只是在进入接收中断后先关闭SPI外设,然后再读取数据,出中断前开始SPI外设,接收数据错误问题依旧

  

 

学习6__STM32--SPI外设之中断收发

标签:nbsp   spi   结果   匹配   中间   发送   nss   这一   完美解决   

原文地址:https://www.cnblogs.com/skullboyer/p/8413170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!