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年,这带来了极大的便利。

低功耗也是节能与可持续理念的体现。

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值