/** * @brief 用于从NRF的接收缓冲区中读出数据 * @param * @arg rxBuf :用于接收该数据的数组,外部定义 * @retval * @arg 接收结果 */ u8 NRF_Rx_Dat(u8 *rxbuf) { u8 state; u16 link_count=0; NRF_CE_HIGH(); //进入接收状态 /*等待接收中断*/ while(NRF_Read_IRQ()!=0) { link_count ++; if(link_count == 5000) //5000为最大重连次数 return ERROR; } NRF_CE_LOW(); //进入待机状态 /*读取status寄存器的值 */ state=SPI_NRF_ReadReg(STATUS); /* 清除中断标志*/ SPI_NRF_WriteReg(NRF_WRITE_REG+STATUS,state); /*判断是否接收到数据*/ if(state&RX_DR) //接收到数据 { SPI_NRF_ReadBuf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据 SPI_NRF_WriteReg(FLUSH_RX,NOP); //清除RX FIFO寄存器 return RX_DR; } else return ERROR; //没收到任何数据 }
/* * 函数名:NRF_Check * 描述 :主要用于NRF与MCU是否正常连接 * 输入 :无 * 输出 :SUCCESS/ERROR 连接正常/连接失败 * 调用 :外部调用 */ u8 NRF_Check(void) { u8 buf[5]={0xC2,0xC2,0xC2,0xC2,0xC2}; u8 buf1[5]; u8 i; /*写入5个字节的地址. */ SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,buf,5); /*读出写入的地址 */ SPI_NRF_ReadBuf(TX_ADDR,buf1,5); /*比较*/ for(i=0;i<5;i++) { if(buf1[i]!=0xC2) break; } if(i==5) return SUCCESS ; //MCU与NRF成功连接 else return ERROR ; //MCU与NRF不正常连接 }