发 帖  
原厂入驻New
[问答] NRF24L01 "Send Failed"的问题怎么解决
21 代码 接收端
分享
<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>  <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>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<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>('~'))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++; </div>
<div><span class="Apple-tab-span" style="white-space:pre;">                                </span>if(mode>'~')mode=' ';  <span class="Apple-tab-span" style="white-space:pre;">        </span>  </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>   </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>   <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,"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>   </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>    </div>
<div><span class="Apple-tab-span" style="white-space:pre;">                </span>};</div>
0
2020-5-22 13:22:06   评论 分享淘帖 邀请回答
8个回答
<br>因为启用了自动ACK功能,即发送端发送数据后,必须收到接收端反馈的ACK,才认为发送成功,只要没收到来自接收端的ACK信号,那就认为此次发送失败。
2020-5-22 14:46:16 评论

举报

<br />
我把自动ACK这段注释了,对程序也没影响......没有接收端还是会显示“Send&nbsp;Failed”...
2020-5-22 14:53:08 评论

举报

<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”...
这个是你要的配置:
<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>}
2020-5-22 15:27:51 评论

举报

<br>soga&nbsp;&nbsp;谢谢原子哥
2020-5-22 15:35:07 评论

举报

2020-5-22 15:45:16 评论

举报

原子哥,我最近也在用MINI STM32的板调nRF24L01调,发现程序也与上面说的,"Send failed"<br />
我也如同上面的注释掉了自动应答,还是<span>"Send failed"<br />
我用的是你的代码,除了注释点,都没改过任何代码。</span>
2020-5-22 16:03:01 评论

举报

<br>说明你改的不正确,论坛我发过不带自动ACK的代码,搜索下吧.
2020-5-22 16:21:08 评论

举报

只有小组成员才能发言,加入小组>>

96个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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