image.png

函数记录

发射机

  1. /**********************************************************************************
  2. * 描 述 : 配置无线参数
  3. * 入 参 : 无
  4. * 返回值 : 无
  5. *********************************************************************************/
  6. void RfCofig(void)
  7. {
  8. RFCKEN = 1; //使能RF时钟
  9. hal_nrf_close_pipe(HAL_NRF_ALL); //先关闭所有的通道.
  10. hal_nrf_open_pipe(HAL_NRF_PIPE0,false); //再打开通道0.
  11. hal_nrf_set_operation_mode(HAL_NRF_PTX); //模式:发射机
  12. hal_nrf_set_rf_channel(RF_CHANNEL); //RF信道:55。接收和发送必须处于同一信道
  13. hal_nrf_set_address_width(HAL_NRF_AW_5BYTES); //5 bytes tx address
  14. hal_nrf_set_address(HAL_NRF_TX,TX_ADDRESS); //5 bytes tx address
  15. hal_nrf_set_datarate(HAL_NRF_2MBPS); //RF速率
  16. hal_nrf_set_output_power(HAL_NRF_0DBM); //功率:0DBM
  17. hal_nrf_set_crc_mode(HAL_NRF_CRC_16BIT); //设置CRC校验:16位CRC。必须和接收设备一致?
  18. hal_nrf_set_power_mode(HAL_NRF_PWR_UP); //发射机上电
  19. RF = 1; //使能无线中断
  20. EA = 1; // 使能全局中断
  21. }

:::info 通道和信道的关系:pipe和channel:

  • 信道是针对无线的,就是通信的频率,比如信道设置为50,通信的无线频率用的就是2400 + 50 = 2450MHz
  • 通道是芯片内部设置了6个逻辑地址,用来区分设备的,比如发射端用通道0(设置了一个专门的地址),接收端也需要在通道0做同样的设置才能接收到 :::

主函数

  1. /*******************************************************************************************************
  2. * 描 述 : 主函数
  3. * 入 参 : 无
  4. * 返回值 : 无
  5. *******************************************************************************************************/
  6. void main()
  7. {
  8. static bool rf_send_flag = false;
  9. static uint8_t i,j=0;
  10. IO_Init(); //IO初始化
  11. hal_clk_set_16m_source(HAL_CLK_XOSC16M); //使用外部16MHz晶振
  12. // uart_init(BAUD_4K8); //若需要的串口通信波特率高于4800,需要增加缓存,防止数据丢失
  13. while(hal_clk_get_16m_source() != HAL_CLK_XOSC16M) ;//等待时钟稳定
  14. RfCofig(); //无线参数配置
  15. for(i=0;i<2000000;i++)
  16. {
  17. payload[0] = i;
  18. for(j=1;j<31;j++)
  19. {
  20. payload[j]=1;
  21. }
  22. payload[31]=i;
  23. rf_send_flag = true;
  24. if(rf_send_flag == true)
  25. {
  26. rf_send_flag = false;
  27. hal_nrf_write_tx_payload(payload,TX_PAYLOAD_LEN);
  28. CE_PULSE(); //无线发射数据
  29. radio_busy = true;
  30. while(radio_busy) //等待操作完成
  31. ;
  32. }
  33. delay_ms(50);
  34. }
  35. }

接收机