欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

nrf24l01通讯读取寄存器都为0

更新时间: 2014-01-05 03:20:51 责任编辑: Author_N1

 

nrf24l01通信读取寄存器都为0
我先把SPI输入输出短路,可以收到发送的数据,又用GPIO模拟SPI发送,nrf24l01是可以发送数据的,可是用硬件SPI控制nrf24l01就出现问题,给nrf寄存器写值时,可以返回一些值,这应该说明SPI是通的吧?但是一用SPI_Read读取写入的值就发现,就返回0x00,这到底是怎么回事啊??各位大神帮帮忙!!

部分程序如下:
//****************************************************************************************
//*NRF24L01初始化
//***************************************************************************************/
void init_NRF24L01(void) 
{    
    Delay_us(1200); //1.2ms???
         CE=0;    // chip enable
         CSN=1;   // Spi disable 
         //SCK=0;   // Spi clock line init high
        //check=SPI_Read(READ_REG+STATUS);
        st=SPI_RW_Reg(WRITE_REG+STATUS,0xFF);
        check=SPI_Read(READ_REG+STATUS);  
        
        st=SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址,频道0
        check=SPI_Read_Buf(READ_REG+RX_ADDR_P0, RX_ADDRESS1, RX_ADR_WIDTH);
//        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动        ACK应答允许        
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);      //  频道0自动        禁止ACK应答,debug
//        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21 
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00);  //  禁止接收地址只有频道0,debug
//        SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); //设置重发时间间隔:500us+86us,最大自动重发次数:10次
        SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);          // 失能自动重发,debug
        st=SPI_RW_Reg(WRITE_REG + RF_CH, 40);                //   设置信道工作为2.4GHZ,收发必须一致
        check=SPI_Read(READ_REG+RF_CH);
        st=SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                   //设置发射速率为2MHZ,发射功率为最大值0dB
        check=SPI_Read(READ_REG+RF_SETUP);
}
uchar SPI_Read(uchar reg)
{
        uchar reg_val;
        
        CSN = 0; 
        Delay_us(1);               // CSN low, initialize SPI communication...
        SPI_RW(reg);            // Select register to read from..
        reg_val = SPI_RW(0x0);    // ..then read registervalue
        CSN = 1;                // CSN high, terminate SPI communication
        return(reg_val);        // return register value
}




//****************************************************************************************************/
//*功能:NRF24L01读写寄存器函数
//写数据value到reg寄存器
//****************************************************************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
        uchar status;
        
        CSN = 0; 
        Delay_us(1);                  // CSN low, init SPI transaction
        status = SPI_RW(reg);      // select register
        st=SPI_RW(value);           // ..and write value to it..
        CSN = 1;                   // CSN high again        
        return(status);            // return nRF24L01 status uchar
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:20:51
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20974/
本文WWW.DOC100.NET DOC100.NET版权所有。