关于华大单片机用过ADC后进入低功耗的正确方式

情况:项目中使用华大单片机,使用到了adc外设,并且在无事做时要进入低功耗休眠。但发现在使用了adc后,休眠电流都不正常

产品为低功耗产品,要求实现检测电池电量,也就是adc测量电池电压。并没有采用两个电阻分压式的电池电压采集,而是直接检测单片机的AVCC接口的adc,规格书里有说明

 

 

 

  stc_adc_cfg_t  stcAdcCfg;   
   //< ADC 初始化配置
    stcAdcCfg.enAdcMode         = AdcSglMode;               ///<采样模式-单次
    stcAdcCfg.enAdcClkDiv       = AdcMskClkDiv8;            ///<采样分频-1
    stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk;     ///<采样周期数-12
    stcAdcCfg.enAdcRefVolSel    = AdcMskRefVolSelInBgr1p5;  ///<参考电压选择-内部2.5V
    stcAdcCfg.enAdcOpBuf        = AdcMskBufEnable;         ///<OP BUF配置-
    stcAdcCfg.enInRef           = AdcMskInRefEnable;        ///<内部参考电压使能-开
    stcAdcCfg.enAdcAlign        = AdcAlignRight;            ///<转换结果对齐方式-右
    Adc_Init(&stcAdcCfg);
    //< 配置单次采样通道
    Adc_CfgSglChannel(AdcAVccdiv3Input);

初始化程序大概是这样,其中要注意黄色部分,要开启,同样规格书里有明确说明。接着就是开启检测了,至于什么检测方式,中断,轮询,普通,插队。看需求

 

在业务完成后,要休眠,若休眠前没有将adc的部分设置下,会发现休眠功耗非常高。

这里说下,我的配置

        M0P_ADC->CR0|=0xFFFFF7FF;
        Bgr_BgrDisable();
        Adc_Disable();        

声明,或许每个人的情况不同,但我的确实是调用这3个会降低休眠的功耗。

重点是同样是上面黄色部分,其实黄色部分就是将上面开启的enAdcOpBuf关了,但是往往很多人会忘了,这个若不关的话,休眠功耗会增加个十几ua,亲测。

posted @ 2022-10-24 15:45  kingzhan  阅读(665)  评论(0编辑  收藏  举报