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,接收模式,开启所有中断
}