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应与形参一致...