天线|RF射频
直播中

张利

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

NRF24L01的NRF24L01_TxPacket函数一直返回MAX_TX的解决办法?

接收方我用的是战舰版,发送方用的是STM32F103C8T6,基本上已经实现了可以发可以接收。
问题:
在接收方可以接收到正确的数据,但是发送方却一直提示是到达了最大重发次数,为什么会这样?
我发现论坛上有很多人都遇到这样的问题,但是没有一个比较满意的答案。
另外:我把发送模式的初始化程序改了一些(中间那几句设置都注释掉了),但是结果还是一样的
void NRF24L01_TX_Mode(void)
{
        NRF24L01_CE=0;
        NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);
        NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);
//        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01);   
//        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01);
//        NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x1a);
//        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40);   
//        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);
//        NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,0x0e);
        NRF24L01_CE=1;
}
主函数的判断发送程序也改了一些
                if(NRF24L01_TxPacket(tmp_buf) == TX_OK)
                {
                        LED0=0;
                }
                else if(NRF24L01_TxPacket(tmp_buf) == MAX_TX)
                {
                        LED0=0;delay_ms(1000);LED0=1;delay_ms(1000);
                }
                else if(NRF24L01_TxPacket(tmp_buf) == 0xff)
                {
                        LED0=0;delay_ms(100);LED0=1;delay_ms(3000);
                }
根本不知道哪里出了问题,请教些各位大神

回帖(6)

陈红娟

2020-6-14 17:20:46
帮帮我吧
举报

莫钻红

2020-6-14 17:36:02
感觉你下面这思路好奇特 ,为啥每个判断都发一次呢
if(NRF24L01_TxPacket(tmp_buf) == TX_OK)
{
       LED0=0;
}
else if(NRF24L01_TxPacket(tmp_buf) == MAX_TX)
{
       LED0=0;delay_ms(1000);LED0=1;delay_ms(1000);
}
else if(NRF24L01_TxPacket(tmp_buf) == 0xff)
{
      LED0=0;delay_ms(100);LED0=1;delay_ms(3000);
}
这样是不是更好
flag=NRF24L01_TxPacket(tmp_buf) ;
if(flag== TX_OK)
{
       LED0=0;
}
else if(flag== MAX_TX)
{
       LED0=0;delay_ms(1000);LED0=1;delay_ms(1000);
}
else if(flag== 0xff)
{
      LED0=0;delay_ms(100);LED0=1;delay_ms(3000);
}
举报

王玉兰

2020-6-14 17:50:21
这是一样的,并不影响
举报

谢昌火

2020-6-14 17:58:53
NRF24L01的问题有没有人能解答一下啊
举报

更多回帖

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