天线|RF射频
直播中

李允麒

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

NRF24L01收发如何使用

#include "usart.h"

#include "sys.h"

#include "delay.h"

#include "mpu6050.h"

#include "led.h"

#include "key.h"

#include "24l01.h"




u8 tmp_buf[6];




int main(void)

{

        u8 key,mode;

        u16 t=0;

        int16_t Y,P,R;                        




        NVIC_Configuration();

        delay_init();                        //SYSTICK的时钟固定为HCLK时钟的1/8,SYSCLK:系统时钟为72MHz.

        uart_init(9600);                //串口1初始化,波特率为9600,工作在全双工收发模式

        LED_Init();                                //LED初始化,GPIOA8对应于LED0,GPIOD2对应于LED1.

        KEY_Init();

        NRF24L01_Init();            //初始化NRF24L01

        MPU6050_Init();                        //MPU6050初始化设置DMP和DMP_FIFO




        while(NRF24L01_Check())//检测不到24L01

        {

                printf("24L01 Check Failed!n");

                delay_ms(500);

                printf("lease Check!n");

                delay_ms(500);

                LED0=!LED0;//DS0闪烁

        }

        printf("24L01 Ready!n");

        printf("KEY0:RX_Mode  KEY1:TX_Moden");        //显示提示信息




        while(1)//在该部分确定进入哪个模式!

        {

                key=KEY_Scan(0);

                if(key==1)

                {

                        mode=0;   

                        break;

                }

                else if(key==2)

                {

                        mode=1;

                        break;

                }




                t++;        

                if(t==200)

                {

                        t=0;

                        printf("KEY0:RX_Mode  KEY1:TX_Moden");        //显示提示信息

                }

                delay_ms(5);




        }




        if(mode==0)//RX模式

        {

                printf("NRF24L01 RX_Moden");        

                printf("Received DATA:n");        

                RX_Mode();                  

                while(1)

                {                                                                                  

                        if(NRF24L01_RxPacket(tmp_buf)==0)//接收到信息.

                        {

                                Y=((int16_t)tmp_buf[0]<<8)+tmp_buf[1];

                                =((int16_t)tmp_buf[2]<<8)+tmp_buf[3];

                                R=((int16_t)tmp_buf[4]<<8)+tmp_buf[5];

                                UART1_Report_IMU(Y,P,R,1,1,1,100);

                        }                                   

                }        

        }

        else//TX模式

        {                                                           

                printf("NRF24L01 TX_Moden");        

                TX_Mode();  

                while(1)

                {

                        MPU6050_Pose();        

                          

                        tmp_buf[0]=Yaw/256;

                        tmp_buf[1]=Yaw%256;




                        tmp_buf[2]=Pitch/256;

                        tmp_buf[3]=Pitch%256;




                        tmp_buf[4]=Roll/256;

                        tmp_buf[5]=Roll%256;

                                                                           

                        if(NRF24L01_TxPacket(tmp_buf)==TX_OK)

                                printf("Sended DATA:n");                                   

                        else                                                                                           

                                printf("Send Failedn");     

                }

        }                                

}







原子哥,我移植你的NRF24L01代码,做无线传输数据,你抽空看下我使用的对吗?驱动代码用的就是你例程里面的,现在能无线通讯,但是经过无线通讯传输的数据有抖动,什么情况呀?不用无线传输就不抖动










回帖(2)

简白伊

2020-5-28 12:14:28
有抖动是指?
举报

陈艳

2020-5-28 12:23:10
上面那个通信方式没有问题吧?就是角度会跳一下,然后又跳回正确的值,然后再跳,解决了,我让传感器采集10次,然后再上传一次,保证上传的有传感器数据
举报

更多回帖

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