本帖最后由 cry1109 于 2020-1-19 10:46 编辑
函数的封装比较全面,初始化配置、收/发模式的切换、数据的收发等等,使用起来就像串口一样简单。下面是部分代码:
- /*-----------------------------------------------------------------------------
- * 函 数 名 : Nrf_SendData()
- * 函数功能 : 开启NRF发送一次数据
- * 输 入 : txbuff:指向待发送的数据
- length: 发送数据长度
- * 输 出 : TX_OK :发送成功
- 0xff :发送失败
- -----------------------------------------------------------------------------*/
- uint8_t Nrf_SendData(uint8_t *txbuff,uint8_t length)
- {
- uint8_t status;
-
- Nrf_CE(0);
- Nrf_WriteBuff(WR_TX_PLOAD,txbuff,length);
- Nrf_CE(1);
-
- while(GPIO_ReadInputDataBit(NRF_IRQ_PORT, NRF_IRQ_PIN)!=0);//等待发送完成
- status=Nrf_ReadReg(STATUS);
- Nrf_WriteReg(NRF_WRITE_REG+STATUS,status); //清除TX_DS或MAX_RT中断标志
-
- if(status&MAX_TX)//达到最大重发次数
- {
- Nrf_WriteReg(FLUSH_TX,0xff);//清除TX FIFO寄存器
- return MAX_TX;
- }
-
- if(status&TX_OK)//发送完成
- {
- Nrf.TxOK = 1;
- Nrf.LED = 1;
- return TX_OK;
- }
- else
- {
- Nrf.TxOK = 0;
- return TX_FAIL;//发送失败
- }
- }
- /*-----------------------------------------------------------------------------
- * 函 数 名 : Nrf_ReceiveData()
- * 函数功能 : 读取NRF接收的数据
- * 输 入 : rxbuff:缓存读取的数据
- length: 读取的数据长度
- * 输 出 : 1:接收到数据 0:无接收数据
- -----------------------------------------------------------------------------*/
- uint8_t Nrf_ReceiveData(uint8_t *rxbuff,uint8_t length)
- {
- uint8_t status;
- status=Nrf_ReadReg(STATUS);
- Nrf_WriteReg(NRF_WRITE_REG+STATUS,status); //清除TX_DS或MAX_RT中断标志
- if(status&RX_OK)
- {
- Nrf_ReadBuff(RD_RX_PLOAD,rxbuff,length); //读取数据
- Nrf_WriteReg(FLUSH_RX,0xff); //清除RX FIFO寄存器
- Nrf.RxOK = 1;
- Nrf.LED = 1;
- return 1;
- }
- else
- {
- Nrf.RxOK = 0;
- return 0; //没收到任何数据
- }
- }
马上就要过年啦,祝大家新年快乐,工作顺利!
|