[MCU] 华大HC32L136使用时深度睡眠的问题及解决

Jacktang   2021-5-27 11:53 楼主

问题:

HC32L136J8TA-LQ48,调试过程中遇到问题,打开过PLL后再进入深度睡眠模式时,电流有26uA,根据官方例程gpio_deepsleep_wakeup来做实验,官方例程直接编译然后烧到板子,进入深度睡眠模式后,电流0.8uA左右浮动,如将时钟设置到PLL,如PLL48MHz后,进入深度睡眠模式,电流就26uA。

代码:

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

image.png

解决:

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

image.png 那么进入睡眠睡眠之前直接来一句: M0P_BGR->CR_f.BGR_EN = FALSE; 行不?

通过实验,实验结果表明:不行!为啥?又仔细查看芯片手册,发现手册有说明操作BGR寄存器必须打开ADC时钟,

如下图所示:

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

如下图所示:

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

分析:

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

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

回复评论 (2)

经验之谈,谢谢分享!

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-5-27 17:53

醒来之后的代码在哪里执行呢?用了定时器和LPUART。

点赞  2023-4-12 17:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复