您的位置:首页 > 其它

终于解决了nRF24L01接收端只能接收一次数据的问题

2011-07-29 20:58 351 查看
两个星期之前,我就完成了 nRF24l01的收发。但是可能正是由于太早出结果,导致了一些深层次的问题没有被发现。后来做声音引导的时候发现只能发送,不能接收数据。开一还以为是硬件坏了。真是晕。下面是我的nRF24L01中断处理程序

#pragma vector=PORT2_VECTOR//24L01中断

__interrupt void IRQ_ISP(void)

{

i++;

nRF24L01_Statues=SPI_Read(STATUS);

nRF24L01_Statues_Flag=0;

if(nRF24L01_Statues&RX_DR)/**接收正常**/

{

SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);

nRF24L01_Statues_Flag=1;

nRF24L01_CEL; //进入待机模式

}

else if(nRF24L01_Statues&TX_DR)//发送完毕

{

nRF24L01_Statues_Flag=2;

}

else if(nRF24L01_Statues&MAX_RT)//发送失败

{

nRF24L01_Statues_Flag=3;

}

P2IFG&=~BIT5;

SPI_RW_Reg(WRITE_REG+STATUS,nRF24L01_Statues);

}

然后再有

nRF24L01_Statues_Flag=0;

nRF24L01_Init(nRF24L01_TRA);//发送采样命令

while(nRF24L01_Statues_Flag!=2);//第一次发送

nRF24L01_Statues_Flag=0;

nRF24L01_Transmit(TX_BUF);//第二次发送

这么处理下,就解决了问题。

我一开始的设定的是发送端每次发送一次。结果接收端只能接收一次,但发送端却显示发送成功。

又来改成发送端发送两次以上。结果,正常接收了。问题是,为什么会这样?

可能是这样的,我们第一次时能够将PID(数据包识别)进行对比,但是我们没有在初始化时将数据包识别这个PID置零。而发送端如果只有发送一次,那么很有可能会使得接收端对比的两个PID值相同,使得nRF24L01误认为时重发的数据包。这时候,我们可以发现,只有在断电复位之后才能接收到一次值。

这儿的高手比较多。我大胆地把我的想法提了出来。不知道是不是这样。还请前辈们多多指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐