当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;