abcd7471 发表于 2021-5-21 16:19

华大低功耗系列HC32L136只要打开过PLL后进入深度睡眠26uA

本帖最后由 abcd7471 于 2021-5-22 14:54 编辑

华大低功耗系列HC32L136只要打开过PLL后进入深度睡眠26uA。

本人正在做一个遥控器项目,使用芯片型号:HC32L136J8TA-LQ48,调试过程中遇到问题,如题所述,只要打开过PLL后再进入深度睡眠模式时,电流有26uA,调了很久都调不下去,原因不详!
然后拿根据官方例程gpio_deepsleep_wakeup来做实验,官方例程直接编译然后烧到板子,进入深度睡眠模式后,电流0.8uA左右浮动,但如果将时钟设置到PLL,如PLL48MHz后,进入深度睡眠模式,电流就26uA,参考https://bbs.21ic.com/icview-3132372-1-1.html 这个帖子仍然不能解决,现在发帖求助!请教各位大佬们是如何解决的?


我的实验过程如图所示:


图片所示代码,是根据官方例程gpio_deepsleep_wakeup例程修改的,如图所示,将时钟设置到PLL,如PLL48MHz后,进入深度睡眠模式,电流就飙升到26uA,进入深度睡眠模式之前,将时钟切换回RCH4M,并且关闭PLL,关闭BGR,仍然不能把待机电流降下来,不知道怎么回事,请教下大佬们是如何解决的?





————————分界线————————


问题已解决:


仔细查看库代码,发现打开PLL的时候开启了BGR,如图所示:





那么进入睡眠睡眠之前直接来一句: M0P_BGR->CR_f.BGR_EN = FALSE; 行不?通过实验,实验结果表明:不行!为啥?又仔细查看芯片手册,发现手册有说明操作BGR寄存器必须打开ADC时钟,如图所示:



因此进入睡眠之前切换回RCH,打开ADC时钟,关闭PLL,关闭BGR,关闭ADC时钟,然后再进入睡眠,这样就可以解决了,如图所示:




唤醒之后,先打开PLL,再将系统时钟切换回PLL即可。










liaotian001 发表于 2021-5-22 00:05

25~30uA 左右的功耗,有2种可能,第一种BGR打开了;第二种IO 配置pull high被外围拉低了,或者配置pull low被外围拉高了;

abcd7471 发表于 2021-5-22 14:29

问题已解决,仔细查看官方的库代码,发现问题的根本原因,打开PLL的时候会开启BGR,进入深度睡眠之前关掉PLL,并且关掉BGR即可。但是之前也是这样操作不成功,后面查看手册发现,操作BGR寄存器要开启ADC时钟,否则无法操作。

我的操作步骤如下:
1,进入睡眠之前切换回RCH
2,打开ADC时钟
3,关闭PLL
4,关闭BGR
5,关闭ADC时钟
6,进入睡眠模式

martinhu 发表于 2021-6-1 13:37

abcd7471 发表于 2021-5-22 14:29
问题已解决,仔细查看官方的库代码,发现问题的根本原因,打开PLL的时候会开启BGR,进入深度睡眠之前关掉PL ...

论坛里有人遇到过同样的现象

weifeng90 发表于 2021-6-3 21:16

感谢分享经验

lrzxc1 发表于 2021-6-7 08:31

abcd7471 发表于 2021-5-22 14:29
问题已解决,仔细查看官方的库代码,发现问题的根本原因,打开PLL的时候会开启BGR,进入深度睡眠之前关掉PL ...

好经验,谢谢分享啊,关闭BGR还要开启ADC时钟,这是啥骚操作

foxsbig 发表于 2021-6-17 13:38

还没有这么强烈的关注过功耗
这个解决的经验很棒,让很多人少走弯路

tail066 发表于 2021-7-15 13:53

这不是一个提问帖,这是科普贴啊

liangzhou1988 发表于 2021-7-15 14:09

这个科普帖发的好,华大FAE发来贺电!@abcd7471

czjdxs 发表于 2021-11-10 16:50

入坑,比这还严重
页: [1]
查看完整版本: 华大低功耗系列HC32L136只要打开过PLL后进入深度睡眠26uA