OpenEdv-开源电子网

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

关于NRF24L01的NRF24L01_TxPacket函数一直返回MAX_TX问题

[复制链接]

9

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-3-7
在线时间
25 小时
发表于 2017-11-2 20:54:53 | 显示全部楼层 |阅读模式
10金钱
接收方我用的是战舰版,发送方用的是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);
                }



根本不知道哪里出了问题,请教些各位大神

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

使用道具 举报

9

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-3-7
在线时间
25 小时
 楼主| 发表于 2017-11-2 21:00:00 | 显示全部楼层
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2017-11-2 22:40:13 | 显示全部楼层
感觉你下面这思路好奇特 ,为啥每个判断都发一次呢
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);
}

回复

使用道具 举报

9

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-3-7
在线时间
25 小时
 楼主| 发表于 2017-11-3 09:25:07 | 显示全部楼层
275891381 发表于 2017-11-2 22:40
感觉你下面这思路好奇特 ,为啥每个判断都发一次呢
if(NRF24L01_TxPacket(tmp_buf) == TX_OK)
...

这是一样的,并不影响
回复

使用道具 举报

9

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-3-7
在线时间
25 小时
 楼主| 发表于 2017-11-3 09:25:36 | 显示全部楼层
NRF24L01的问题有没有人能解答一下啊
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2017-11-3 12:02:16 | 显示全部楼层
809659312 发表于 2017-11-3 09:25
NRF24L01的问题有没有人能解答一下啊

不过说实话,找不到问题,还不如直接用别人可用的,修改一下就可以了
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2017-11-3 12:55:34 | 显示全部楼层
查看收发双方,NRF芯片的应答位设置是否一致。

目测是你可能设置了应答,只有芯片收到了对方的应答之后才认为已经是正确发送,否则就重试,知道达到最大重试次数;

对方可能是设置了非应答,因此虽然接收到了数据但是没有返回应答信号。
十六进制带我飞。
回复

使用道具 举报

19

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2019-10-17
在线时间
42 小时
发表于 2020-3-14 11:09:52 | 显示全部楼层
楼主解决了没有,最近我也在纠结这个发送NRF24L01_TxPacket不反回tx_ok值的问题。。。。。。
回复

使用道具 举报

1

主题

82

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3166
金钱
3166
注册时间
2017-7-10
在线时间
361 小时
发表于 2021-8-18 13:44:41 | 显示全部楼层
接收发送的地址要一样,并开启自动应答
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2022-3-7
在线时间
9 小时
发表于 2022-3-9 20:26:07 | 显示全部楼层
楼主你好,小弟也是在接收端使用zet6,发射端使用c8t6,但是我在nrf24l01_check这里检测不到2401,可是可以写进去数据,想问下楼主遇到过这个问题吗,该怎么解决
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 21:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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