xiaoyonggo 发表于 2014-7-12 16:25:47

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]
查看完整版本: nRF24L01问题求助!!!