SPI与器件通信读回数据全都是0

2019-07-21 01:33发布

STM32用SPI与器件通信时,采用全双工主模式,但是读回的数据总是0,甚至在器件没有上电的时候,也会是0,这是什么情况啊,如果是将SPI那四根线拔了,就是0XFF。搞不懂什么情况。。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
JUSTNIUB
1楼-- · 2019-07-21 05:42
查一下硬件,照你这样说,我觉得是MISO被强行拉低了。
原子的代码应该不会有问题。
csmjmcc
2楼-- · 2019-07-21 10:53
贴出程序和器件名称,才能解答
MDZZYUE
3楼-- · 2019-07-21 14:17
csmjmcc 发表于 2017-12-29 10:53
贴出程序和器件名称,才能解答

我用的器件是epc610,比较偏的一个,用的SPI2,工作于主模式下的全双工,发送读取函数就是


u16 SPI2_ReadWriteByte(u16 TxData)
{               
        u8 retry=0;                                        
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)
                {
                retry++;
                if(retry>200) return 0;
          printf ("%s ", "regular write always busy!  RETRY SEND "  );       
                }                          
        SPI_I2S_SendData(SPI2, TxData); //í¨1yíaéèSPIx·¢Ëíò»¸öêy¾Y
        retry=0;
               

        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                printf ("%s ", "regular write always busy!  RETRY RECIVE"  );       
                }                                                              
          return SPI_I2S_ReceiveData(SPI2);
   printf ("%s ", "regular write always busy!"  );                       
}

就是正点原子的代码啊
MDZZYUE
4楼-- · 2019-07-21 17:58
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-07-21 20:40
可能你的器件没有应答,看MISO波形就知道了
MDZZYUE
6楼-- · 2019-07-21 21:16
正点原子 发表于 2017-12-30 00:40
可能你的器件没有应答,看MISO波形就知道了

原子哥,我后来查了一下,又发现在全双工双向下,对相同寄存器读回数据的时候,会读回不同的数据,实际上应该是相同的,因为是测试,所以我确定读回的数据是什么,但是有时候读回是正确的,有时候是错误的,想知道有没有可能是丛机晶振不正常工作的原因?

一周热门 更多>