nRF24L01问题求助!!!
本帖最后由 xiaoyonggo 于 2014-7-12 16:25 编辑现在在调试nRF24L01一对六通信,遇到如下的问题:
六个从机分别给主机发送数据时,主机对应的通道都能收到数据,并且能正确应答。
当主机给从机发0送数据时没有问题,从机0能收到数据也能应答。
当主机给从机1,2,3,4,5号发送数据时就出现问题了 ,从机都能收到数据,但没有应答。
查看了数据手册,也没查出什么问题。现在只能求助论坛的的大侠们啦!!!
程序部分代码如下:
u8 ga_locaAddr[]={0xa1,0xb1,0xc1,0xd1,0xe1} ;
/*********************************************************************************************************/
/*********************************************************************************************************/
/*********************************************************************************************************/
主机配置程序:
void nRF24L01_Config (void)
{
u8 c1 ;
nRF_CE_SET_L ;
nRF24L01_WriteReg(SETUP_RETR,0x3F); // 自动重发延时等待250+ 86 us,自动重发15次
nRF24L01_WriteReg(RF_CH,121); // 选择射频通道2400 + nMHz ( 0 <= n <= 125 )
nRF24L01_WriteReg(RF_SETUP,0x06 ); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
nRF24L01_WriteReg(SETUP_AW,ADDR_WIDTH_VALUE); // 地址宽度
nRF24L01_WriteReg(RX_PW_P0,DATA_WIDTH); // 接收通道0有效数据宽度
nRF24L01_WriteReg(RX_PW_P1,DATA_WIDTH); // 接收通道1有效数据宽度
nRF24L01_WriteReg(RX_PW_P2,DATA_WIDTH); // 接收通道2有效数据宽度
nRF24L01_WriteReg(RX_PW_P3,DATA_WIDTH); // 接收通道3有效数据宽度
nRF24L01_WriteReg(RX_PW_P4,DATA_WIDTH); // 接收通道4有效数据宽度
nRF24L01_WriteReg(RX_PW_P5,DATA_WIDTH); // 接收通道5有效数据宽度
nRF24L01_WriteBuffer(RX_ADDR_P0,ga_locaAddr,ADDR_WIDTH); // 接收通道0地址
ga_locaAddr += 1 ;
nRF24L01_WriteBuffer(RX_ADDR_P1,ga_locaAddr,ADDR_WIDTH); // 接收通道1地址
nRF24L01_WriteReg(RX_ADDR_P2,ga_locaAddr+1); // 接收通道2地址
nRF24L01_WriteReg(RX_ADDR_P3,ga_locaAddr+2); // 接收通道3地址
nRF24L01_WriteReg(RX_ADDR_P4,ga_locaAddr+3); // 接收通道4地址
nRF24L01_WriteReg(RX_ADDR_P5,ga_locaAddr+4); // 接收通道5地址
nRF24L01_WriteReg(EN_AA,0x3f); // 使能接收通道自动应答
nRF24L01_WriteReg(EN_RXADDR,0x3f); // 使能接收通道
nRF24L01_WriteReg(CONFIG,0x0f); // CRC使能,16位CRC校验,上电,接收模式
nRF_CE_SET_H ;
Delay_us(130) ;
}
/*********************************************************************************************************/
/*********************************************************************************************************/
/*********************************************************************************************************/
从机配置程序:
void nRF24L01_Config (void)
{
u8 c1 ;
nRF_CE_SET_L ;
nRF24L01_WriteReg(SETUP_RETR,0x3F); // 自动重发延时等待250+ 86 us,自动重发15次
nRF24L01_WriteReg(RF_CH,121); // 选择射频通道2400 + nMHz ( 0 <= n <= 125 )
nRF24L01_WriteReg(RF_SETUP,0x06 ); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
nRF24L01_WriteReg(SETUP_AW,ADDR_WIDTH_VALUE); // 地址宽度
nRF24L01_WriteReg(RX_PW_P0,DATA_WIDTH); // 接收通道0有效数据宽度
#ifdef SLAVE_DRIVE_0 // 从机0配置
ga_locaAddr += 0 ;
#elif defined SLAVE_DRIVE_1 // 从机1配置
ga_locaAddr += 1 ;
#elif defined SLAVE_DRIVE_2 // 从机2配置
ga_locaAddr += 2 ;
#elif defined SLAVE_DRIVE_3 // 从机3配置
ga_locaAddr += 3 ;
#elif defined SLAVE_DRIVE_4 // 从机4配置
ga_locaAddr += 4 ;
#elif defined SLAVE_DRIVE_5 // 从机5配置
ga_locaAddr += 5 ;
#endif
nRF24L01_WriteBuffer(TX_ADDR,ga_locaAddr,ADDR_WIDTH); // 发送地址(从机的发送地址在这里只写一次就好了,发送数据就不必再写一次地址)
nRF24L01_WriteBuffer(RX_ADDR_P0,ga_locaAddr,ADDR_WIDTH); // 接收通道0地址
nRF24L01_WriteReg(EN_AA,0x01); // 使能接收通道自动应答
nRF24L01_WriteReg(EN_RXADDR,0x01); // 使能接收通道
nRF24L01_WriteReg(CONFIG,0x0f); // CRC使能,16位CRC校验,上电,接收模式
nRF_CE_SET_H ;
Delay_us(130) ;
}
页:
[1]