如何低功耗的使用nRF52832的radio

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,需要自己去考虑。

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值