STM32&GD32电源管理及低功耗设计
系列文章目录
GD32F105RBT6 keil工程模板
STM32、GD32固件升级IAP
目录
系列文章目录
前言
一、电源管理单元
1.电源
2.低功耗
二、低功耗设计方案
1.睡眠模式
2.深度睡眠(停止)模式
3.注意事项
总结
前言
在我们生活中有很多使用电池供电的电子产品都会有待机的机制,目的是为了减少设备的功耗,电池的电量是有限的,为了让设备的续航更长那么在设备不空闲的时候进入待机(低功耗)模式下是正确的,例如车载ETC、共享单车的控制器,GPS等设备都是有低功耗的要求的。
在STM32和GD32中就有电源管理单元,通过对电源管理就可以使单片机进入低功耗状态,下面就介绍电源管理和低功耗设计的相关方案。
一、电源管理单元
在STM32中为:电源控制,而GD32中为:电源管理单元,但两者的意义和功能是一样的,主要都是“电源”和“低功耗”这两方面的功能。
1.电源
STM32和GD32有三个电源域:备份域、 VDD / VDDA和1.2V电源域。
数字电源: VDD也是其主电源, 主要用于数字部分;
模拟电源: VDDA用于模拟部分的电源, 比如ADC, 这样可以单独滤波并屏蔽 PCB 上的噪声。
备份电源: VBAT用于备份区域的电源, 比如RTC、 备份SRAM等, 一旦主电源断开, VBAT可以为这些区域提供电源。
框图如下:
STM32:
GD32:
作为电源有以下的几个功能:
1)调压器(LDO)为MUC内部提供1.8V/1.2V电源;
2)STM32和GD32都提供低电压检测器(LVD),当电压低于所设定的阈值时能发出中断或事件;
3)STM32的可编程电压监测器(PVD),当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急关闭任务。
4)当VDD关闭的时,由VBAT(电池)为备份域供电。
以上电源功能具体描述请参考官方手册,有详细的介绍。
2.低功耗
所谓“低功耗”就是让MCU的耗电下降,实现较低的功耗的方法有两种:
1、减慢系统时钟(HCLK, PCLK1, PCLK2),即降频;关闭未使用的外设的时钟。
2、进入MCU提供的低功耗模式,STM32和GD32都提供三种模式:睡眠模式、深度睡眠模式(STM32为停机模式)和待机模式。
在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功
耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间
和可用的唤醒源等条件,选定一个最佳的低功耗模式。
STM32:
GD32:
二、低功耗设计方案
1.睡眠模式
MCU进入该模式后,只是Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行,进入后MCU外设还是正常运行更新数据,故不需要唤醒的时间。
1)中断
但是因为该模式只是Cortex™-M3内核停止,NVIC还正常响应,所以如果采用WFI指令进入的,需要在进入前关闭除用来唤醒的中断外的其它所有中断,否则MCU会往复进入退出睡眠模式。
2)事件
采用事件方式唤醒,用WFE指令进入睡眠模式的,在进入前要配置EXTI线路的中断输入,并且设置触发边沿类型。
EXTI(中断/事件控制器) 包括 23 个相互独立的边沿检测电路并且能够向处理器内核产生中断
请求或唤醒事件。 EXTI 有三种触发类型:上升沿触发、下降沿触发和双边沿触发。 EXTI 中的
每一个边沿检测电路都可以独立配置和屏蔽。
16个外部中断事件示意图:
比如我们可以配置GPIOA5作为EXTI线路5的中断输入,设置为上升沿触发,再在中断服务程序EXTI9_5_IRQHandler
中,检查对应的中断标志,处理中断事件,并清除中断标志。
当GPIOA5输入上升沿时,MCU被唤醒,此时可以处理其它业务。
2.深度睡眠(停止)模式
进入该模式,1.8V供电区域的的所有时钟都被停止, PLL、 HSI和HSE RC振荡器的功能被禁止, 只是SRAM和寄存器内容被保留下来,所有的I/O引脚都保持它们在运行模式时的状态,即MCU保持进入前的状态和数据,不会运行更新了。
该模式下不能直接通过中断来唤醒,比如串口中断之类的中断,只能通过 EXTI 外部中断方式唤醒。
因此在MCU进入 STOP模式前将 RX 脚设为 EXTI 模式,再使能对应中断来实现,因为串口接收引脚接收的数据也是高低电平信号。通过此方法唤醒MCU后需要重新配置串口参数,否则串口工作会异常。
3.注意事项
1)进入低功耗之后, 实际功耗却远大于理想功耗。
解决办法:
进入低功耗之前, 对使用和未使用IO状态进行调整。 比如有外部上拉, 可配置成模拟输入等。
因为造成问题的原因可能是工程师通过直接调用“停止模式”,进入低功耗, 但部分IO外部有上拉电阻, 进入低功耗之前未做调整, 所以导致功耗偏大。
2)进入待机模式,MCU通过按键唤醒后,外设(串口)未正常工作。
解决办法:
唤醒STM32之后, 重新初始化串口(以及所有使用的) 外设。
因为进入的低功耗模式为待机模式, 唤醒之后, 未初始化串口外设, 导致串口不能正常工作。 在待机模式下, 所有外设都关闭, 意味着所有外设配置都为默认值。
总结
随着物联网概念逐渐的深入人心,越来越多的物联网嵌入式设备出现在我们的身边,如智能水表,智能燃气表,这些设备远离强电,只能通过电池供电,还不便于更换,那么低功耗就成了必须要实现的功能,只需要一节电池就可以让设备运行5-10年,这带来了极大的便利。
低功耗也是节能与可持续理念的体现。
作者:带风追风