【GD32F470紫藤派使用手册】第五讲 PMU-低功耗实验

5.1 实验内容

通过本实验主要学习以下内容:

  • PMU原理;
  • 低功耗的进入以及退出操作;

5.2 实验原理

5.2.1 PMU结构原理

PMU即电源管理单元,其内部结构下图所示,由该图可知,GD32F4xx系列MCU具有三个电源域,包括VDD/VDDA电源域、1.2V电源域以及电池备份域,其中,VDD /VDDA域由电源直接供电。在VDD/VDDA域中嵌入了一个LDO,用来为1.2V域供电。在备份域中有一个电源切换器,当VDD/VDDA电源关闭时,电源切换器可以将备份域的电源切换到VBAT引脚,此时备份域由VBAT引脚(电池)供电。

  1. VDD/VDDA电源域

VDD 域为数字电源域包括 HXTAL(高速外部晶体振荡器)、 LDO(电压调节器)、 POR / PDR(上电/掉电复位)、 FWDGT(独立看门狗定时器)和除 PC13、PC14 和 PC15 之外的所有 PAD 等等。另外,上图中与PMU控制器连接的PA0、NRST、FWDGT以及RTC表示待机模式下的唤醒源。VDDA域为模拟电源域包括 ADC / DAC(AD / DA 转换器)、 IRC16M(内部 16M RC 振荡器)、 IRC32K(内部 32KHz RC振荡器) PLLs(锁相环)和 LVD(低电压检测器)等等。

POR / PDR(上电/掉电复位) 电路检测VDD / VDDA并在电压低于特定阈值时产生电源复位信号复位除备份域之外的整个芯片。 下图显示了供电电压和电源复位信号之间的关系。 VPOR 表示上电复位的阈值电压,典型值约为 2.45V, VPDR 表示掉电复位的阈值电压,典型值约为1.82V。迟滞电压Vhyst值约为600mV。

GD32F4XX系列MCU具有LVD低电压检测功能,如下图所示,LVD 的功能是检测 VDD / VDDA 供电电压是否低于低电压检测阈值,该阈值由电源控制寄存器(PMU_CTL) 中的 LVDT[2:0]位进行配置。 LVD 通过 LVDEN 置位使能,位于电源状态寄存器(PMU_CS) 中的 LVDF 位表示低电压事件是否出现,该事件连接至 EXTI 的第 16 线,用户可以通过配置 EXTI 的第16 线产生相应的中断。 LVD 中断信号依赖于 EXTI 第 16 线的上升或下降沿配置。迟滞电压 Vhyst值为 100mV。

  • 注意:LVD一般可用于欠压异常处理或者用于掉电检测。
  1. 1.2V电源域

1.2V 电源域为 Cortex®-M4 内核逻辑、 AHB / APB 外设、备份域和 VDD / VDDA域的 APB 接口等供电。若系统系统工作在高频状态建议使能高驱模式。

  1. 电池备份域

电池备份域由内部电源切换器来选择VDD供电或VBAT(电池)供电,然后由VBAK为备份域供电,该备份域包含RTC(实时时钟)、 LXTAL(低速外部晶体振荡器)、 BPOR(备份域上电复位)、BREG(备份寄存器),以及PC13至PC15共3个BKPPAD。为了确保备份域中寄存器的内容及RTC正常工作,当VDD关闭时, VBAT引脚可以连接至电池或其他等备份源供电。电源切换器是由VDD / VDDA域掉电复位电路控制的。对于没有外部电池的应用,建议将VBAT引脚通过100nF的外部陶瓷去耦电容连接到VDD引脚上。

  • 注意: 由于PC13至PC15引脚是通过电源切换器供电的,电源切换器仅可通过小电流,因此当PC13至PC15的GPIO口在输出模式时,其工作的速度不能超过2MHz(最大负载为30Pf)。

若读者有在VDD掉电情况下RTC继续工作的应用需求,需要VBAT引脚外接电池并使用LXTAL外部低频晶振,这样在VDD掉电的情况下,VBAT供电将会由VDD切换到VBAT,LXTAL和RTC均可正常工作,后续VDD上电后同步RTC寄存器即可获取正确的RTC时间。

5.2.2 低功耗模式

GD32F4xx系列MCU具有三种低功耗模式,分别为睡眠模式、深度睡眠模式和待机模式。

睡眠模式与 Cortex®-M4 的 SLEEPING 模式相对应。在睡眠模式下,仅关闭 Cortex®-M4的时钟,如需进入睡眠模式,只要清除 Cortex®-M4 系统控制寄存器中的 SLEEPDEEP 位,并执行一条 WFI 或 WFE 指令即可。

深度睡眠模式与 Cortex®-M4 的 SLEEPDEEP 模式相对应。在深度睡眠模式下, 1.2V 域中的所有时钟全部关闭, IRC16M、 HXTAL 及 PLLs 也全部被禁用。 SRAM 和寄存器中的内容被保留。根据 PMU_CTL 寄存器的 LDOLP 位的配置,可控制 LDO 工作在正常模式或低功耗模式。进入深度睡眠模式之前,先将 Cortex®-M4 系统控制寄存器的 SLEEPDEEP 位置 1,再清除PMU_CTL 寄存器的 STBMOD 位,然后执行 WFI 或 WFE 指令即可进入深度睡眠模式。如果睡眠模式是通过执行 WFI 指令进入的, 任何来自 EXTI 的中断可以将系统从深度睡眠模式中唤醒。如果睡眠模式是通过执行 WFE 指令进入的, 任何来自 EXTI 的事件可以将系统从深度睡眠模式中唤醒(如果 SEVONPEND 为 1,任何来自 EXTI 的中断都可以唤醒系统,请参考Cortex®-M4 技术手册)。 刚退出深度睡眠模式时, IRC16M 被选中作为系统时钟。请注意,如果 LDO 工作在低功耗模式,那么唤醒时需额外的延时时间。  

待机模式是基于 Cortex®-M4 的 SLEEPDEEP 模式实现的。在待机模式下,整个 1.2V 域全部停止供电,同时 LDO 和包括 IRC16M、 HXTAL 和 PLL 也会被关闭。进入待机模式前,先将Cortex®-M4 系统控制寄存器的 SLEEPDEEP 位置 1,再将 PMU_CTL 寄存器的 STBMOD 位置 1,再清除 PMU_CS 寄存器的 WUF 位,然后执行 WFI 或 WFE 指令,系统进入待机模式,PMU_CS 寄存器的 STBF 位状态表示 MCU 是否已进入待机模式。待机模式有四个唤醒源,包括来自 NRST 引脚的外部复位, RTC 唤醒事件,包括 RTC 侵入事件、 RTC 闹钟事件、 RTC时间戳事件或 RTC 唤醒事件, FWDGT 复位, WKUP 引脚的上升沿。待机模式可以达到最低的功耗,但唤醒时间最长。另外,一旦进入待机模式, SRAM 和 1.2V 电源域寄存器(除了备份 SRAM,当 BLDOON 置位时)的内容都会丢失。退出待机模式时,会发生上电复位,复位之后 Cortex®-M4 将从 0x00000000 地址开始执行指令代码。  

低功耗模式相关数据可参考下表,不同的低功耗模式是通过关闭不同时钟以及电源来实现的,关闭的时钟和电源越多,MCU所进入的睡眠模式将会越深,功耗也会越低,带来的唤醒时间也会越长,其唤醒源也会越少。睡眠模式是最浅的低功耗模式,仅关闭了CPU,代码不再运行,所有的中断或事件均可唤醒,唤醒时间也最快;深度睡眠模式时中间的低功耗模式,关闭了1.2V电源域时钟以及IRC8M/HXTAL/PLL,仅可通过EXTI中断或事件唤醒,唤醒后需要重新配置系统时钟;待机模式是功耗最低的低功耗模式,关闭了1.2V电源域电源以及IRC8M/HXTAL/PLL,仅可通过NRST/看门狗/RTC闹钟/WKUP引脚唤醒,唤醒后MCU将会复位重启。

各种睡眠模式下的功耗可以参考数据手册描述,睡眠模式下相较于同主频模式下的运行模式功耗减少约50%,深度睡眠和待机模式功耗更低,如下表所示,深度睡眠模式下功耗常温典型值为1.3ma,待机模式下功耗常温典型值为9uA。

  • 注意:由于深度睡眠模式具有较低的功耗,唤醒后继续从断点处执行,因而具有更广泛的应用场景,但需注意若需达到较一致的MCU深度睡眠功耗,需要将系统中未使用的MCU引脚均配置为模拟输入状态,包括芯片内部未引出的pad。

Note:中间为典型数值,右侧为常温下的最大数值。 

5.3 硬件设计

本例程stanby的唤醒使用到了PA0唤醒引脚,其电路如下所示。

5.4 代码解析

本例程实现deepsleep以及standby的进入以及唤醒测试,首先我们来看下主函数,如下所示。该主函数首先配置了系统主时钟、延迟、打印和LED函数,并打印Example of Low Power Test Demo。之后查询是否进入过Standby模式,如果进入过Standby模式,表示当前状态为standby唤醒后的复位,则打印A reset event from Standby mode has occurred,并翻转LED2,因而验证standby唤醒的时候,其现象可观察到LED2的翻转。之后使能wakeup引脚的唤醒以及USER按键的初始化,此时将wakeup KEY配置为中断模式。在while(1)中,查询USER KEY按下的时间,如果按下超过3S,则打印Entering Standby Mode.并进入standby模式,如果USER KEY按下不超过3S,则打印Enter Deepsleep mode.并进入Deepsleep模式,从deepsleep模式唤醒后需要重新配置时钟,打印Exit Deepsleep mode.并翻转LED1。Standby的唤醒使用PA0 wakeup引脚,deepsleep的唤醒可使用任何EXTI中断,本实例中使用wakeup按键中断唤醒。

C
int main(void)
{
        rcu_periph_clock_enable(RCU_PMU);
    driver_init();
    //注册按键扫描
    driver_tick_handle[0].tick_value=10;    
    driver_tick_handle[0].tick_task_callback=key_scan_10ms_callhandle;
    
    
        bsp_uart_init(&BOARD_UART);                                                                                                                                   /* 板载UART初始化 */
    printf_log("Example of Low Power Test Demo.\r\n");

        delay_ms(2000);
        bsp_led_group_init();  
        
        /* 判断是否进入过Stanby模式 */
        if(pmu_flag_get(PMU_FLAG_RESET_STANDBY)==SET)
        {
                  printf_log("A reset event from Standby mode has occurred.\r\n");
                  bsp_led_toggle(&LED2);
          pmu_flag_clear(PMU_FLAG_RESET_STANDBY);
        }

        /* 配置PA0 Wakeup唤醒功能 */
        pmu_wakeup_pin_enable();
        WKUP_KEY.key_gpio->gpio_mode = INT_HIGH;
        WKUP_KEY.key_gpio->int_callback = WKUP_KEY_IRQ_callback;
    bsp_key_group_init();
        nvic_irq_enable(EXTI0_IRQn,0,0);
        
        while (1)
        {
                /* 检测KEY1按键是否被按下,如果按下,进入standby模式 */
        if(USER_KEY.press_timerms >= PRESS_3000MS)
        {
             USER_KEY.press_timerms=PRESS_NONE;
                         printf_log("Entering Standby Mode.\r\n");
                         bsp_led_toggle(&LED2);
                         pmu_to_standbymode(WFI_CMD);
                }
                /* 检测KEY2按键是否被按下,如果按下,进入Deepsleep模式 */
        if(USER_KEY.press_timerms >= PRESS_50MS)
        {
             USER_KEY.press_timerms=PRESS_NONE;
                         printf_log("Enter Deepsleep mode.\r\n");
                         bsp_led_toggle(&LED1);
            
             bsp_lcd_backlight_off();
             pmu_to_deepsleepmode(PMU_LDO_NORMAL, PMU_LOWDRIVER_DISABLE, WFI_CMD);
             bsp_lcd_backlight_on();
                         printf_log("Exit Deepsleep mode.\r\n");
                         bsp_led_toggle(&LED1);
                }
        }
}

5.5 实验结果

将本实验历程烧录到紫藤派开发板中,按下user key按键超过3S,松开后MCU将进入standby模式,并打印Entering Standby Mode.,然后按下wakeup按键,将从stanby模式唤醒,打印A reset event from Standby mode has occurred.并翻转LED2,之后短按USER KEY,将打印Enter Deepsleep mode.进入deepsleep模式,然后按下wakeup按键将从deepsleep模式下唤醒,唤醒后重新配置时钟,打印Exit Deepsleep mode.并将LED1翻转。

具体现象如下所示。

由聚沃科技原创,来源于资料下载 - 苏州聚沃电子科技有限公司icon-default.png?t=N7T8https://www.gd32bbs.com/cms/xiazai.htmlGD32MCU技术交流群:859440462

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

驱动丹佛斯比例电磁铁放大器

驱动丹佛斯比例电磁铁是一种用于实现对液压系统连续且精确控制的通电带磁性装置。比例阀由直流比例电磁铁和液压阀两部分组成。其中,比例电磁铁是其核心部件,负责将输入的电信号转换成力和位移输出,从而控制液压阀的工作状态。比例电磁铁通过…

c语言实现十进制(整数,小数)转N进制

文章目录 先来说一下整数转N进制小数转N进制栈和队列代码地址← 今天实现了c语言整数和小数转换为对应的N进制 先来说一下整数转N进制 我们只需要不断的取模然后判断num/N是否等于0就可以了,同时我们还要保存每一组的余数 这里我们的余数是从下往上输出的,是不是就相当于后算出…

海外盲盒小程序:探索世界,发现无限可能

在数字时代,我们渴望突破地域的界限,体验不同文化,感受世界的多彩。为了满足这一需求,我们隆重推出“海外盲盒小程序”——一个让你足不出户,就能探索世界、发现无限可能的神奇平台。 一、独特的盲盒体验 打开“海外盲…

NetApp数据恢复—WAFL文件系统下raid数据恢复案例

NetApp存储数据恢复环境&故障: 某公司NetApp存储设备,人为误操作导致NetApp存储内部分重要数据被删除,该NetApp存储采用WAFL文件系统,底层是由多块硬盘组成的raid阵列。 NetApp存储数据恢复过程: 1、将NetApp存储设…

VBA在Excel中注册登录界面的应用

VBA在Excel中注册登录界面的应用(V潘谆白说VBA) 文章目录 前言一、如何注册登录?二、注册登录界面截图三、操作思路四、运行代码1.注册2.登录3.注册登录界面赋值4.隐藏工作表方法5.显示工作表方法6.打开、关闭工作薄前操作前言 Excel工作表也可以像其他小程序一样,输入账号…

【3D基础】坐标转换——地理坐标投影到平面

汤国安版GIS原理第二章重点 1.常见投影方式 https://download.csdn.net/blog/column/9283203/83387473 Web Mercator投影(Web Mercator Projection): 优点: 在 Web 地图中广泛使用,易于显示并与在线地图服务集成。在…

【Linux学习笔记】一篇文章彻底搞定 “Linux同步与互斥“ !

本章重点 1. 学会线程同步。 2 学会使用互斥量,条件变量,posix信号量,以及读写锁。 1、进程线程间的互斥相关背景概念 临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的…

【多电压流程 Multivoltage Flow】- 5.特定工具使用建议(5.使用ICC II以及FC进行物理实现)

使用IC Compiler II和Fusion Compiler进行物理实现 在完成带有行站点、电源规划和I/O放置的floorplan之后,可以继续进行物理综合和实现。Fusion Compiler提供了广泛的功能,以执行设计的平面物理实现。 图67显示了物理实现流程的一般步骤以及流程的低功耗支持特性。 图67 I…

极度内卷,消费下行,AIGC如何成为普通人易变现好上手的新机会,这几种方法一定要尝试!

最近看到一个麦肯锡报告,说到2030年,AI会替代1亿多中国人的岗位。 暂且不说这个预测是否准确,但自从AI横空出世,确实给我们的生活带来了翻天覆地的变化,有人顺势起飞,有人被时代淘汰… 李开复也曾不止一次…

47-Qt控件详解:Buttons Containers1

一 QPushButton (命令按钮) #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPushButton>//引入QPushButton类对应的头文件class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWind…

如何评估大型语言模型(LLM)?

01 简介 Introduction 随着ChatGPT和其他大型语言模型&#xff08;LLMs&#xff09;的发布&#xff0c;可用模型数量大量增加&#xff0c;现在几乎每天都有新的LLMs发布。尽管如此&#xff0c;当下仍然没有一个通用的标准来评估这些大型语言模型的质量。本文将回顾现有的大型语…

振弦式表面式应变计有哪些功能优势

振弦式表面应变计是一种高精度的测量工具&#xff0c;专门用于测量材料表面的应变和位移。它通过监测材料表面的微小变化&#xff0c;帮助工程师获得关键的结构性能数据。振弦式表面应变计因其独特的功能优势&#xff0c;在众多领域尤其是在结构健康监测中&#xff0c;发挥着不…

卡尔曼滤波状态估计

clear all; close all; clc; %% 上面是调用卡尔曼滤波 % 定义状态维数和初始条件 n 3; % 状态维数 q 0.2; % 过程噪声标准差 r 0.15; % 测量噪声标准差 Q q * eye(n); …

Oracle如何收缩减小表空间大小

比如我们发现一个表空间占用比较大&#xff0c;但是空闲空间很大&#xff0c;想要减小表空间占用大小。查看表空间的情况 发现BETEST表空间占用大&#xff0c;但是剩余大小比较大&#xff0c;可以减小存储占用。 如果我们想减小到100MB&#xff0c;那么就登录其用户执行&#…

UDP怎么端口映射?

在网络通信中&#xff0c;TCP和UDP是两种常用的传输协议。UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输协议&#xff0c;相较于TCP协议来说&#xff0c;它更为轻量级且不可靠。UDP协议在某些场景下仍然有其独特的优势&#xff0c;尤其是在需要快速传输…

[每周一更]-(第96期):Rsync 用法教程:高效同步文件与目录

文章目录 一、引言二、rsync 基本概念三、介绍rsync 是什么&#xff1f;四、安装五、rsync 基本语法常见示例&#xff08;默认ssh协议&#xff09;&#xff1a; 六、常用选项1. -a 或 --archive2. -v 或 --verbose3. -z 或 --compress4. --delete5. --exclude6. --exclude-from…

hadoop yarm你知道吗?

一、概念 Hadoop YARN&#xff08;Yet Another Resource Negotiator&#xff09;是Hadoop 2.x版本中的一个重要组件&#xff0c;用于资源管理和作业调度。它是Hadoop的第二代资源管理器&#xff0c;取代了Hadoop 1.x版本中的MapReduce作业调度器。 通俗地理解它的作用有点像一…

如何通过外网访问内网服务器?

随着网络的普及和各行各业对互联网的应用需求增加&#xff0c;通过外网访问内网服务器的需求也越来越多。在传统的网络环境下&#xff0c;要实现外网访问内网服务器需要进行繁琐的端口映射设置&#xff0c;而且还会受到网络环境限制和数据安全问题的困扰。现在有了一种名为【天…

Springboot整合 Spring Cloud Alibaba Sentinel

1.Sentinel介绍 官方文档地址&#xff1a; https://sentinelguard.io/zh-cn/docs/introduction.html https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入…

定制聚四氟乙烯大圆桶50L

PTFE聚四氟乙烯圆桶是高性能化学实验器皿&#xff0c;适用于强酸强碱环境。具有化学稳定性、耐高温、良好密封、易清洗、环保安全等特点。 常规四氟桶-超大规格四氟桶均可定制&#xff0c;一体成型&#xff0c;保证密封&#xff0c;可长期保存高纯试剂。 产品特性 1.超纯实验…