中级会员
- 积分
- 202
- 金钱
- 202
- 注册时间
- 2013-9-11
- 在线时间
- 39 小时
|
<p>
这是发送机的TX_MODO配置
</p>
<p>
void NRF24L01_TX_Mode(void)<br />
{ <br />
NRF_CE=0; <br />
NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址 <br />
NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK <br />
NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01); //使能通道0的自动应答 <br />
NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01); //使能通道0的接收地址 <br />
NRF24L01_Write_Reg(WRITE_REG_NRF+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次<br />
NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40); //设置RF通道为40<br />
NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 <br />
NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,0x0e); //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断<br />
NRF_CE=1;//CE为高,10us后启动发送<br />
}
</p>
<p>
<br />
</p>
<p>
</p>
<p>
这是发送函数
</p>
<p>
u8 NRF24L01_TxPacket(u8 *txbuf)<br />
{<br />
u8 sta; <br />
NRF_CE=0;<br />
NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节<br />
NRF_CE=1;//启动发送 <br />
while(NRF_IRQ!=0);//等待发送完成<br />
sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值<br />
NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,sta); //清除TX_DS或MAX_RT中断标志<br />
if(sta&MAX_TX)//达到最大重发次数<br />
{<br />
NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器 <br />
return MAX_TX; <br />
}<br />
if(sta&TX_OK)//发送完成<br />
{<br />
return TX_OK;<br />
}<br />
return 0xff;//其他原因发送失败<br />
}
</p>
<p>
<br />
</p>
<p>
<span style="font-size:16px;">接收板用的是原子哥的战舰开发板。程序也是自带的。</span>
</p>
<p>
<span style="color:#E53333;font-size:16px;">无论自动重发次数是多少都会出现以下两种情况。</span>
</p>
<p>
<span style="color:#E53333;font-size:16px;">主机每次上电第一次发送总是收到不到数据,反回的值是达到最大发送次数。</span>
</p>
<p>
<span style="color:#E53333;font-size:16px;">以后发送的时候就可以成功了,返回的值也是达到最大发送次数</span><span style="font-size:16px;">。</span>
</p>
<p>
<span style="font-size:16px;">请各位大神帮忙分析下。</span>
</p>
<p>
<span style="font-size:16px;"><br />
</span>
</p> |
|