天线|RF射频
直播中

李家沌

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

NRF24L01通信总是要按单片机复位键好多次才会正常通信是为什么?

如题这是为什么呢? NRF24L01通信,我每次都要按单片机复位键好多次 ,才会正常通信,完成我代码的功能

发的部分的主代码:


[C] 纯文本查看 复制代码
//#include "luart_init(9600);ed.h"#include "delay.h"#include "sys.h"#include "key.h"#include "led.h" #include  "usart.h"#include  "pwm.h"#include  "24l01.h"#include  "spi.h"int main(void) {  u8 tmp_buf[33]="ss";SystemInit();delay_init(72);     //???±??????NVIC_Configuration(); uart_init(9600); LED_Init();NRF24L01_Init();    //??????NRF24L01    LED1=0;  printf("a");while(NRF24L01_Check())//?ì??????24L01{     LED1=!LED1;//DS0????delay_ms(300);}      while(1){     TX_Mode(); if(NRF24L01_TxPacket(tmp_buf)==TX_OK){ // printf("a");   LED1=0;//DS0????  delay_ms(300);  LED1=1;//DS0????  delay_ms(300);        }                   } }   

收的部分的代码:


[C] 纯文本查看 复制代码
//#include "luart_init(9600);ed.h"#include "delay.h"#include "sys.h"//#include "key.h"#include "led.h"#include "usart.h"#include "pwm.h"//#include "l298.h"#include  "24l01.h"#include  "spi.h"  int main(void) {  u8 tmp_buf[33] ;SystemInit();delay_init(72);     //???±??????NVIC_Configuration(); uart_init(9600); LED_Init();NRF24L01_Init();    //??????NRF24L01  LED1=0;//  LED2=0;while(NRF24L01_Check())//?ì??????24L01{     LED1=!LED1;//DS0????delay_ms(300);}         while(1){      RX_Mode(); if(NRF24L01_RxPacket(tmp_buf )==0){   printf("%s rn",tmp_buf);  LED0=0;//DS0????     delay_ms(1000);  LED0=1; delay_ms(1000);    }            } }

在我的测试中,好像存在这么个问题,似乎是,我的NRF24L01只能发一次,之后就要复位,可能是这个原因造成的。但我始终爱原子个的代码上改的。只改了主函数。并没觉得把什么重要代码给改了。

回帖(2)

薛珊珊

2020-5-12 08:25:01

多谢原子哥,果然是我放错位置了。我放在while(1)外面就好了。无线转串口也oK了。

我又想做个MPU6050的遥控器。但是发现,我这样写的话,MPU6050无法正确读数,似乎失效了。我用串口读,发现MPU6050就只读了一次数据。就不读了。

是这么写的:

 while(1){

          MPU6050_Pose(); //能得到角度

                             tmp_buf[0]=(u8)Pitch;       

                                  printf("sd %d",tmp_buf[0]);

                                  printf("gg %f",Pitch);         

//NRF24L01_TxPacket(tmp_buf);

                        if(NRF24L01_TxPacket(tmp_buf)==TX_OK)

                        { 

                                 

                                  LED1=0; 

                                  delay_ms(300);

                                  LED1=1; 

                                  delay_ms(300);            

            }                        

      }

但我删去if语句判断就OK了,改成:

 while(1){

          MPU6050_Pose(); 

                             tmp_buf[0]=(u8)Pitch;       

                                  printf("sd %d",tmp_buf[0]);

                                  printf("gg %f",Pitch);         

                                NRF24L01_TxPacket(tmp_buf);

 

      }

这是为什么呢,是24l01的自动应答影响了mpu6050的角度输出了吗
举报

李勇

2020-5-12 08:43:29

看不出问题。 不过应该不是自动应答的问题。
举报

更多回帖

相关问答

nRF24L01
发帖
登录/注册
×
20
完善资料,
赚取积分