OpenEdv-开源电子网

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

NRF24L01 "Send Failed"的问题

[复制链接]

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-4-27
在线时间
3 小时
发表于 2013-9-23 03:44:16 | 显示全部楼层 |阅读模式
<div>原子哥,你的这个代码很智能,没有接收端就会显示”Send Failed“ ,但是我不知道为什么,有没有发送完成 和 有没有接收端有什么关系?他是怎么检测到有没有接收端?<br />
找了很久没找到原因<br />
<br />
while(1)</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>{<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre;">                </span> &nbsp; <span class="Apple-tab-span" style="white-space:pre;">                                </span>&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>if(NRF24L01_TxPacket(tmp_buf)==TX_OK) //如果发送完成【tmp_buf是发送的数据】</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>{<span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>LCD_ShowString(60,170,"Sended DATA:");<span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>LCD_ShowString(0,190,tmp_buf); <span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>key=mode;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>for(t=0;t&lt;32;t++)</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                        </span>key++;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                        </span>if(key&gt;('~'))key=' ';</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                        </span>tmp_buf[t]=key;<span class="Apple-tab-span" style="white-space:pre;">        </span>//【将要发送的数据存入tmp_buf[32]数组】</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>mode++;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>if(mode&gt;'~')mode=' '; &nbsp;<span class="Apple-tab-span" style="white-space:pre;">        </span> &nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>tmp_buf[32]=0;//加入结束符<span class="Apple-tab-span" style="white-space:pre;">                </span> &nbsp;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>}else</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>{<span class="Apple-tab-span" style="white-space:pre;">                                                                                </span> &nbsp; <span class="Apple-tab-span" style="white-space:pre;">        </span></div>
<div>&nbsp;<span class="Apple-tab-span" style="white-space:pre;">                                </span>LCD_ShowString(60,170,"Send Failed "); <span style="color:#e53333;">/*【发送数据但是没有接收端会显示失败,为什么?*/</span></div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>LCD_Fill(0,188,240,218,WHITE);//清空上面的显示<span class="Apple-tab-span" style="white-space:pre;">                        </span> &nbsp;&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>};</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>LED0=!LED0;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                        </span>delay_ms(1500);<span class="Apple-tab-span" style="white-space:pre;">                                </span> &nbsp; &nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>};</div>
平凡的有点不正常
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-9-23 12:43:07 | 显示全部楼层
回复【楼主位】justin小默:
<br>---------------------------------
<br>因为启用了自动ACK功能,即发送端发送数据后,必须收到接收端反馈的ACK,才认为发送成功,只要没收到来自接收端的ACK信号,那就认为此次发送失败。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-4-27
在线时间
3 小时
 楼主| 发表于 2013-9-23 13:37:07 | 显示全部楼层
<br />
我把自动ACK这段注释了,对程序也没影响......没有接收端还是会显示“Send&nbsp;Failed”...
平凡的有点不正常
回复 支持 反对

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-4-27
在线时间
3 小时
 楼主| 发表于 2013-9-23 13:37:48 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>void&nbsp;RX_Mode(void)&nbsp;
<br>{&nbsp;
<br>NRF24L01_CE=0;        &nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址&nbsp;
<br>&nbsp;&nbsp;&nbsp;
<br>//&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;//使能通道0的自动应答【接收到数据产生应答】&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址&nbsp;&nbsp;        &nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通信频率        &nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+CONFIG,&nbsp;0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_CE&nbsp;=&nbsp;1;&nbsp;//CE为高,进入接收模式&nbsp;&nbsp;
<br>}        &nbsp;&nbsp;&nbsp;
<br>
<br>void&nbsp;TX_Mode(void)&nbsp;
<br>{        &nbsp;&nbsp;&nbsp;
<br>NRF24L01_CE=0;        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);&nbsp;//设置TX节点地址,主要为了使能ACK        &nbsp;&nbsp;&nbsp;
<br>
<br>//&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能通道0的自动应答&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);&nbsp;//使能通道0的接收地址&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us&nbsp;+&nbsp;86us;最大自动重发次数:10次&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通道为40&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);&nbsp;&nbsp;//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);&nbsp;&nbsp;&nbsp;&nbsp;//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断&nbsp;
<br>NRF24L01_CE=1;//CE为高,10us后启动发送&nbsp;
<br>}       
<br>
<br>我把自动ACK这段注释了,对程序也没影响......没有接收端还是会显示“Send&nbsp;Failed”...
平凡的有点不正常
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-9-23 19:45:52 | 显示全部楼层
这个是你要的配置:
<br>void&nbsp;NRF24L01_TX_Mode(void)
<br>{                                                                                                                &nbsp;
<br>        NRF24L01_CE=0;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址&nbsp;
<br>&nbsp;&nbsp;        //NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);&nbsp;//设置TX节点地址,主要为了使能ACK        &nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+EN_AA,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭通道0的自动应答&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0);&nbsp;//关闭通道0的接收地址&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0);//关闭自动重发送
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通道为40
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);&nbsp;&nbsp;//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);&nbsp;&nbsp;&nbsp;&nbsp;//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
<br>        NRF24L01_CE=1;//CE为高,10us后启动发送
<br>}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2013-4-27
在线时间
3 小时
 楼主| 发表于 2013-9-23 20:41:07 | 显示全部楼层
回复【5楼】正点原子:
<br>---------------------------------
<br>soga&nbsp;&nbsp;谢谢原子哥
平凡的有点不正常
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-7-1
在线时间
1 小时
发表于 2013-10-13 16:57:03 | 显示全部楼层
学习了。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-3-12
在线时间
1 小时
发表于 2014-8-13 12:39:55 | 显示全部楼层
原子哥,我最近也在用MINI STM32的板调nRF24L01调,发现程序也与上面说的,"Send failed"<br />
我也如同上面的注释掉了自动应答,还是<span>"Send failed"<br />
我用的是你的代码,除了注释点,都没改过任何代码。</span>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-13 23:28:11 | 显示全部楼层
回复【8楼】76985639@qq.com:
<br>---------------------------------
<br>说明你改的不正确,论坛我发过不带自动ACK的代码,搜索下吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 15:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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