函数记录
发射机
/**********************************************************************************
* 描 述 : 配置无线参数
* 入 参 : 无
* 返回值 : 无
*********************************************************************************/
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 address
hal_nrf_set_address(HAL_NRF_TX,TX_ADDRESS); //5 bytes tx address
hal_nrf_set_datarate(HAL_NRF_2MBPS); //RF速率
hal_nrf_set_output_power(HAL_NRF_0DBM); //功率:0DBM
hal_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);
}
}