打印
[51单片机]

nrf24L01 无线模块一旦发送IRQ引脚一直为高!

[复制链接]
5316|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nbsmaps|  楼主 | 2016-7-12 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nbsmaps 于 2016-7-12 21:57 编辑

nrf24L01 无线模块   供电3.3V  控制引脚与5V单片机直连.   只要一启动发送,程序就一直停留在 while(irq);这一句上.我也启动了自动应答,自动重发.而且,即使单片机复位,一定要断电无线模块才行,不然连查找程序都通不过.    请用过的朋友帮我想想是什么原因!

uchar NRF24L01_TxPacket(uchar *txbuf)
{
uchar state;
  CE=0;                                               //CE拉低,使能24L01配置
  NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);           //写数据到TX BUF  6个字节
DelayUs(100);
  CE=1;                                             //CE置高,使能发送           
        while(IRQ==1);                               //等待发送完成
        state=NRF24L01_Read_Reg(STATUS);           //读取状态寄存器的值           
        NRF24L01_Write_Reg(WRITE_REG+STATUS,state);                                //清除TX_DS或MAX_RT中断标志
        if(state&MAX_TX)                                                                                                     //达到最大重发次数
        {
                NRF24L01_Write_Reg(FLUSH_TX,0xff);                                                   //清除TX FIFO寄存器
                return MAX_TX;
        }
        if(state&TX_OK)                                                                                                             //发送完成
        {
                return TX_OK;
        }
        return 0xff;                                                                                                              //发送失败
}

相关帖子

沙发
nbsmaps|  楼主 | 2016-7-12 21:56 | 只看该作者
//============================24L01初始化函数=================================================
// 函数名称: void NRF24L01_Init_Code(void)
// 功能描述: 初始化24L01,把地址初始为固定地址
// 输入输出:
// 说明:            若有检测模块是否存在,则应先调用模块检测程序
//===============================================================================================
void NRF24L01_Init_Code(void)
{       
        CE=0;                  
  NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);                    //选择通道0的有效数据宽度
        NRF24L01_Write_Reg(FLUSH_RX,0xff);                                                                                              //清除RX FIFO寄存器   
  NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(uchar*)TX_ADDRESS,5);               //写TX节点地址
  NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(uchar*)RX_ADDRESS,5);            //设置TX节点地址,主要为了使能ACK          
  NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);                                 //使能通道0的自动应答   
  NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);                             //使能通道0的接收地址  
  NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);                            //设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
  NRF24L01_Write_Reg(WRITE_REG+RF_CH,0);                                    //设置RF通道为2.400GHz  频率=2.4+0GHz
  NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0F);                              //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
  NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0f);                                //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
        CE=1;                                                                                                                            //CE置高,使能发送
}

使用特权

评论回复
板凳
ningling_21| | 2016-7-13 09:14 | 只看该作者
IRQ 接到MCU的外部中断,在外部中断中 查询是否发送成功

使用特权

评论回复
地板
旭日东起| | 2016-7-13 16:40 | 只看该作者
初始化配置成接收模式了???

使用特权

评论回复
5
hello_zkp| | 2016-7-19 21:52 | 只看该作者
我最近用的是XS128单片机调试,遇到了同样的问题

使用特权

评论回复
6
hello_zkp| | 2016-7-19 21:53 | 只看该作者
请问有找到问题所在吗?

使用特权

评论回复
7
nbsmaps|  楼主 | 2016-7-22 16:44 | 只看该作者
没有,一直没找到,现在第一次通讯是正常的,然后就不行了

使用特权

评论回复
8
nbsmaps|  楼主 | 2016-8-9 09:20 | 只看该作者
换了家供应模块的厂家,就不存在这个问题了!

使用特权

评论回复
9
ningling_21| | 2016-8-9 10:34 | 只看该作者
nbsmaps 发表于 2016-8-9 09:20
换了家供应模块的厂家,就不存在这个问题了!

模块坏了?

使用特权

评论回复
10
NE5532| | 2016-9-2 08:48 | 只看该作者
肯定不是,是自己软件问题,通讯一次以后试着重新初始化模块,看是不是又能接收一次?接收以后有状态没有复原。

使用特权

评论回复
11
neieguren| | 2016-11-10 22:02 | 只看该作者
楼主解决问题了么?

使用特权

评论回复
12
JerryWu75| | 2016-11-11 09:54 | 只看该作者
是不是你屏蔽了无线模块的IRQ功能了?
MCU的接IRQ的管脚是输入还是输出?
用示波器看看IRQ的波形看看,看无线模块有没有发IRQ信号?

使用特权

评论回复
13
ningling_21| | 2016-11-11 12:14 | 只看该作者
neieguren 发表于 2016-11-10 22:02
楼主解决问题了么?

遇到什么问题

使用特权

评论回复
14
neieguren| | 2016-11-11 20:09 | 只看该作者

也是IRQ一直为高电平,无法清零

使用特权

评论回复
15
neieguren| | 2016-11-12 00:56 | 只看该作者
JerryWu75 发表于 2016-11-11 09:54
是不是你屏蔽了无线模块的IRQ功能了?
MCU的接IRQ的管脚是输入还是输出?
用示波器看看IRQ的波形看看,看无线 ...

我这边是没屏蔽IRQ功能  SPI_Write_Reg(WRITE_REG + NRF_CONFIG, 0x0e);
管脚也是定义的输出到MCU的
然后我感觉示波器能观测到这一瞬间的跳变么

使用特权

评论回复
16
JerryWu75| | 2016-11-14 11:16 | 只看该作者
neieguren 发表于 2016-11-12 00:56
我这边是没屏蔽IRQ功能  SPI_Write_Reg(WRITE_REG + NRF_CONFIG, 0x0e);
管脚也是定义的输出到MCU的
然 ...

示波器设置脉冲捕捉功能,这个一般示波器都有吧

使用特权

评论回复
17
libre01| | 2016-11-15 10:19 | 只看该作者
你可以用逻辑分析仪分析下所有管脚的波形,这样就很快发现问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

268

帖子

3

粉丝