问题
今天在进行SPI读写铁电的时候,发现一个疑问。
发现正点原子对spi的读写是这样的:
u8 SPI1_ReadWriteByte(u8 TxData)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//等待发送区空
SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个byte 数据
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte
return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据
}
其中SPI_I2S_FLAG_TXE和SPI_I2S_FLAG_RXNE是SPI缓冲区发送、接收完成标志位,但是这里不管发送或者接收为什么都要等待发送或者接收标志位完成呢?如果将发送和接收拆开是否会有问题?后来在网上以及手册上找到答案,以下是资料链接,主要是spi发送和接收因为用的是移位寄存器,因此发送接收好像是同一个FIFO。
关于spi读写都等待读写标志位的疑问资料