当前位置: 代码迷 >> Wireless >> 调试NRF24L01发送有关问题3天都没解决
  详细解决方案

调试NRF24L01发送有关问题3天都没解决

热度:325   发布时间:2016-04-28 09:35:31.0
调试NRF24L01发送问题3天都没解决。
void init_NRF24L01(void)
{
 //u8 Buf[5]={0};
 
  Delay_us(100);


  CE_L();    // chip enable
  //CSN_H();   // Spi disable 
  
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
SPI_WR_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节

SPI_WR_Reg(WRITE_REG + EN_AA,0x01);//0x01);      //  频道0自动 ACK应答允许
SPI_WR_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
SPI_WR_Reg(WRITE_REG + NRFRegSTATUS , 0x0e);
SPI_WR_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 设置自动重发时间和次数:500us + 86us, 10 retrans...
SPI_WR_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致 
SPI_WR_Reg(WRITE_REG + RF_SETUP, 0x07);    //设置发射速率为1MHZ,发射功率为最大值0dB

//SPI_WR_Reg(WRITE_REG + CONFIG, 0x0e);//0x0E);
 
CE_H();   
}

u8 nRF24L01_TxPacket(u8 * tx_buf)
{  u8 flag=0;
CE_L();
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); 
SPI_Write_Buf(WR_TX_PLOAD, DataBuf, TX_PLOAD_WIDTH);
SPI_WR_Reg(WRITE_REG + CONFIG, 0x0e);
CE_H();
Delay_ms(100);
sta=SPI_RD_Reg(NRFRegSTATUS);//此处STA变量执行后总被赋值为0x1F 意思
         //是TXFIFO寄存器满,RXFIFO为空大道最多重发中断,而实际没有发送出去。请问哪里有错。
if((sta&0x70)==TX_DS)
 flag=1;

 
return flag;
}


------解决方案--------------------
SPI_Write_Buf(WR_TX_PLOAD, DataBuf, TX_PLOAD_WIDTH);DataBuf应与形参一致...