SPI读和写之间需不需要间隔

2019-08-13 22:29发布

如题,SPI的发和收是同步进行的,正点的程序如下,比如在前8个周期写SPI,然后在8个时钟周期后进行读操作,那会不会因为还没有到后8个周期就进行了读操作导致读到错误数据?

u8 SPI1_ReadWriteByte(u8 TxData)
{               
        u8 retry=0;                                        
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                }                          
        SPI_I2S_SendData(SPI1, TxData);
        retry=0;

        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                }                                                              
        return SPI_I2S_ReceiveData(SPI1);                                     
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
Acuity
2019-08-14 00:28
      可以肯定地说:不可能!除非你没有按照规则操作。spi是串行通信,看时序图就知道,一个时钟脉冲传送/接收一位,对于你上面说的模式,只有发送完,才会进入接收状态;如果用硬件spi,发送完/接受完会有相应的状态寄存器指示,如果是模拟spi,则需要自己计数时钟个数进行一位一位的发送/接收。还有其他一些非标准spi,就是真正的收发同时进行,发送一位同时接收一位,发送完一字节也就接收完一字节。
      综上,硬件spi你根据状态标志去读写,模拟spi自行计算脉冲数,根本不会出现你担心的。

一周热门 更多>