天线|RF射频
直播中

华农武

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

NRF24L01发送失败问题如何解决

今天用c8t6和nrf24l01想做个通讯,可是发现接收端并没有接收到数据,然后仿真了一下,发现数据并没用发送出去。然后用原子哥的mini板下了一个例程,开了接收模式,通信频道也一样,我发现每次发送端重新上电的那一瞬间或者开启仿真的那一瞬间,mini开发板可以接收到一次数据,后面就再也接收不到了。。请问是什么问题啊?

回帖(3)

陈浩

2020-7-13 14:50:18
我之前也做这个NRF,用例程,发现会丢包,或者只能发一次这样的现象,然后问了我同学帮我改了一下接受和发送的函数,再加上我自己又改了下main函数里的代码比以前稳一点了,基本不丢包,能多次发送。
初始化代码,原子哥的例子不错
在main函数里写
先做器件检测
    while(NRF24L01_Check())
    {
        oled_printf(0,0,"NRF24L01 Error");
        delay_ms(200);
        oled_printf(0,1,"NRF24L01 Wait");
        delay_ms(200);
    }
oled_printf(0,2,"NRF24L01 OK");
再设置NRF模式为接受模式(平时不发数据让它处在接受模式)
    NRF24L01_RX_Mode();
再设置按键选择模式
比如mode = 0是接受,mode = 1是发送 用按键去做选择
接下来分模式去做
接受部分的代码
                    接受
                    NRF24L01_RX_Mode();
                    if(NRF24L01_RxPacket(rx_buf)==0)
                    {
                        delay_ms(100);
                        rx_buf[sizeof("你自己设置的字符串")-1]='';
                        oled_printf(0,3,"receive : %s ",rx_buf);
                    }
发送部分
发送
                    NRF24L01_TX_Mode();
                    while((errcode=NRF24L01_TxPacket(tx_buf))!=TX_OK)
                    {
                        delay_ms(100);
                        oled_printf(0,3,"err : %d ",errcode);
                        delay_ms(100);
                        oled_printf(0,3,"     ");
                     
                    }                                       
                    oled_printf(0,3,"send : %s ",tx_buf);
                    NRF24L01_RX_Mode();
这个代码还有一些小问题,不过大概是这样写的,你可以参考一下,希望能帮到你
举报

彭菲

2020-7-13 15:09:19
是自带的例程么?
举报

宋玉红

2020-7-13 15:27:23
就是源自的例程
举报

更多回帖

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