[转载]NRF24L01+的5个通道调试经验

来源:互联网 发布:淘宝 优衣库 便宜 编辑:程序博客网 时间:2024/06/06 09:06
[转载]NRF24L01+的5个通道调试经验,总调不通的可以来看看……
http://www.51hei.com/bbs/dpj-37676-1.html

一对多的比较好的帖子:http://www.rationmcu.com/elecjc/1592.html


/***************************************************************************
函数名称:void NRF24L01_Init_TX(uchar pipe)
函数功能:初始化NRF24L01
函数备注:在调用NRF24L01作为发射时,都要先调用该函数对NRF24L01进行初始化
***************************************************************************/
void NRF24L01_Init_TX(uchar pipe)//输入通道值
{    
        /*待机模式*/
        CE=0;
        CSN=1;
        SCK=0;
        /*装载数据*/
        SPI_Write_Buf(WRITE_REG + TX_ADDR, pipe_add[pipe], TX_ADR_WIDTH);//写TX节点地址
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, pipe_add[pipe], RX_ADR_WIDTH); //设置RX节点地址,主要为了使能ACK  
        /*配置寄存器*/
        SPI_Write_Reg(WRITE_REG + EN_AA, 0x3F); //使能所有通道自动应答   
        SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x3F);//使能所有通道的接收地址(这两项定义的通道数不得小于当前使用的通道数,奇怪的NRF24L01+(O__O "…))
        SPI_Write_Reg(WRITE_REG + RF_CH, 40);//设置RF通道为40   收发必须一致!
        SPI_Write_Reg(WRITE_REG + SETUP_RETR, 0xFF);//自动重发  4000+86us    重发15次
        SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0F); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启  收发必须一致!                  
        SPI_Write_Reg(WRITE_REG + CONFIG, 0x0E);  //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,发送模式,开启所有中断                          
}




/***************************************************************************
函数名称:void NRF24L01_Init_RX(uchar pipe)
函数功能:初始化NRF24L01
函数备注:在调用NRF24L01作为接收时,都要先调用该函数对NRF24L01进行初始化
***************************************************************************/
void NRF24L01_Init_RX(uchar pipe)//输入通道值
{    
        /*待机模式*/
        CE=0;    
        CSN=1;    
        SCK=0;   
        /*装载数据*/
        if(pipe == 0)                //通道,对应设置40位地址
        {                             
                SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS0, RX_ADR_WIDTH);  //设置RX节点地址,主要为了使能ACK
                SPI_Write_Buf(WRITE_REG + (RX_ADDR_P0+pipe), RX_ADDRESS0+pipe, RX_ADR_WIDTH);  //设置RX节点地址,主要为了使能ACK
        }
        else                                //其他通道,对应设置通道1公共地址和相应8位地址
        {
            SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, RX_ADR_WIDTH); //设置RX节点地址,主要为了使能ACK                   
            SPI_Write_Buf(WRITE_REG + (RX_ADDR_P0+pipe), pipe_add[pipe], 1);  //设置RX节点地址,主要为了使能ACK(地址长度只能是1,不能多写,写一样的值也不行)                        
        }
        /*配置寄存器*/
        SPI_Write_Reg(WRITE_REG + EN_AA, 1<<pipe);//使能通道的自动应答
        SPI_Write_Reg(WRITE_REG + EN_RXADDR, 1<<pipe); //使能通道的接收地址   
        SPI_Write_Reg(WRITE_REG + RF_CH, 40); //设置RF通道为40   收发必须一致!
        SPI_Write_Reg(WRITE_REG + (RX_PW_P0+pipe), RX_PLOAD_WIDTH); //选择通道的有效数据宽度
        SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0F); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启  收发必须一致!
        SPI_Write_Reg(WRITE_REG + CONFIG, 0x0F); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
}

0 0
原创粉丝点击