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

       两个星期之前,我就完成了 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误认为时重发的数据包。这时候,我们可以发现,只有在断电复位之后才能接收到一次值。

       这儿的高手比较多。我大胆地把我的想法提了出来。不知道是不是这样。还请前辈们多多指教。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
nRF24L01是一种低功耗2.4GHz无线收发模块,常用于无线通信应用。以下是nRF24L01接收端的介绍[^1]: 1. 引脚功能描述:nRF24L01模块的引脚功能如下: - VCC:供电正极 - GND:地 - CE:片选使能,用于控制模块的工作模式 - CSN:SPI片选,用于与主控芯片进行通信 - SCK:SPI时钟 - MOSI:SPI主机输出,用于发送数据 - MISO:SPI主机输入,用于接收数据 - IRQ:中断请求,用于通知主控芯片接收数据 2. 程序设计:对于nRF24L01的程序编程,基本思路如下: - 初始化nRF24L01模块的寄存器和引脚 - 配置nRF24L01模块为接收模式 - 循环接收数据并处理 3. 接收模式初始化过程: - 设置接收地址:通过设置RX_ADDR_P0寄存器来设置接收地址,接收端的地址必须与发送端的地址相匹配。 - 设置通道:通过设置RF_CH寄存器来选择通信频道。 - 设置数据宽度:通过设置RX_PW_P0寄存器来设置接收数据的宽度。 - 打开接收模式:通过设置CONFIG寄存器的PRIM_RX位来打开接收模式。 4. 基本程序函数:nRF24L01模块的基本程序函数包括: - nRF24L01_Init():初始化nRF24L01模块。 - nRF24L01_RX_Mode():配置nRF24L01模块为接收模式。 - nRF24L01_RxPacket():接收数据包。 5. 通信测试:可以使用两个51单片机控制nRF24L01模块进行互相通信。其中一个单片机配置为发送模式,另一个单片机配置为接收模式,通过发送和接收数据包来测试通信。 以上是nRF24L01接收端的介绍。如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值