用nRF24L01做了一个无线通信系统,程序用C写的,但是传输时偶尔有丢包现象,请问如何提高传输的成功率?

我做的东西中除了nRF24L01无线,还有用DS1302做的万年历显示、DS18B20做的温度采集并显示。... 我做的东西中除了nRF24L01无线,还有用DS1302做的万年历显示、DS18B20做的温度采集并显示。 展开
 我来答
百度网友ec9719df53
2012-10-25 · TA获得超过664个赞
知道小有建树答主
回答量:322
采纳率:95%
帮助的人:220万
展开全部
那个我原来用过,超级恶心,线路一定要焊好,稍有不好就不行,而且我记得我当时将两个模块放的远一点,丢包现象就很严重了,离得很近的话基本不丢包。
最好你应该做一个简单的协议,有发送,有回复。如果接收端错误,返回错误,让发送端重发,还需要设置一个超时重发机制,设置最大重发次数。nrf2401本身也可以设置超时重发,我当时设置的重发10次,当时距离离得远一点,就会出现丢包。后来我做了上述的简单的可靠传输协议,才行。最好设置led灯显示,便于调试,知道丢包次数。我当时是发送一个led闪烁一下,一看就知道是重发还是没有重发。
追问
我增加了led指示,发送闪一下,接收闪两下,设置自动应答,延时1000+86us,重发次数15次,但是有时发送方发送了(led闪了一下),没见接收方接收(led没闪),却没见发送方却没见重复闪灯啊
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x3f);
if (tf==1)
{
led = 0;
Delay(5000);
led = 1;

nRF24L01_TxPacket(TxBuf);
}
是我闪灯的位置不对?
追答
我记得它的重发是内部硬件实现的,不是单纯的多次调用nRF24L01_TxPacket实现的。也就是说你调用一次nRF24L01_TxPacket,如果接收方没有接收,那么在nrf硬件的内部会自动进行重发,这个间隔时间极短,如果发送15次还没有对方的回复,一个中断引脚会有边沿的跳变,表明是由于重发引起的中断。你可以设置读取那个中断,在中断里面再次进行触发nRF24L01_TxPacket
匿名用户
2012-10-21
展开全部
我碰到过这样的问题主要是硬件问题,在发送数据的时候你可以用示波器测一下MISO口的波形看看波形是否稳定。还有就是nrf是rf发射的周围的信号会对它有影响,DS1302比较稳定,DS18B20有一定的反应时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
看老鼠在天上飞cu93d
2012-10-20 · TA获得超过252个赞
知道小有建树答主
回答量:604
采纳率:50%
帮助的人:384万
展开全部
现在搞不清是软件 还是硬件的事故
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式