只有上电才能接收几次!复位不能接收!
以下是代码:
配置接收模式:
void NRF24L01_RX_Mode(void)
{
NRF24L01_CE=0;
NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除TX FIFO寄存器
NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x00); //使能通道0的自动应答
NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01);//使能通道0的接收地址
NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40); //设置RF
通信频率
NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x07);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG, 0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_CE = 1; //CE为高,进入接收模式 +
delay_us(20);
}
接收函数:
u8 NRF24L01_RxPacket(u8 *rxbuf)
{
u8 sta;
SPI2_SetSpeed(SPI_BaudRatePrescaler_16); //spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)
sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值
NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,sta); //清除TX_DS或MAX_RT中断标志
if(sta&RX_OK)//接收到数据
{
NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器
return 1;
}
return 0;//没收到任何数据
}
主函数:
NRF24L01_Init();
NRF24L01_RX_Mode();
// Delay(20);
while(1)
{
if(NRF24L01_RxPacket(tmp_buf))
{
for(i=1;i
{
LCD_ShowxNum(0+j,120,*tmp_buf,1,16,0,0x0000);
*tmp_buf=tmp_buf
;
j+=30;
if(j>240)
j=0;
}
LCD_ShowxNum(100,250,num++,3,16,0,0x00de);
}
}