新手入门
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2015-3-30
- 在线时间
- 0 小时
|
楼主 |
发表于 2015-3-30 13:52:27
|
显示全部楼层
回复【2楼】ST-FAE-SALE: <br />
--------------------------------- <br />
大体情况: <br />
目前我开了6路,发射机每隔1s发送一次数据,经过长期几十个小时的测试,数据收发比较稳定。但是不定期时间内,会丢1-2次包,丢包很少,但是存在,在三秒之内所有的发射机必定都会收到正确的数据(通过看闪灯的情况)。 <br />
<br />
目前在分析丢包的原因: <br />
1.同频干扰排除,之前看到一个网友,调试时频率调到2.5G, 排除wifi干扰。 频率调到2.5G测试过,仍然存在这个问题。 <br />
2.电源干扰。使用的电池都比较好的稳定的电池。加在stm32与nrf24l01,还有pa上的都比较稳定。 <br />
3.第三点我就想到,开启了ack后,看到英文手册上,接收机接收到数据后,shockburst模式中自动切换到发射模式,发送应答,发完后又切换回来。 <br />
会不会存在这样一种情况:就是6路发射机的信号同时到达,接收机接收其中一路,应答一路。其他发射机,则进入自动重发。(这里设置的重发15次)以此这样循环。但是不确定这一点。跳出来想想,芯片设计能1对6,肯定是考虑到这种情况的。 <br />
<br />
我想问一下大家,有没有遇到的同样的情况的。或是能给我提供一些其他丢包的原因 。^-^谢谢! <br />
<br />
<br />
下面是发包代码。 <br />
<br />
void nRF24L01_TxPacket(unsigned char * tx_buf,u8 tx_len, unsigned char pwr) <br />
{ <br />
u8 sta_reg; <br />
CE_0; <br />
inerDelay_us(10);//StandBy I模式 <br />
<br />
sta_reg = SPI_Read(STATUS); <br />
if(sta_reg & 0x70) <br />
SPI_RW_Reg(WRITE_REG+STATUS,sta_reg & 0x70); //清标志 <br />
<br />
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, tx_len); // 装载数据 <br />
<br />
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送 <br />
CE_1; //置高CE,激发数据发送 <br />
inerDelay_us(60); <br />
<br />
do{ <br />
sta_reg = SPI_Read(STATUS); <br />
if(sta_reg & 0x20) <br />
break; <br />
inerDelay_us(5); <br />
}while(!(sta_reg & 0x10)); <br />
<br />
SPI_RW_Reg(FLUSH_TX,0xff);//清空FIFO <br />
CE_0;//发送完成后,进入待机模式1 <br />
} <br />
<br />
main.c中: <br />
<br />
nRF24L01_TxPacket(Tx_DAT,TX_PLOAD_WIDTH_WORK,pwr);// 发送 <br />
if (0x20 & SPI_Read(STATUS)) <br />
LED_flash(GREEN,1); <span>//闪绿灯,发送成功</span><br />
else <br />
LED_flash(ORANGE,1);<span>//闪橙灯,发送失败 </span> |
|