搜索
bottom↓
回复: 21

nRF24L01复位问题,忒惨~~

[复制链接]

出0入0汤圆

发表于 2010-4-9 19:54:01 | 显示全部楼层 |阅读模式
小菜这几天调试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;
  }
芯片资料上对掉电模式信号时这么描述的:

(原文件名:状态1.jpg)
这里是这么解释的:

(原文件名:状态2.jpg)
小菜是这么理解的:掉电后必须重新配置功能寄存器,才能进入发送或接收模式,单片机复位后都对nRF2401重新配置了的,我觉得应该不会是这个问题,不知道哪位大侠遇到这个问题是怎么解决的,能否给小菜点意见??

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-4-25 14:45:18 | 显示全部楼层
24l01响应所有中断后,有没有清其寄存器啊?07寄存器

出0入0汤圆

 楼主| 发表于 2010-4-29 17:38:28 | 显示全部楼层
有的 没进一次中断都会清中断标志的   时间不多了  用了个mos管当电源开关  现在我们又不用考虑成本 试下在说吧

出0入0汤圆

发表于 2010-4-29 21:23:51 | 显示全部楼层
回复【2楼】Npng 卷心菜
-----------------------------------------------------------------------

用查询 别用中断~~

出0入0汤圆

发表于 2010-6-17 00:59:12 | 显示全部楼层
兄弟。。你的问题和我一模一样啊!!!连一个字都不差!!!

出0入0汤圆

发表于 2011-3-13 09:59:19 | 显示全部楼层
我也是这个问题,用的是nRF24L01+,难道就没有人有解决方案么……

出0入0汤圆

发表于 2011-6-1 15:39:25 | 显示全部楼层
我的也是,每次要NRF24L01重新上电才工作~~~

出0入0汤圆

发表于 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,响应所有中断
我按照这样写 貌似解决了这个问题。
一开始没有写这句nRF24L01_Write_register(0x00,0x00); 出现和楼主一摸一样的问题。不知其他人是怎么解决的

出0入0汤圆

发表于 2011-10-26 15:58:23 | 显示全部楼层
NFR2401,正打算玩这个,学习了!记号!

出0入0汤圆

发表于 2011-10-26 16:14:10 | 显示全部楼层
用 JLink.exe 命令行 >r 然后再>g (用jlink复位stm32).还是会出现楼主的问题。
只能重新上电,这样用着慌兮兮的……

出0入0汤圆

发表于 2011-10-26 16:46:37 | 显示全部楼层
初始化的时候 再增加一条 SPI_CMD(FLUSH_RX);
应该可以解决这个问题。

出0入0汤圆

发表于 2013-5-21 10:09:59 | 显示全部楼层
如果用中断一定要把中断设成低电平触发。中断里面读sta状态再写回去,这样在中断里IRQ自动被nRF24L01拉高。

出0入0汤圆

发表于 2013-5-22 10:01:20 | 显示全部楼层
你看下状态寄存器 是不是发生了最大重发中断了 也会拉低你的中断脚的

出0入0汤圆

发表于 2013-7-30 19:06:56 | 显示全部楼层
初始化后,清一下中断

出0入0汤圆

发表于 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); / ...

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

出0入0汤圆

发表于 2014-4-22 16:54:15 | 显示全部楼层
我也遇到过一样的问题

出0入0汤圆

发表于 2014-4-29 20:18:37 | 显示全部楼层
纠结中的我,观望一下,

出0入0汤圆

发表于 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); / ...

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

出0入0汤圆

发表于 2014-8-7 15:19:52 | 显示全部楼层
煮酒fu 发表于 2014-7-10 11:44
一人一个不同的问题, 我加上你的代码,我的程序都跑不动了。

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

出0入0汤圆

发表于 2014-8-7 16:47:52 | 显示全部楼层
问题解决了,就是楼主提到的那个问题,从POWERDOWN模式到tx模式,延时时间要够长~

出0入0汤圆

发表于 2015-8-10 10:07:02 | 显示全部楼层
感谢                                

出0入0汤圆

发表于 2015-8-11 10:17:25 | 显示全部楼层
我也是,一番发一个数据之后必须断电重启后才能发数据
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表