SPI芯片:W25Q16
I2S芯片:AK4386
主芯片:STM32F105
1.查询标志位:
1)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//检查发送是否完成
2)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//检查接受标志位
SPI运行时有一定几率程序会卡死在检查接受标志位处RXNE,论坛上的解决方案是将检查接受标志位改为检查忙状态,即:
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY)==SET);
此方案可行。
其根本原因是因为STM32F105的SPI增加了FIFO端口,使传输数据有了缓冲区。可以在SPI初始化是增加语句SPI_RxFIFOThresholdConfig(SPI1,SPI_RxFIFOThreshold_QF);,将应答数据位设置为8位。
有些库函数没有