zoukankan      html  css  js  c++  java
  • 学习6__STM32--SPI外设之中断收发---

    <目标>

      STM32双机 SPI中断收发通信

    <描述>

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

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

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

      # 就是单字节发送与接收

    <问题>

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

    <分析>

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

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

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

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

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

    <解决>

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

        > 在进入中断服务程序后关闭spi外设,将导致在关闭外设期间发生的中断而被忽视,尤其是多数据连续发送,比如DMA数据发送,实测将导致丢数据,即其中的部分中断未作出响应而丢弃。

        > 拉大数据发送周期不失为一个办法,但在多数场合不适合,通信中一般就要求快速传输,几乎没有单个字节的传输(单个字节传输可理解为拉大数据发送周期的一种特例)。

      # 。。。

    <总结>

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

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

    <深思>

    以上现象的产生可分析出如下的情况导致

      # 双机正在传输过程中,由于复位、重启等操作致使收发双方不同步而出现以下情况

        > 发送端不间断一直发送,而接收端由于复位、重启等操作致使重新初始化准备开始接收,正巧双机出现这种情况,在接收端开始接收时发送端发送至当前1Byte的第5bit,这意味着第0-4bit已丢弃,剩余第5-7bit刚好被接收端接收,即接收端收到3bit数据,随着发送端下1Byte数据发送,这种环境将产生何种结果?

      [分析]

        > 接收端接收发送端发来的1Byte数据里的前5bit与之前收到的3bit合成1Byte数据,将置位SPI_RXNE产生中断将当前接收的1Byte数据读走,这就导致了错误数据的产生,在环境保持不变的条件下,错误数据源远流长

        > 接收端是否会接收刚准备好接收时到来的3bit数据?

          @ 不接收,是何原因摒弃了这残缺的数据?

          @ 接收了,但并未copy至SPI_DR或者其他情况

      

  • 相关阅读:
    随机数组找丢失数据
    js打开新页面 关闭当前页 关闭父页面
    Markdown测试
    ThinkPHP中的时间自动填充 无法获取时间
    页面在谷歌浏览器和IE浏览器顶部多出空白行,火狐显示正常
    Thinkphp中验证码不显示解决办法
    106运用SWITCH语句打印星期几的单词
    声明两个变量并赋值计算出矩形的面积
    不用*用移位运算符计算21*16的数值是多少
    97.经典实例,计算球形的面积和体积
  • 原文地址:https://www.cnblogs.com/skullboyer/p/8413170.html
Copyright © 2011-2022 走看看