OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2769|回复: 3

nRF24l01+ 自动应答失败

[复制链接]

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2018-10-15
在线时间
32 小时
发表于 2018-11-16 10:57:17 | 显示全部楼层 |阅读模式
5金钱
目前调试24L01+,非自动应答可以收到数据,但自动应答时,一直出现达到最大重发次数,但接收方有收到数据。
发送端:
oid ANO_NRF_TX_MODE(void)
{

        ANO_SPI_CE_L();
        
        ANO_NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);                 //写TX节点地址  
        ANO_NRF_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);        //写RX节点地址,使能ACK
        
        ANO_NRF_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);                                                                                                         //使能通道0的自动应答 0X01
        ANO_NRF_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);                                                                                        //使能通道0的接收地址 0X01
        ANO_NRF_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1A);                                                                                        //设置自动重发间隔时间:500us;最大自动重发次数:10次 2M波特率下 0X1a
        ANO_NRF_Write_Reg(NRF_WRITE_REG+RF_CH,40);                                                                                                                //设置RF通道为CHANAL   必须一致
        ANO_NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);                                                                                                 //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 必须一致
        ANO_NRF_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);                                                                //选择通道0的有效数据宽度
        ANO_NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);                    // IRQ收发完成中断开启,16位CRC,主发送
        ANO_SPI_CE_H();
        delay_us(10);
}

接收端配置:
void NRF24L01_RX_Mode(void)
{
  NRF24L01_CE=0;         
  NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
         
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);    //使能通道0的自动应答   
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址           
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);             //设置RF通信频率                  
  NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度            
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式

  NRF24L01_CE = 1; //CE为高,进入接收模式
}   

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2018-10-15
在线时间
32 小时
 楼主| 发表于 2018-11-16 10:58:33 | 显示全部楼层
目前调试24L01+,非自动应答可以收到数据,但自动应答时,一直出现达到最大重发次数,但接收方有收到数据。
发送端:
oid ANO_NRF_TX_MODE(void)
{

        ANO_SPI_CE_L();
        
        ANO_NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);                 //写TX节点地址  
        ANO_NRF_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);        //写RX节点地址,使能ACK
        
        ANO_NRF_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);                                                                                                         //使能通道0的自动应答 0X01
        ANO_NRF_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);                                                                                        //使能通道0的接收地址 0X01
        ANO_NRF_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1A);                                                                                        //设置自动重发间隔时间:500us;最大自动重发次数:10次 2M波特率下 0X1a
        ANO_NRF_Write_Reg(NRF_WRITE_REG+RF_CH,40);                                                                                                                //设置RF通道为CHANAL   必须一致
        ANO_NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);                                                                                                 //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 必须一致
        ANO_NRF_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);                                                                //选择通道0的有效数据宽度
        ANO_NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);                    // IRQ收发完成中断开启,16位CRC,主发送
        ANO_SPI_CE_H();
        delay_us(10);
}

接收端配置:
void NRF24L01_RX_Mode(void)
{
  NRF24L01_CE=0;         
  NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
         
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01);    //使能通道0的自动应答   
  NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址           
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40);             //设置RF通信频率                  
  NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度            
  NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式

  NRF24L01_CE = 1; //CE为高,进入接收模式
回复

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2018-8-31
在线时间
23 小时
发表于 2018-11-20 15:00:02 | 显示全部楼层
接收端,自动应答时是否有数据包payload。如有需要使能动态长度。
原文如下:
An ACK packet can contain an optional payload from PRX to PTX. In order to use this feature, the
Dynamic Payload Length (DPL) feature must be enabled.

下面设置我用过没问题,供参考
[mw_shl_code=c,true]
//接收端
writeReg(REG_CONFIG, 0x0f);                   /* IRQ收发完成中断开启,16位CRC,PRX */
                writeReg(REG_DYNPD,0x01);                        /* 使能RX_P0动态长度PLAYLOAD */
                writeReg(REG_FEATURE,0x06);                        /* 使能动态长度PLAYLOAD、发送ACK PLAYLOAD */
               
                writeReg(REG_EN_AA,0x01);                         /* 使能通道0的自动应答 */       
               
                writeReg(CMD_FLUSH_TX,0xff);                /* 冲洗TX_FIFO */
                writeReg(CMD_FLUSH_RX,0xff);


//发送端
                writeReg(REG_CONFIG, 0x0e);                   /* IRQ收发完成中断开启,16位CRC,PTX */
                writeReg(REG_DYNPD,0x01);                        /* 使能RX_P0动态长度PLAYLOAD */
                writeReg(REG_FEATURE,0x07);                        /* 使能动态长度、ACK PLAYLOAD发送、W_TX_PAYLOAD_NOACK */
               
                writeReg(CMD_FLUSH_TX,0xff);                /* 冲洗TX_FIFO */
                writeReg(CMD_FLUSH_RX,0xff);
[/mw_shl_code]

回复

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2018-8-31
在线时间
23 小时
发表于 2018-11-20 15:14:39 | 显示全部楼层
又看了一下,你这个是发送端没有收到ACK才导致出现达到最大重发次数,这个应该是你地址的问题
然后看了你的接收端,发送地址都没有
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 23:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表