> 目标
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外设,接收数据错误问题依旧