你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

nrf24l01+ 自动应答失败

[复制链接]
tonghan2009 提问时间:2018-11-16 20:43 /
目前调试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为高,进入接收模式

收藏 1 评论4 发布时间:2018-11-16 20:43

举报

4个回答
mzy2364 回答时间:2018-11-16 20:59:33
看看发送数据函数
tonghan2009 回答时间:2018-11-17 08:50:19
mzy2364 发表于 2018-11-16 20:59
看看发送数据函数

u8 ANO_NRF_TxPacket(uint8_t *tx_buf)
{               
        u8 sta=0;   //寄存器调试代码用变量
       
        SPI1_SetSpeed(SPI_BaudRatePrescaler_8); //spi速度为10.5Mhz(24L01的最大SPI时钟为10Mhz)   
        ANO_SPI_CE_L();                 //StandBy I模式       
        ANO_NRF_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
        ANO_NRF_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                          // 装载数据       
        ANO_SPI_CE_H();                 //置高CE,激发数据发送
        while(NRF24L01_IRQ!=0);//等待发送完成
       
        sta=ANO_NRF_Read_Reg(NRFRegSTATUS);  //读取状态寄存器的值               
        ANO_NRF_Write_Reg(NRF_WRITE_REG+NRFRegSTATUS,sta); //清除TX_DS或MAX_RT中断标志
        if(sta&MAX_TX)//达到最大重发次数
        {
                ANO_LED1_BULING();
                ANO_NRF_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
                return MAX_TX;
        }
        if(sta&TX_OK)//发送完成
        {
                return TX_OK;
        }
        return 0xff;//其他原因发送失败
}
tonghan2009 回答时间:2018-11-17 08:52:30
tonghan2009 发表于 2018-11-17 08:50
u8 ANO_NRF_TxPacket(uint8_t *tx_buf)
{               
        u8 sta=0;   //寄存器调试代码用变量

发送的用STM32F103 接收用STM32F407,这样对SPI读写速度是不是有要求,不过我都设置了8分频了
党国特派员 回答时间:2018-12-3 17:39:01
2.4G 干扰太多了。是会出现这种情况。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版