函数记录
发射机
/*********************************************************************************** 描 述 : 配置无线参数* 入 参 : 无* 返回值 : 无*********************************************************************************/void RfCofig(void){RFCKEN = 1; //使能RF时钟hal_nrf_close_pipe(HAL_NRF_ALL); //先关闭所有的通道.hal_nrf_open_pipe(HAL_NRF_PIPE0,false); //再打开通道0.hal_nrf_set_operation_mode(HAL_NRF_PTX); //模式:发射机hal_nrf_set_rf_channel(RF_CHANNEL); //RF信道:55。接收和发送必须处于同一信道hal_nrf_set_address_width(HAL_NRF_AW_5BYTES); //5 bytes tx addresshal_nrf_set_address(HAL_NRF_TX,TX_ADDRESS); //5 bytes tx addresshal_nrf_set_datarate(HAL_NRF_2MBPS); //RF速率hal_nrf_set_output_power(HAL_NRF_0DBM); //功率:0DBMhal_nrf_set_crc_mode(HAL_NRF_CRC_16BIT); //设置CRC校验:16位CRC。必须和接收设备一致?hal_nrf_set_power_mode(HAL_NRF_PWR_UP); //发射机上电RF = 1; //使能无线中断EA = 1; // 使能全局中断}
:::info 通道和信道的关系:pipe和channel:
- 信道是针对无线的,就是通信的频率,比如信道设置为50,通信的无线频率用的就是2400 + 50 = 2450MHz
- 通道是芯片内部设置了6个逻辑地址,用来区分设备的,比如发射端用通道0(设置了一个专门的地址),接收端也需要在通道0做同样的设置才能接收到 :::
主函数
/******************************************************************************************************** 描 述 : 主函数* 入 参 : 无* 返回值 : 无*******************************************************************************************************/void main(){static bool rf_send_flag = false;static uint8_t i,j=0;IO_Init(); //IO初始化hal_clk_set_16m_source(HAL_CLK_XOSC16M); //使用外部16MHz晶振// uart_init(BAUD_4K8); //若需要的串口通信波特率高于4800,需要增加缓存,防止数据丢失while(hal_clk_get_16m_source() != HAL_CLK_XOSC16M) ;//等待时钟稳定RfCofig(); //无线参数配置for(i=0;i<2000000;i++){payload[0] = i;for(j=1;j<31;j++){payload[j]=1;}payload[31]=i;rf_send_flag = true;if(rf_send_flag == true){rf_send_flag = false;hal_nrf_write_tx_payload(payload,TX_PAYLOAD_LEN);CE_PULSE(); //无线发射数据radio_busy = true;while(radio_busy) //等待操作完成;}delay_ms(50);}}
