问题:
HC32L136J8TA-LQ48,调试过程中遇到问题,打开过PLL后再进入深度睡眠模式时,电流有26uA,根据官方例程gpio_deepsleep_wakeup来做实验,官方例程直接编译然后烧到板子,进入深度睡眠模式后,电流0.8uA左右浮动,如将时钟设置到PLL,如PLL48MHz后,进入深度睡眠模式,电流就26uA。
代码:
如下图片所示代码,是根据官方例程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的时候会开启BGR,进入深度睡眠之前关掉PLL,并且关掉BGR即可。但是之前也是这样操作不成功,后面查看手册发现,操作BGR寄存器要开启ADC时钟,否则无法操作。
操作步骤如下:
1, 进入睡眠之前切换回RCH
2,打开ADC时钟
3,关闭PLL
4,关闭BGR
5, 关闭ADC时钟
6,进入睡眠模式