天线|RF射频
直播中

王红

7年用户 222经验值
私信 关注
[问答]

关于NRF24L01接收的问题如何解决

下面为MINI版发送数据 Control_Point1_Open[16]给单片机,单片机接收数据并自动回复给mini板的代码。MINI版的程序不变。

问题是:

  1、MINI板第一次发送数据给单片机的时候,单片机接收到的数据是 Control_Point1_Open[16]的数据,但是后面还多接收12个0X00。这是为什么?


  2、当单片机接收到MINI板的数据后,自动回复给MINI板,MINI板接收到的数据为12个0x00加Control_Point1_Open[16]的数据。除第一次外再接收数据就

       少了0XAA,后面的数据就,只有0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0xBB。这是为什么呢。



void main()

{

uchar Control_Point1_Open[16]={0xAA,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA1,0x00,0xBB};

uchar Respond_Point1_Open[16]={0xAA,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1A,0x00,0xBB};

uchar Rx_Buf[32];  //接收到的数据暂存器,最多32字节数据



uchar i;

uchar flag=0;

init_NRF24L01();

StartUART();



while(NRF24L01_Check())                //检查不到24l01则报警

{

  LED0=0;

  delayms(200);

  LED0=1;

  delayms(200);

}

while(1)

{

   RX_Mode();//接收模式  

   while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据 ,返回1则接收到数据 ,在等待接收数据期间,可以随时变成发送模式  

   {

    if(flag==16)         //按了按键8   则变成发送模式,发送对应数据,发送完后变成接收模式

    {

     TX_Mode();         //发送模式

       nRF24L01_TxPacket(Respond_Point1_Open);        // 发送命令数据

      delay_ms(500);

      SPI_WR_Reg(WRITE_REG+NRFRegSTATUS,0XFF);

       flag=0;

       break;        //退出最近的循环,从而变回接收模式,这句关键

}

}



for(i=0;i<16;i++)

{

if(Rx_Buf==Control_Point1_Open)           //若接收到对应的数据则实现对应功能

{

    flag++;

    R_S_Byte(Rx_Buf);   //为串口输出函数

    Rx_Buf=0;//清空数据

}         

}

}

}

回帖(4)

h1654155275.5627

2020-5-29 11:01:51

但是我不用自动发送,用按键回复就没出现这种情况,就是上面if(flag==16)改为if(KEY==0),MINI板接收数据完全正常。

而且单片机接收到的数据也正常。想不通的地方就是这里。一个按键,一个自动,完全不一样。
举报

侯晓萃

2020-5-29 11:17:59

那问题点,肯定就在自动发送这里了。
举报

李晓莉

2020-5-29 11:23:37

我想得也是,想了一天了,也改了一天,还是不行。求原子哥指点下。
举报

张玉珍

2020-5-29 11:32:09

可以仿真一下了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分