Npng 发表于 2010-4-9 19:54:01

nRF24L01复位问题,忒惨~~

小菜这几天调试nRF24L01,功能都能实现,不过发了个困扰了我两天的问题:只有上电开始 nRF24L01才能正常工作,单是对单片机复位nRF24L01就工作不了,
用示波器观察看出:中断脚IRQ一直被拉低,我用的IRQ下降沿作为AVR单片机的中断信号,现在上我的nRF24L01初始化函数,看有哪位仁兄能给我点建议!!

使用M128晶振 11.0592M
SPI速度:系统二分频

void nRF24L01_SPI_Initialization(void)
{
      unsigned char temp;
      CE_DDR    = 1;
      DDRG |= 0x10;
      CE_PORT   = 0;//初始化为待机模式
      CSN_PORT_1;//非选择

      MOSI_PORT = 1;
      MISO_PORT = 1;
      SCK_PORT = 0;

      MOSI_DDR = 1;
      MISO_DDR = 0;
      SCK_DDR = 1;

      SPCR = 0x50;          // SPI允许,主机模式,MSB方式,查询方式,极性方式00,1/4系统时钟频率
      SPSR = 0x01;
      temp = SPSR;
      temp = SPDR;          // 清除SPI中断标志位,使SPI空闲
}



void nRF24L01_Initialization(void)
{
   nRF24L01_Write_register(0x00,0x00);
   delay_ms(100);
   nRF24L01_Write_register(0x00,0x0F); //nrf上电,设为接收模式16位CRC,响应所有中断
   nRF24L01_Write_register(0x01,0x01); //通道0 自动应答允许
   nRF24L01_Write_register(0x02,0x01); //通道0 接收允许
   nRF24L01_Write_register(0x03,0x03); //地址宽度为5字节
   nRF24L01_Write_register(0x04,0x0E); //等待250+86us 自动重发15次
   nRF24L01_Write_register(0x05,30); //设置工作频率,发送和接收必须一样
   nRF24L01_Write_register(0x06,0x0F); //传输速率2M 发射功率0dBm
   nRF24L01_Write_register_nData(0x0A,5,Address);//设置接收地址
   nRF24L01_Write_register_nData(0x10,5,Address);    //设置发送地址地址
   nRF24L01_Write_register(0x11,32);   //32字节有效数据

}

//24L01中断为低电平触发,可使用下降沿做为单片机触发信号
void INT4_24L01_Initialization(void)
{
   EICRB |= 0x02; //INT4 下降沿触发
   EIMSK |=0x10;
   SFIOR |= 0x04;
   DDRE.4= 0;
   PORTE.4 = 1;
}
芯片资料上对掉电模式信号时这么描述的:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544946.jpg
(原文件名:状态1.jpg)
这里是这么解释的:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544947.jpg
(原文件名:状态2.jpg)
小菜是这么理解的:掉电后必须重新配置功能寄存器,才能进入发送或接收模式,单片机复位后都对nRF2401重新配置了的,我觉得应该不会是这个问题,不知道哪位大侠遇到这个问题是怎么解决的,能否给小菜点意见??

atonic 发表于 2010-4-25 14:45:18

24l01响应所有中断后,有没有清其寄存器啊?07寄存器

Npng 发表于 2010-4-29 17:38:28

有的 没进一次中断都会清中断标志的   时间不多了用了个mos管当电源开关现在我们又不用考虑成本 试下在说吧

canghaiwuhen 发表于 2010-4-29 21:23:51

回复【2楼】Npng 卷心菜
-----------------------------------------------------------------------

用查询 别用中断~~

myqiang1990 发表于 2010-6-17 00:59:12

兄弟。。你的问题和我一模一样啊!!!连一个字都不差!!!

andygongyb 发表于 2011-3-13 09:59:19

我也是这个问题,用的是nRF24L01+,难道就没有人有解决方案么……

X_BIKE 发表于 2011-6-1 15:39:25

我的也是,每次要NRF24L01重新上电才工作~~~

acmilann 发表于 2011-10-26 15:54:19

nRF24L01_Write_register(0x00,0x00);
   delay_ms(100);
   nRF24L01_Write_register(0x01,0x01); //通道0 自动应答允许
   nRF24L01_Write_register(0x02,0x01); //通道0 接收允许
   nRF24L01_Write_register(0x03,0x03); //地址宽度为5字节
   nRF24L01_Write_register(0x04,0x0E); //等待250+86us 自动重发15次
   nRF24L01_Write_register(0x05,30); //设置工作频率,发送和接收必须一样
   nRF24L01_Write_register(0x06,0x0F); //传输速率2M 发射功率0dBm
   nRF24L01_Write_register_nData(0x0A,5,Address);//设置接收地址
   nRF24L01_Write_register_nData(0x10,5,Address);    //设置发送地址地址
   nRF24L01_Write_register(0x11,32);   //32字节有效数据

   nRF24L01_Write_register(0x00,0x0F); //nrf上电,设为接收模式16位CRC,响应所有中断
我按照这样写 貌似解决了这个问题。./emotion/em003.gif
一开始没有写这句nRF24L01_Write_register(0x00,0x00); 出现和楼主一摸一样的问题。不知其他人是怎么解决的./emotion/em025.gif

lanjingjing 发表于 2011-10-26 15:58:23

NFR2401,正打算玩这个,学习了!记号!

acmilann 发表于 2011-10-26 16:14:10

用 JLink.exe 命令行 >r 然后再>g (用jlink复位stm32).还是会出现楼主的问题。
只能重新上电,这样用着慌兮兮的……

acmilann 发表于 2011-10-26 16:46:37

初始化的时候 再增加一条 SPI_CMD(FLUSH_RX);
应该可以解决这个问题。./emotion/em020.gif

wiking7758 发表于 2013-5-21 10:09:59

如果用中断一定要把中断设成低电平触发。中断里面读sta状态再写回去,这样在中断里IRQ自动被nRF24L01拉高。{:huffy:}

卖菜老汉 发表于 2013-5-22 10:01:20

你看下状态寄存器 是不是发生了最大重发中断了 也会拉低你的中断脚的

rossih 发表于 2013-7-30 19:06:56

初始化后,清一下中断

dongjiren2012 发表于 2014-4-22 13:19:56

acmilann 发表于 2011-10-26 15:54
nRF24L01_Write_register(0x00,0x00);
   delay_ms(100);
   nRF24L01_Write_register(0x01,0x01); / ...

呦西,谢谢楼主,终于解决问题了

tangwq 发表于 2014-4-22 16:54:15

我也遇到过一样的问题

jiang887786 发表于 2014-4-29 20:18:37

纠结中的我,观望一下,

煮酒fu 发表于 2014-7-10 11:44:21

acmilann 发表于 2011-10-26 15:54
nRF24L01_Write_register(0x00,0x00);
   delay_ms(100);
   nRF24L01_Write_register(0x01,0x01); / ...

一人一个不同的问题, 我加上你的代码,我的程序都跑不动了。

kaka_1314 发表于 2014-8-7 15:19:52

煮酒fu 发表于 2014-7-10 11:44
一人一个不同的问题, 我加上你的代码,我的程序都跑不动了。

我也遇到了同样的问题,不知道都是怎么解决的呢?

kaka_1314 发表于 2014-8-7 16:47:52

问题解决了,就是楼主提到的那个问题,从POWERDOWN模式到tx模式,延时时间要够长~

pop_wu 发表于 2015-8-10 10:07:02

感谢                              

chengyang79 发表于 2015-8-11 10:17:25

我也是,一番发一个数据之后必须断电重启后才能发数据
页: [1]
查看完整版本: nRF24L01复位问题,忒惨~~