nrf24l01无法同时多发一收

当EN_RXADDR寄存器设置为0x3f 使能通道012345的接收地址时 只能从通道1接收到数据,无法从通道0,2,3,4,5接收到数据
当EN_RXADDR寄存器设置为0x01 使能通道0的接收地址时 只能从通道0接收到数据

请问如何同时接收到通道0,1,2,3,4,5的数据
在不使用通讯协议的情况下如何判断接收到的数据是从通道0,1,2,3,4,5的哪个通道接收到的

我的代码如下

const u8 ADDRESS[7][5]={{0x30,0x30,0x30,0x30,0x30},{0x30,0x30,0x30,0x30,0x31},{0x30,0x30,0x30,0x30,0x32},{0x30,0x30,0x30,0x30,0x33},{0x30,0x30,0x30,0x30,0x34},{0x30,0x30,0x30,0x30,0x35},{0x30,0x30,0x30,0x30,0x36}};

/*********************************************/
/* 函数功能:设置24L01为接收模式 /
/
********************************************/

void NRF24L01_RX_Mode(void)
{

SPI_RF_CE_L;//CE拉低,使能24L01配置
NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0, (u8*)ADDRESS[0], RX_ADR_WIDTH);//写RX接收地址
NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P1, (u8*)ADDRESS[1], RX_ADR_WIDTH);//写RX接收地址

 NRF24L01_Write_Reg(WRITE_REG+RX_ADDR_P2,ADDRESS[2][4]);
 NRF24L01_Write_Reg(WRITE_REG+RX_ADDR_P3,ADDRESS[3][4]);
 NRF24L01_Write_Reg(WRITE_REG+RX_ADDR_P4,ADDRESS[4][4]);
 NRF24L01_Write_Reg(WRITE_REG+RX_ADDR_P5,ADDRESS[5][4]);

NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x3f);    //开启通道0,1,2,3,4,5自动应答    
NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x3f);//通道0 1,2,3,4,5 接收允许  
NRF24L01_Write_Reg(WRITE_REG+RF_CH,0);   //设置RF工作通道频率   

NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//选择通道1的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P2,RX_PLOAD_WIDTH);//选择通道2的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P3,RX_PLOAD_WIDTH);//选择通道3的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P4,RX_PLOAD_WIDTH);//选择通道4的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P5,RX_PLOAD_WIDTH);//选择通道5的有效数据宽度  

NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启         
NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 
SPI_RF_CE_H;//CE置高,进入接收模式 
delay_us(10);

}
/*********************************************/
/* 函数功能:设置24L01为发送模式 /
/
********************************************/
void NRF24L01_TX_Mode(void)
{

SPI_RF_CE_L;//CE拉低,使能24L01配置

NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)ADDRESS[0],TX_ADR_WIDTH);//写TX节点地址
NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)ADDRESS[0],RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK

NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x3f); //使能通道012345的自动应答

NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x3f); //使能通道012345的接收地址

NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次

NRF24L01_Write_Reg(WRITE_REG+RF_CH,0);        //设置RF通道为0
NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);  //设置TX发射参数,0db增益,2Mbps,低噪声增益开启   
NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);    //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,发送模式,开启所有中断
SPI_RF_CE_H;//CE置高,10us后启动发送 

delay_us(10);
}

main中的死循环代码:
while(1)
{
if(SPI_RF_IRQ==0)
{
if(NRF24L01_RxPacket(rece_buf)==0)
{
Usart_SendString(rece_buf);
}
}

}

发送数据代码:
SPI_RF_CE_L;
NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);
SPI_RF_CE_H;
NRF24L01_TxPacket(rece_buf);
SPI_RF_CE_L;
NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0f);
SPI_RF_CE_H;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问