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

news2024/10/5 12:43:11

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.coloradmin.cn/o/1670158.html

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

相关文章

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记,都是零碎的要点,查缺补漏,希望大家都能通过,记得加上免费的关注!谢谢!本章主要以下午题出现形式为主! 文章编辑于:2024-5-13 13:43:47 目录 1…

聚焦光量子应用开发!Quandela 发布新版量子计算云服务

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:1200字丨5分钟阅读 摘要:法国光量子计算公司 Quandela宣布推出新版量子计算云服务 Quandela Cloud 2.0,通过创新技术确保量…

C++初阶:8.list

list 一.list的介绍及使用 1. list的介绍 list的文档介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中…

AXI Interconnect IP核的连接模式简介

AXI Interconnect IP核内部包含一个 Crossbar IP核,用于在 Slave Interfaces(SI)和 Master Interfaces(MI)之间路由传输。在连接 SI 或 MI 到 Crossbar 的每条路径上,可以选择性地添加一系列 AXI Infrastru…

3389端口报SSL_TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】漏洞

1、win+R运行,输入gpedit.msc进入本地计算机策略 2、本地计算机组策略——>计算机配置——>管理模板——>网络——>ssl配置设置 3、打开ssl密码套件顺序 4、点击已开启,把密码套件替换为下一步中的套件内容。 套件内容 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_…

韵搜坊(全栈开发)-- 项目介绍

文章目录 项目介绍技术栈前端后端 业务流程 后端地址: https://github.com/IMZHEYA/zhesou-backend 前端地址: https://github.com/IMZHEYA/zhesou-frontend 图标设计(AI生成): 项目介绍 一个聚合搜素平台&#xff…

火山引擎A/B测试平台的实验管理重构与DDD实践

本次分享的主题是火山引擎数智平台VeDI旗下的A/B测试平台 DataTester 实验管理架构升级与DDD实践。这里说明的一点是,代码的第一目标肯定是满足产品需求,能够满足产品需求的代码都是好代码。而本文中对代码的好坏的评价完全是从架构的视角,结…

机器人增量学习研究综述

源自:控制与决策 作者:马旭淼 徐德 “人工智能技术与咨询” 发布 摘 要 机器人的应用场景正在不断更新换代,数据量也在日益增长.传统的机器学习方法难以适应动态的环境,而增量学习技术能够模拟人类的学习过程,使机器人能利用旧知识来加快新任务的…

维护祖传项目Tomcat部署war包

文章目录 1. 安装tomcat2. 解决Tomcat启动日志乱码3. idea配置启动war包 1. 安装tomcat 选择免安装版本,只需要在系统变量里面配置一下。 新增系统变量 CATALINA_HOME D:\Users\common\tomcat\apache-tomcat-8.5.97-windows-x64\apache-tomcat-8.5.97 编辑追加Path…

ROS2入门21讲__第03讲__ROS2安装方法

目录 前言 Linux系统简介 Ubuntu系统简介 Ubuntu虚拟机安装 1. 下载系统镜像 2. 在虚拟机中创建系统 3. 设置虚拟机硬盘大小 4. 设置Ubuntu镜像路径 5. 启动虚拟机 6. 设置用户名和密码 7. 等待系统安装 8. 完成安装 ROS2系统安装 1. 设置编码 2. 添加源 3. 安装…

利用香港多IP服务器进行大数据分析的潜在优势?

利用香港多IP服务器进行大数据分析的潜在优势? 在当今数据驱动的时代,大数据分析已经成为企业获取竞争优势的不二选择。而香港作为一个拥有世界级通信基础设施的城市,提供了理想的环境来部署多IP服务器,从而为大数据分析提供了独特的优势。…

文档解析与向量化技术加速多模态大模型训练与应用

前言 随着人工智能技术的不断发展,多模态大模型作为一种新型的机器学习技术,逐渐成为人工智能领域的热点话题。多模态大模型能够处理多种媒体数据,如文本、图像、音频和视频等,并通过学习不同模态之间的关联,实现更加…

Mac安装jadx

1、使用命令brew安装 : brew install jadx 输入完命令,等待安装完毕 备注(关于Homebrew ): Homebrew 是 MacOS 下的包管理工具,类似 apt-get/apt 之于 Linux,yum 之于 CentOS。如果一款软件发布时支持了 homebrew 安…

[Linux][网络][协议技术][DNS][ICMP][ping][traceroute][NAT]详细讲解

目录 1.DNS1.DNS背景2.域名简介 2.ICMP协议1.ICMP功能2.ICMP两类报文 3.ping命令4.traceroute5.NAT技术1.NAT技术背景2.NAT IP转换过程3.静态地址NAT && 动态地址NAT4.网络地址端口转换NAPT5.NAT技术的缺陷6.NAT和代理服务器 6.总结1.数据链路层2.网络层3.传输层4.应用…

如何给远程服务器配置代理

目录 前言 正文 更换镜像源 开始之前 安装过程 遇到的问题 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.👯 I’m studying in University of Nottingham Ningbo China&#x1f4…

使用Git管理github的代码库-上

1、下载安装Git https://download.csdn.net/download/notfindjob/11451730?spm1001.2014.3001.5503 2、注册一个github的账号(已经注册的,可略过这一步) 3、打开git命令行,配置github账号 git config --global user.name &quo…

CCleaner系统优化与隐私保护工具,中文绿色便携版 v6.23.11010

01 软件介绍 CCleaner 是一款高级的系统优化工具,其设计宗旨在于彻底清理 Windows 操作系统中积累的无用文件和冗余的注册表项。此举旨在显著提升计算机的运行效率并回收磁盘空间。该软件拥有高效的能力,可以清除包括临时文件、浏览器缓存及其历史记录在…

Java入门——继承和多态(中)

组合 和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果. public class Student { ... } public class Teacher { ... } public class School { public Student[] students; public Teacher[] teachers; } 组合并没有涉及到特殊的语法(诸如 ex…

如何通过香港站群服务器高效实现网站内容的快速更新?

如何通过香港站群服务器高效实现网站内容的快速更新? 在当今激烈的数字市场竞争中,网站内容的快速更新对于吸引用户和保持竞争优势至关重要。而利用香港站群服务器实现这一目标,则具备诸多优势。下面将详细探讨如何通过香港站群服务器高效实现网站内容…

【CSP CCF记录】数组推导

题目 过程 思路 每次输入一个Bi即可确定一个Ai值,用temp记录1~B[i-1],的最大值分为两种情况: 当temp不等于Bi时,则说明Bi值之前未出现过,Ai必须等于Bi才能满足Bi是Ai前缀最大的定义。当temp等于Bi时,则说…