高级会员
- 积分
- 526
- 金钱
- 526
- 注册时间
- 2013-11-25
- 在线时间
- 0 小时
|
5金钱
根据网上给出的调试NRF24L01的方法,首先调试发送程序,<br />
进行如下处理:<br />
<div style="background-color:#E8E8E8;">
<pre class="brush:c# ;"> SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 关闭通道0自动应答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00); // 关闭接收通道0
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00); // 关闭自动重发[/mw_shl_code]
</div>
<br />
并写函数获得STATUS和FIFO_STATUS的值<br />
<div style="background-color:#E8E8E8;">
<pre class="brush:c# ;">u8 NRF_Get_State(void)
{
u8 status;
status=NRF24L01_Read_Reg(READ_REG_NRF+STATUS);
return status;
}
u8 NRF_Get_FIFOState(void)
{
u8 FIFO_status;
FIFO_status=NRF24L01_Read_Reg(READ_REG_NRF+NRF_FIFO_STATUS);
return FIFO_status;
}[/mw_shl_code]
</div>
<br />
<br />
在主函数中进行验证:<br />
<div style="background-color:#E8E8E8;">
[mw_shl_code=c,true] if(sta==0x2e)
{
LED1=0;
}
if(FIFO_sta==0x11)
{
LED2=0;
}[/mw_shl_code]
</div>
<br />
<br />
实验发现两盏灯都没有亮,说明发送失败了。<br />
其余部分的NRF程序都是直接从原子的例程拷贝的,<span>在线调试时全速运行发现程序的确卡死在这里了,</span><br />
while(NRF24L01_IRQ!=0);//等待发送完成<br />
但是当我单步运行的时候发现程序正常运行过这里,且在单步调试过程中,两盏灯都是能亮起来的。<br />
为什么单步运行和全速运行结果不同呢?<br />
<br />
注:NRF24L01_Check检测到连接已经成功了<br />
<br />
下面附上我的main函数<br />
<div style="background-color:#E8E8E8;">
<pre class="brush:c# ;">int main(void)
{
u8 temp_buf[33]={0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04, 0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,0x07};
u8 sta;
u8 FIFO_sta;
LED_Init();
NRF24L01_Init();
while(NRF24L01_Check())
{
LED3=0;
Delay_1us(5000);
LED3=1;
Delay_1us(5000);
}
TX_Mode();
while(1)
{
NRF24L01_TxPacket(temp_buf);
sta=NRF_Get_State();
FIFO_sta=NRF_Get_FIFOState();
if(sta==0x2e)
{
LED1=0;
}
if(FIFO_sta==0x11)
{
LED2=0;
}
NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,0XFF);
Delay_10us(10);
}
}
[/mw_shl_code]
</div>
不知道到底怎么解决这个问题,大家有遇到这种情况么?应该怎么解决呢?求指教!谢谢! |
|