我在用F091的SPI进行通讯时,一直没反应,SPI的配置都正确,代码如下[mw_shl_code=c,true]u8 dSPIN_Write_Byte(u8 TxData)
{
CS_X = 0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){;}//等待发送区空
SPI_SendData8(SPI1, TxData); //通过外设SPIx发送一个byte 数据
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;}
CS_X = 1;
return SPI_ReceiveData8(SPI1); //返回通过SPIx最近接收的数据
}[/mw_shl_code]
经过调试发现程序一直卡在while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;} ,我也上网查了一下感觉最合理的解释是:调试过程中,如果打开了SPI监控窗口,如果调试器先读走了DR的内容,就会导致RXNE位被清除,导致死在while中。
然后我在while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;} 后面加了使LED灯亮的语句,结构运行时LED灯不亮。说明确实是卡在这里。不知为何原因。
最后我根据某网友的解决办法,把
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;}
改为
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET){;} //等待接收完一个byte
程序正常运行,SPI也可以通讯了。
请问万能的坛友while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;} 卡死的原因是什么啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
没接收到数据的话,那就表明也没有数据发送。但是我确实把数据发出了的呀!不解啊
一周热门 更多>