天线|RF射频
直播中

文妮

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

NRF24L01如何调试?

好久没发帖。。忙于期末考试和校电子设计比赛。这几天重操旧业。。拾起STM32~~~调了三天的无线NRF24L01模块。。通道0和通道1都能自由自在的通信了。。可是通道2以上调了2天一点进展也没有。。搜了网上各种资料。目前还没有发现有调通通道2的。很多所谓的已调通所有通道。都是骗人的啊@_@!程序里就只有通道0和1调通,能实现2发1收,然后来了一句,6发1收同理。。同理!!我怎么就没有发现同理呢。。怎么都出不来啊!!不抱怨了。。上程序代码:


//发送地址

const uint8_t TX0_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA1}; //发送地址

const uint8_t TX1_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA2}; //发送地址

const uint8_t TX2_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA3}; //发送地址

const uint8_t TX3_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA4}; //发送地址

const uint8_t TX4_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA5}; //发送地址

const uint8_t TX5_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA6}; //发送地址

//接收地址

const uint8_t RX0_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA1}; //接收地址

const uint8_t RX1_ADDRESS[RX_ADDR_WIDTH]={0x62,0x62,0x62,0x62,0xA2}; //接收地址

const uint8_t RX2_ADDRESS[1]={0xA3}; //接收地址,高32位等于RX1_ADDRESS

const uint8_t RX3_ADDRESS[1]={0xA4}; //接收地址

const uint8_t RX4_ADDRESS[1]={0xA5}; //接收地址

const uint8_t RX5_ADDRESS[1]={0xA6}; //接收地址


//发射配置


void TX_Mode(uint8_t *TX_ADDRESS)

{               

   NRF24L01_CE=0;     

   NRF24L01_Write_Buf(MY_WRITE_REG+TX_ADDR,(uint8_t*)TX_ADDRESS,TX_ADDR_WIDTH); //写TX节点地址

   NRF24L01_Write_Buf(MY_WRITE_REG+RX_ADDR_P0,(uint8_t*)TX_ADDRESS,RX_ADDR_WIDTH); //设置RX节点地址

                     //主要为了使能ACK   

   NRF24L01_Write_Reg(MY_WRITE_REG+EN_AA,0x01);             //使能通道0的自动应答   

   NRF24L01_Write_Reg(MY_WRITE_REG+EN_RXADDR,0x01);  //使能通道0的接收地址  

   NRF24L01_Write_Reg(MY_WRITE_REG+SETUP_RETR,0x1a); //设置自动重发间隔时间:500us + 86us

                                                                                                                  //最大自动重发次数:10次

   NRF24L01_Write_Reg(MY_WRITE_REG+RF_CH,40);                //设置RF通道为40

   NRF24L01_Write_Reg(MY_WRITE_REG+RF_SETUP,0x0f);     //设置TX发射参数,0db增益,2Mbps,低噪声增益开启  

   NRF24L01_Write_Reg(MY_WRITE_REG+CONFIG,0x0e);        //配置基本工作模式的参数

                                                                                                               / /PWR_UP,EN_CRC,16BIT_CRC,发射模式

   NRF24L01_CE=1;          //CE为高,10us后启动发送

}

//接收配置


void RX2_Mode(void)

{

   NRF24L01_CE=0;   

   NRF24L01_Write_Buf(MY_WRITE_REG+RX_ADDR_P2,(uint8_t*)RX2_ADDRESS,1); //选择通道2作为接收

                                                                                                                                                     //写RX节点地址RX_ADDRESS

   NRF24L01_Write_Reg(MY_WRITE_REG+EN_AA,0x04);     //使能通道2的自动应答   

   NRF24L01_Write_Reg(MY_WRITE_REG+EN_RXADDR,0x04); //使能通道2的接收地址

NRF24L01_Write_Reg(MY_WRITE_REG+RF_CH,40);       //设置RF通信频率      

   NRF24L01_Write_Reg(MY_WRITE_REG+RF_CH,40);       //设置RF通信频率   

   NRF24L01_Write_Reg(MY_WRITE_REG+RX_PW_P2,RX_DATA_WIDTH);//选择通道2的有效数据宽度      

   NRF24L01_Write_Reg(MY_WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   

   NRF24L01_Write_Reg(MY_WRITE_REG+CONFIG, 0x0f);     //配置基本工作模式的参数

                                                                                                              //PWR_UP,EN_CRC,16BIT_CRC,接收模式

   NRF24L01_CE = 1;          //CE为高进入接收模式,130us后检测空中信息

}

PS:数据手册都快被我翻烂了。。真的找不出问题所在。只能发帖求问了~~原子哥。。各位大虾~~~tic/image/smiley/kindeditor/5.gif" />



回帖(15)

汤敏树

2020-7-28 07:18:04

我全看过了。。真的只是声称。。看了他们的程序乱七八糟的的。。里面除了0和1 通道,根本没有其余通道了。。欺骗感情啊!
举报

李玉兰

2020-7-28 07:32:51
 
举报

王强

2020-7-28 07:50:18
通道2~5只写入一个地址就好了吧 没必要都写 通道1都得写
举报

李耘蝶

2020-7-28 08:18:51
今天我也试了下,0,1通道确实可以,2通道就不行了,楼主这个问题搞定没?
举报

更多回帖

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