stm32的两个spi互相通信,从spi正确接收主spi数据,但主spi收不到从spi数据(MISO一直为低),是何原因?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32的两个spi互相通信,从spi正确接收主spi数据,但主spi收不到从spi数据(MISO一直为低),是何原因?相关的知识,希望对你有一定的参考价值。

PA6接PB14,PA7接PB15,全双工,将数据送从spi数据寄存器,然后主spi发送数据后返回主spi接收的数据,为0,不是从spi的数据,但从spi能正确接收主spi的数据,望大虾们指点小弟~不胜感激!

参考技术A 你检查下gpio口是否配对追问

都为AF_PP,50MHz?应该没错的吧,还有什么别的可能错的地方吗?——谢谢!

追答

请检查下你片选拉低了吗?你的MASTER 发送字节以保持时钟了吗?

本回答被提问者采纳

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

> 目标

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

  

 

以上是关于stm32的两个spi互相通信,从spi正确接收主spi数据,但主spi收不到从spi数据(MISO一直为低),是何原因?的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103 SPI 通信问题!

请教STM32的SPI通信中的CRC校验问题 SPI

STM32单片机SPI问题

带有 STM32F7 的 SPI 从模式和循环 DMA

STM32SPI通信仿真没问题,下载后不能接收

STM32F4 SPI接收中断不起作用