
用nRF24L01做了一个无线通信系统,程序用C写的,但是传输时偶尔有丢包现象,请问如何提高传输的成功率?
我做的东西中除了nRF24L01无线,还有用DS1302做的万年历显示、DS18B20做的温度采集并显示。...
我做的东西中除了nRF24L01无线,还有用DS1302做的万年历显示、DS18B20做的温度采集并显示。
展开
3个回答
展开全部
那个我原来用过,超级恶心,线路一定要焊好,稍有不好就不行,而且我记得我当时将两个模块放的远一点,丢包现象就很严重了,离得很近的话基本不丢包。
最好你应该做一个简单的协议,有发送,有回复。如果接收端错误,返回错误,让发送端重发,还需要设置一个超时重发机制,设置最大重发次数。nrf2401本身也可以设置超时重发,我当时设置的重发10次,当时距离离得远一点,就会出现丢包。后来我做了上述的简单的可靠传输协议,才行。最好设置led灯显示,便于调试,知道丢包次数。我当时是发送一个led闪烁一下,一看就知道是重发还是没有重发。
最好你应该做一个简单的协议,有发送,有回复。如果接收端错误,返回错误,让发送端重发,还需要设置一个超时重发机制,设置最大重发次数。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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询