[STM32] 如何检查NRF24L01无线模块是否损坏

[复制链接]
 楼主| 泡沫馨馨 发表于 2014-8-21 12:11 | 显示全部楼层 |阅读模式
除了使用函数NRF24L01_Check()外,是否有其他方法可以确认NRF24L01是否损坏呢?
我手里有3个无线模块,检测结果竟然都是连接失败,实在不敢相信是三个模块都坏了,请问一下下面程序中难道有处理错误的地方么?
下面是检测连接是否成功的程序:
  1. u8 NRF24L01_Check(void)
  2. {
  3.         u8 buf[5]={0xA5,0xA5,0xA5,0xA5,0xA5};
  4.         u8 i;
  5.          SPI2_SetSpeed(SPI_BaudRatePrescaler_4);         
  6.         NRF24L01_Write_Buf(WRITE_REG_NRF+TX_ADDR ,buf,5);
  7.         NRF24L01_Read_Buf(TX_ADDR,buf,5);  
  8.         for(i=0;i<5;i++)
  9.         {
  10.                 if(buf[i]!=0xA5)
  11.                         break;        
  12.         }               
  13.         if(i!=5)
  14.                 return 1;        //失败
  15.         else
  16.                 return 0;         //成功
  17. }
下面是在主函数中进行判断:
  1.         while(NRF24L01_Check())
  2.         {
  3.                 LED1_ADD=0;
  4.                 Delay_1us(5000);
  5.                 LED1_ADD=1;
  6.                 Delay_1us(5000);
  7.         }
如果连接成功的话,LED灯应该是不亮的,但是三个无线模块在烧录程序后LED都不挺闪烁
单步运行发现,程序在for循环中只循环了一次就跳出循环了,即i=0,导致返回值一直都是1

请问到底是程序出错了么?其他部分的程序都是从NRF24L01的例程里面直接copy的
又或者是我的NRF坏了?除了这种运行程序的方法外,有什么其他办法确定是否模块坏了么?
谢谢!
coody 发表于 2014-8-21 13:16 | 显示全部楼层
写入、读出寄存器是否正常,发送时是否有RF发出,就可以确定。
nightingale2003 发表于 2014-8-21 14:03 | 显示全部楼层
LZ试着读出返回的到底是什么值然后直接显示出来吧。
我以前就试过不论写什么,返回来的都是0xff,后来万用表查出就算返回的是0,到单片机IO口也被抬升到了2V,判断为高电平。
 楼主| 泡沫馨馨 发表于 2014-8-21 14:13 | 显示全部楼层
coody 发表于 2014-8-21 13:16
写入、读出寄存器是否正常,发送时是否有RF发出,就可以确定。

我也试过直接发送数据,但是发现程序卡死在
        while(NRF24L01_IRQ==1);//判断发送是否成功
所以根本无法判断读出寄存器是否正常
这样就无法判断到底是发送函数有问题,还是NRF坏了连接失败了呀

 楼主| 泡沫馨馨 发表于 2014-8-21 14:15 | 显示全部楼层
nightingale2003 发表于 2014-8-21 14:03
LZ试着读出返回的到底是什么值然后直接显示出来吧。
我以前就试过不论写什么,返回来的都是0xff,后来万用 ...

我也试过直接发送数据,但是发现程序卡死在
        while(NRF24L01_IRQ==1);//判断发送是否成功
我在函数中return了status和fifostatus,但是程序卡死在上面语句后根本运行不到返回函数

这样就无法判断到底是发送函数有问题,还是NRF坏了连接失败了呀
ningling_21 发表于 2014-8-21 14:21 | 显示全部楼层
泡沫馨馨 发表于 2014-8-21 14:15
我也试过直接发送数据,但是发现程序卡死在
        while(NRF24L01_IRQ==1);//判断发送是否成功
我在函 ...

你可以让它1秒发送一次数据,如果发送出去但没接收到信号,会自动产生最大重发中断...

如果不能产生中断,就可能坏了...
nightingale2003 发表于 2014-8-21 14:53 | 显示全部楼层
泡沫馨馨 发表于 2014-8-21 14:15
我也试过直接发送数据,但是发现程序卡死在
        while(NRF24L01_IRQ==1);//判断发送是否成功
我在函 ...

先不要用IRQ了,用查询法吧,每隔一段时间查询一次寄存器的值
liaojihua2010 发表于 2014-9-26 15:18 | 显示全部楼层
SPI时序和逻辑,用示波器看;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

24

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部