1、radio使用前提:必须打开hfclk时钟(打开前调用nrf_drv_clock_hfclk_is_running()查询是否已开启),必须给系统打开hfclk时钟的缓冲时间,打开hfclk时钟接口为nrf_drv_clock_hfclk_request(NULL),下面是我写的在使用radio之前的时钟处理函数:
/* 射频前准备 return 1:fail return 0:success */
uint8_t radioopen_clockprepare(void)
{
uint8_t quit_cnt = 0;
if(nrf_drv_clock_hfclk_is_running() == false)
{
nrf_drv_clock_hfclk_request(NULL);
while(nrf_drv_clock_hfclk_is_running() == false)
{
if(quit_cnt < 250)
{
quit_cnt++;
nrf_delay_us(10);
}
else
{
break;
}
}
if(quit_cnt >= 250)
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
2、radio低功耗处理方式:休眠时(不使用radio功能)关闭hfclk时钟(关闭前先查询是否打开),关闭hfclk时钟的接口为nrf_drv_clock_hfclk_release(可预留也可不预留时间);需要使用radio功能时,再去打开hfclk时钟,使用完成后即刻关闭hfclk时钟。
注:时钟初始化时,打开lfclk时钟即可,打开接口为nrf_drv_clock_lfclk_request(NULL);下面是我写的在使用radio结束后的时钟处理函数:
void radiooff_clockrelease(void)
{
uint8_t quit_cnt = 0;
if(nrf_drv_clock_hfclk_is_running())
{
nrf_drv_clock_hfclk_release();
while(nrf_drv_clock_hfclk_is_running())
{
if(quit_cnt < 250)
{
quit_cnt++;
nrf_delay_us(10);
}
else
{
break;
}
}
}
}
3、协议栈使用方式:可以使用协议栈工程去开发radio工程,但因为radio和ble都需要使用2.4G信号发生器,所以在使用协议栈时需注意,使用radio时就无法使能协议栈开启蓝牙广播等功能,使能协议栈开启蓝牙广播等功能就无法使用radio功能;再此前提下,如果想要开发可以DFU的radio工程,可以根据内存中写入的标志位决定是否使能协议栈开启服务,还是正常进行radio工程,或者说直接通过写寄存器的方式,使设备进入DFU模式(前提是工程包含了蓝牙升级的bootloader),至于如何使设备进入DFU,需要自己去考虑。