关于华大单片机用过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,亲测。