天线|RF射频
直播中

陈华

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

NRF24L01发送端却收不到回复的原因?

配置正常,发送数据接收端已经接受,也产生的接收中断,可是发送端却收不到回复,以至于发送溢出中断,但是明明两边都开启了所有中断,开了所用通道的自动应答

回帖(3)

张琼

2020-7-29 10:08:46
检查接收机第地址对不对了
举报

张润佘

2020-7-29 10:27:08
自动应答ack,通道0地址要跟发送地址一样,发送完后,设置为接收模式时重新设置通道0地址
举报

贺楠

2020-7-29 10:40:26
//发送数据
u8 NRF_SendPayload(const u8 ack,const  u8 *addr,const  u8 channel,const  u8 *buf)
{
        u16 i=1;
        NRF_CE = 0;
        NRF_WriteBuf(W_REGISTER+TX_ADDR, addr, MAC_LEN);//写TX节点地址
        if(ack)
        {
                NRF_WriteBuf(W_REGISTER+RX_ADDR_P0, addr, MAC_LEN);//写通道0,RX地址
        }
        NRF_WriteReg(W_REGISTER+RF_CH, channel);//设置RF通信频率
        NRF_WriteReg(FLUSH_TX, 0xff);//清发送FIFO
        NRF_WriteBuf(W_TX_PAYLOAD, buf, PAYLOAD_LEN);
        NRF_WriteReg(W_REGISTER+CONFIG, 0x0A);//RX_DR,TX_DS,MAX_RT中断使能,CRC:8,POWER_UP,发送模式
        NRF_CE = 1;//设置CE为高启动发射,CE高电平持续时间最小为10us
        NRF_DelayUs(10);
#ifdef DEBUG
        TIM_MeasureStart();//开始计时
#endif
        while(i++)
        {
                if(TranFinish_flag)
                {
                        TranFinish_flag = 0;
#ifdef DEBUG
                        TIM_MeasureStop();//计算发送时间
                        printf("TranFinishrn");
#endif
                        return TRUE;
                }
                if(Timeout)
                {
#ifdef DEBUG
                        printf("MAX_RTrn");
#endif
                        Timeout = 0;
                        NRF_WriteReg(FLUSH_TX, 0xff);//清发送FIFO
                        return FALSE;
                }
        }
#ifdef DEBUG
        printf("TranTimeoutrn");
#endif
        NRF_WriteReg(W_REGISTER+STATUS, IRQ_ALL);//清除状态标志
        NRF_WriteReg(FLUSH_RX, 0xff);//清接收FIFO
        NRF_WriteReg(FLUSH_TX, 0xff);//清发送FIFO
        return FALSE;
}
//接收模式
void NRF_RxMode(const u8 *addr,const  u8 channel)
{
        NRF_CE = 0;
        NRF_WriteBuf(W_REGISTER+RX_ADDR_P0, addr, MAC_LEN);//写RX节点地址
        NRF_WriteReg(W_REGISTER+RF_CH, channel);//设置RF通信频率
        NRF_WriteReg(FLUSH_RX, 0xff);//清接收FIFO
        NRF_WriteReg(W_REGISTER+CONFIG, 0x0B);//RX_DR,TX_DS,MAX_RT中断使能,CRC:8,POWER_UP,接收模式
        NRF_CE = 1;//CE为高,进入接收模式
}
举报

更多回帖

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