打印
[51单片机]

NRF24L01模块 IRQ一直为高电平,求大神帮忙

[复制链接]
1407|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
neieguren|  楼主 | 2016-11-10 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求大神们帮帮忙,万分感谢。
按照手册,IRQ变低电平有三种情况,为什么我的一直为高。

void TX_Mode(uchar * BUF)
{
CE = 0;

  SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);        //写发送地址
  SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, TX_ADR_WIDTH);    //写接收地址
  SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH);                     //写数据到TX FIFO
  SPI_Write_Reg(WRITE_REG + EN_AA, 0x01);                              // 通道0自动应答
  SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);                          // 使能通道0接收
  SPI_Write_Reg(WRITE_REG + STATUS, 0x0e);                             //状态寄存器复位
  SPI_Write_Reg(WRITE_REG + SETUP_RETR, 0x05);                         // 自动重发延时,次数
  SPI_Write_Reg(WRITE_REG + RF_CH, 93);                                //射频通道
  SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0f);                           //传输速率2Mbps,发射功率0dBm
  SPI_Write_Reg(WRITE_REG + NRF_CONFIG, 0x0e);                         // CRC使能,发送模式,上电

  CE = 1;

}

相关帖子

沙发
neieguren|  楼主 | 2016-11-10 21:51 | 只看该作者
有什么问题,希望大神们能指出

使用特权

评论回复
板凳
neieguren|  楼主 | 2016-11-10 21:53 | 只看该作者
void CHECKFASONG(uchar DATA)
{
        TX_BUF[0] = DATA;
        TX_Mode(TX_BUF);       
        Check_ACK();       
}

uchar Check_ACK()
{
        while(IRQ);
        sta = SPI_RW( NOP );           
        if(MAX_RT)
                SPI_RW(FLUSH_TX);       
        SPI_Write_Reg(WRITE_REG + STATUS, sta);         
        IRQ = 1;
        if(TX_DS)
                return(0x00);
        else
                return(0xff);
}

使用特权

评论回复
地板
yanfengzhu| | 2016-11-12 09:06 | 只看该作者
一般来说,通讯不正常有很多情况,
首先是硬件是否正常, spi发送的数据是不是正确的。
还有初始化代码, 本人一般都是按你上面的代码倒过来的。 就是先上电。
第三,  SPI_Write_Reg(WRITE_REG + RF_CH, 93);                                //射频通道,   你确定93没有超出芯片能力范围,  一般是0 -- 83吧。 对应 2400 ---- 2483Mhz
第四, 都没发送数据,怎么会产生中断。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
neieguren + 1 谢谢
5
neieguren|  楼主 | 2016-11-12 13:36 | 只看该作者
yanfengzhu 发表于 2016-11-12 09:06
一般来说,通讯不正常有很多情况,
首先是硬件是否正常, spi发送的数据是不是正确的。
还有初始化代码,  ...

你好,谢谢了
上面代码是其中的初始化一部分,主函数里面有发送,利用的是CHECKFASONG函数
然后是射频通道问题,理论上是0-125m
硬件问题的话我暂时没办法解决,我可以试试你先上电的方法

使用特权

评论回复
6
neieguren|  楼主 | 2016-11-12 14:44 | 只看该作者
yanfengzhu 发表于 2016-11-12 09:06
一般来说,通讯不正常有很多情况,
首先是硬件是否正常, spi发送的数据是不是正确的。
还有初始化代码,  ...

好像是没有检测到NRF的存在,不知道要怎么解决了,换模块么?

使用特权

评论回复
7
neieguren|  楼主 | 2016-11-12 18:49 | 只看该作者
SPI_Write_Buf(WRITE_REG+TX_ADDR,buff1,5);
SPI_Read_Buf(READ_REG+TX_ADDR,buff2,5);

开机时写了上面两个语句进行判断,发现读出的 buff2 不等于 写入的 buff1,不知道是硬件的原因还是SPI时序的问题,已经换了三个NRF24L01模块了,都是这样。

SPI时序    单片机频率为22MHZ,所以加入了for循环用于分频,不知道是否有错误
uchar SPI_RW(uchar byte)
{
        uchar i,j;
           for(i=0; i<8; i++)        
           {
                   MOSI = (byte & 0x80);   
                byte <<= 1;                                
                SCK = 1;                  
                for(j=1;j<200;j++)
                {
                        _nop_();
                }
                byte |= MISO;                                  
                SCK = 0;                      
                for(j=1;j<8;j++)
                {
                       _nop_();
                }
           }
        return(byte);                  
}

使用特权

评论回复
8
neieguren|  楼主 | 2016-11-19 19:33 | 只看该作者
发现问题了,自己不仔细,直接使用了单片机的IO口给NRF模块供电。
下次一定要注意这种问题!

使用特权

评论回复
9
我将变成怎样| | 2020-5-1 17:16 | 只看该作者
neieguren 发表于 2016-11-19 19:33
发现问题了,自己不仔细,直接使用了单片机的IO口给NRF模块供电。
下次一定要注意这种问题! ...

请问你是因为电压不符的原因,还是其他。。

使用特权

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

本版积分规则

1

主题

10

帖子

1

粉丝