终于解决了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误认为时重发的数据包。这时候,我们可以发现,只有在断电复位之后才能接收到一次值。

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

你可能感兴趣的:(vector)