终于解决了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误认为时重发的数据包。这时候,我们可以发现,只有在断电复位之后才能接收到一次值。
这儿的高手比较多。我大胆地把我的想法提了出来。不知道是不是这样。还请前辈们多多指教。
#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误认为时重发的数据包。这时候,我们可以发现,只有在断电复位之后才能接收到一次值。
这儿的高手比较多。我大胆地把我的想法提了出来。不知道是不是这样。还请前辈们多多指教。
相关文章推荐
- dataTables本地刷新数据解决只能初始化一次问题
- 解决部分浏览器ajax提交数据,数据已改变,却后台数据接收数据还是上一次值的问题
- 解决SpringMvc后台接收json数据中文乱码问题
- 解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
- 解决“串口接收数据时被截断”的问题
- GridView异步加载中一次加载完所有数据问题的解决以及其原因分析
- QSerailPort使用readAll()接收数据不全问题解决
- 解决SpringMVC接收不到axios发送post请求的数据问题
- 关于arcgis用GP服务模型 生成等直面没有跟地图一致,颜色区设置及数据接收问题的解决方法!
- 【java web】解决流读完一次就不能再次获取body数据的问题
- 解决“您一次只能安装一种 Adobe 产品”问题
- springMVC接收ajaxfileupload提交数据不执行success回调的问题解决
- 记录一次解决PHP返回数据被nginx截断的问题
- 解决在epoll中accept接收端口会漏处理的问题. 直到新的socket消息到达,epoll_wait才响应去接收socket端口数据的问题
- 解决VS2010使用mscomm控件无法接收数据的问题
- 解决post请求接收数据类型为text/html时参数传递的问题
- (转)jquery跨域调用webService,以及解决跨域情况下只能返回XMl格式数据的问题
- 解决MapReduce中Reduce迭代器只能使用一次的问题
- C#关闭本地Socket监听,解决本地套接字只能用一次的问题.NET
- 解决一次误删数据文件问题