高级会员 
  
	- 积分
 - 526
 
        - 金钱
 - 526 
 
       - 注册时间
 - 2013-11-25
 
      - 在线时间
 - 0 小时
 
 
 
 | 
 
5金钱 
除了使用函数NRF24L01_Check()外,是否有其他方法可以确认NRF24L01是否损坏呢?<br /> 
我手里有3个无线模块,检测结果竟然都是连接失败,实在不敢相信是三个模块都坏了,请问一下下面程序中难道有处理错误的地方么?<br /> 
下面是检测连接是否成功的程序:<br /> 
<div   style="background-color:#E8E8E8;"> 
[mw_shl_code=c,true]u8 NRF24L01_Check(void) 
{ 
        u8 buf[5]={0xA5,0xA5,0xA5,0xA5,0xA5}; 
        u8 i; 
         SPI2_SetSpeed(SPI_BaudRatePrescaler_4);           
        NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR ,buf,5); 
        NRF24L01_Read_Buf(TX_ADDR,buf,5);   
        for(i=0;i<5;i++) 
        { 
                if(buf!=0xA5) 
                        break;         
        }                 
        if(i!=5) 
                return 1;        //失败 
        else  
                return 0;         //成功 
} 
[/mw_shl_code] 
</div> 
下面是在主函数中进行判断:<br /> 
<div   style="background-color:#E8E8E8;"> 
[mw_shl_code=c,true]        while(NRF24L01_Check()) 
        { 
                LED1_ADD=0;  
                Delay_1us(5000); 
                LED1_ADD=1; 
                Delay_1us(5000); 
        } 
[/mw_shl_code] 
</div> 
如果连接成功的话,LED灯应该是不亮的,但是三个无线模块在烧录程序后LED都不挺闪烁<br /> 
单步运行发现,程序在for循环中只循环了一次就跳出循环了,即i=0,导致返回值一直都是1<br /> 
<div   style="background-color:#E8E8E8;"> 
[mw_shl_code=c,true]        for(i=0;i<5;i++) 
        { 
                if(buf!=0xA5) 
                        break;         
        }[/mw_shl_code] 
</div> 
请问到底是程序出错了么?其他部分的程序都是从NRF24L01的例程里面直接copy的<br /> 
又或者是我的NRF坏了?除了这种运行程序的方法外,有什么其他办法确定是否模块坏了么?<br /> 
谢谢! |   
 
 
最佳答案
查看完整内容[请看2#楼] 
我们这个就是读写寄存器。
如果你读写寄存器都不成功,那说明最基础的通信都失败了,自然用是没法用了。。。。
其它没想到更简单的办法了。 
 
 
 
 
 
 
 |