本帖最后由 wkong501 于 2012-11-29 12:17 编辑
(程序在下方)
我利用STM32的SPI控制NRF2401,在读寄存器时总是只能读到NRF的状态寄存器值0x0E, 而读不到指定寄存器(0x00配置寄存器)的值. 在调试时我发现, 用JLINK 执行到断点1(下方标出)再执行到断2, 可以成功读到数据. 全部执行则读取不到第二个数据. 按之前的经验一般调试模式成功,实际操作失败大多是时序问题,我试着在很多地方加入延时函数, 还是无法解决.
请大家帮忙看一下.
u8 NRF2401_RdReg(u8 addr)
{
u8 rxfifo; //此前已将CE=0 CS=1 NRF开机等待100us.
NRF2401_ResetCS();
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待缓冲空
SPI_I2S_SendData(SPI1, addr);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
断1SPI_I2S_SendData(SPI1, 0x00); //随机发送一个数,以接收寄存器内容
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//RXNE=1;接收为空,即未接收到 数据;
断2 rxfifo = SPI1->DR;
NRF2401_SetCS();
return rxfifo;
} |