void ANO_NRF::TxPacket(uint8_t * tx_buf, uint8_t len) { CE_L(); //StandBy I模式 Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址 Write_Buf(WR_TX_PLOAD, tx_buf, len); // 装载数据 CE_H(); //置高CE,激发数据发送 }
void ANO_NRF::Init(u8 model, u8 ch) { CE_L(); Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); //写RX节点地址 Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //写TX节点地址 Write_Reg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0的自动应答 Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址 Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a); //设置自动重发间隔时间:500us;最大自动重发次数:10次 2M波特率下 Write_Reg(NRF_WRITE_REG+RF_CH,ch); //设置RF通道为CHANAL Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 //Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07); //设置TX发射参数,0db增益,1Mbps,低噪声增益开启 ///////////////////////////////////////////////////////// if(model==1) //RX { Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH); //选择通道0的有效数据宽度 Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断开启,16位CRC,主接收 } else if(model==2) //TX { Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH); //选择通道0的有效数据宽度 Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断开启,16位CRC,主发送 } else if(model==3) //RX2 { Write_Reg(FLUSH_TX,0xff); Write_Reg(FLUSH_RX,0xff); Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断开启,16位CRC,主接收 RW(0x50); RW(0x73); Write_Reg(NRF_WRITE_REG+0x1c,0x01); Write_Reg(NRF_WRITE_REG+0x1d,0x06); } else //TX2 { Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断开启,16位CRC,主发送 Write_Reg(FLUSH_TX,0xff); Write_Reg(FLUSH_RX,0xff); RW(0x50); RW(0x73); Write_Reg(NRF_WRITE_REG+0x1c,0x01); Write_Reg(NRF_WRITE_REG+0x1d,0x06); } CE_H(); delayms(50); }
u8 ANO_NRF::NRF_Tx_Dat(u8 *txbuf,u8 *AckPacket) { u8 state; /*ce为低,进入待机模式1*/ CE_L(); /*写数据到TX BUF 最大 32个字节*/ Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH); /*CE为高,txbuf非空,发送数据包 */ CE_H(); /*等待发送完成中断 */ while(NRF_Read_IRQ()!=0); state = Read_Reg(NRFRegSTATUS);/*读取状态寄存器的值 */ Write_Reg(NRF_WRITE_REG+NRFRegSTATUS,state); if(state&RX_DR) { Read_Buf(RD_RX_PLOAD, AckPacket, 32); } Write_Reg(FLUSH_TX,NOP);//清除TX FIFO寄存器 return state; }
bool ANO_NRF::Check(void) { u8 buf1[5]; u8 i; /*写入5个字节的地址. */ Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,5); /*读出写入的地址 */ Read_Buf(TX_ADDR,buf1,5); /*比较*/ for(i=0;i<5;i++) { if(buf1[i]!=TX_ADDRESS[i]) break; } if(i==5) return true; //MCU与NRF成功连接 else return false; //MCU与NRF不正常连接 }
void ANO_NRF::TxPacket_AP(uint8_t * tx_buf, uint8_t len) { CE_L(); //StandBy I模式 Write_Buf(0xa8, tx_buf, len); // 装载数据 CE_H(); //置高CE }