0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

聚沃科技 2024-05-07 09:29 次阅读
wKgaomYwSqiAY_PQAAnl063z3JE116.png

5.1实验内容

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

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

5.2实验原理

5.2.1PMU结构原理

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

wKgZomY5gg2AcintAAHEBzGu4g4126.png

  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。

wKgaomY5giGAda55AADRnVzXv9Q116.png

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。

wKgaomY5giGAda55AADRnVzXv9Q116.png

  • 注意: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将会复位重启。

wKgaomY5gxqACYmEAAOgPahmeNU525.png

wKgZomY5gyWASJchAAFQP66ffQg455.png

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

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

5.3硬件设计

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

wKgaomY5g0-AOKq4AAFM1QyW4_s331.png

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翻转。

具体现象如下所示。

wKgZomY5g36AYlDGACaIovnJVOs240.png

教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634634
  • 低功耗
    +关注

    关注

    10

    文章

    2396

    浏览量

    103670
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97371
  • PMU
    PMU
    +关注

    关注

    1

    文章

    108

    浏览量

    21592
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24328
收藏 人收藏

    评论

    相关推荐

    GD32F470紫藤开发板使用手册】第九 USART-printf打印实验

    通过本实验主要学习以下内容: 串口简介 GD32F470串口工作原理 使用printf打印信息
    的头像 发表于 05-13 10:14 1725次阅读
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第九<b class='flag-5'>讲</b>  USART-printf打印<b class='flag-5'>实验</b>

    GD32F470紫藤开发板使用手册】第十一讲 SPI-SPI NOR FLASH读写实验

    通过本实验主要学习以下内容: •SPI简介 •GD32F470 SPI简介 •SPI NOR FLASH——GD25Q32ESIGR简介 •使用GD32F470 SPI接口实现对
    的头像 发表于 05-17 09:57 1771次阅读
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第十一讲 SPI-SPI NOR FLASH读写<b class='flag-5'>实验</b>

    使用GD32F470编译drv_adc.c时报错怎么解决?

    使用GD32F470芯片,编译drv_adc.c时报错好几个编译错误,可能是适配GD32F470芯片没有适配好。 编译问题如下图:
    发表于 02-23 06:55

    YL-51开发板使用手册

    YL-51开发板使用手册,YL-51开发板使用手册YL-51开发板使用手册YL-51
    发表于 05-10 16:31 21次下载

    开发板烧写测试使用手册

    开发板烧写测试使用手册,有需要的下来看看
    发表于 06-03 14:30 0次下载

    51开发板使用手册

    51开发板使用手册,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-23 15:45 11次下载

    KC705开发板英文使用手册

    KC705开发板英文使用手册
    发表于 11-01 10:19 5次下载

    iTOP-3399开发板使用手册大更新

    iTOP-3399开发板使用手册大更新
    的头像 发表于 12-10 15:46 1354次阅读
    iTOP-3399<b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>大更新

    APT32F102 开发板使用手册

    电子发烧友网站提供《APT32F102 开发板使用手册.pdf》资料免费下载
    发表于 04-16 09:07 0次下载

    GD32H757Z海棠开发板使用手册第五 PMU-低功耗实验

    PMU即电源管理单元,其内部结构下图所示,由该图可知,GD32H7XX系列MCU具有三个电源域,包括VDD/VDDA电源域、0.9V电源域以及电池备份域,其中,VDD /VDDA域由电源直接供电
    的头像 发表于 04-20 09:32 996次阅读
    【<b class='flag-5'>GD</b>32H757Z海棠<b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】<b class='flag-5'>第五</b><b class='flag-5'>讲</b> <b class='flag-5'>PMU-</b><b class='flag-5'>低功耗</b><b class='flag-5'>实验</b>

    GD32F470紫藤开发板使用手册】第二 GPIO-按键查询实验

    通过本实验主要学习以下内容: GPIO输入功能原理; 按键查询输入检测原理;
    的头像 发表于 04-30 11:39 696次阅读
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第二<b class='flag-5'>讲</b> GPIO-按键查询<b class='flag-5'>实验</b>

    GD32F470紫藤开发板使用手册】第八 ADC-规则组多通道采样实验

    通过本实验主要学习以下内容: •ADC的简介 •GD32F470 ADC工作原理 •DMA原理 •规则组多通道循环采样
    的头像 发表于 05-12 10:00 751次阅读
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第八<b class='flag-5'>讲</b> ADC-规则组多通道采样<b class='flag-5'>实验</b>

    GD32F470紫藤开发板使用手册】第十三讲 USB_虚拟键盘实验

    通过本实验主要学习以下内容: •USB协议基本原理 •GD32F4xx USBFS的使用 •虚拟键盘的协议原理及使用
    的头像 发表于 05-19 09:59 1103次阅读
    【<b class='flag-5'>GD32F470</b><b class='flag-5'>紫藤</b><b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第十三讲 USB_虚拟键盘<b class='flag-5'>实验</b>

    GD32F303红枫开发板使用手册】第六 PMU-低功耗实验

    PMU即电源管理单元,其内部结构下图所示,由该图可知,GD32F303系列MCU具有三个电源域,包括VDD/VDDA电源域、1.2V电源域以及电池备份域,其中,VDD /VDDA域由电源直接供电。在
    的头像 发表于 06-02 10:12 717次阅读
    【<b class='flag-5'>GD32F</b>303红枫<b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第六<b class='flag-5'>讲</b> <b class='flag-5'>PMU-</b><b class='flag-5'>低功耗</b><b class='flag-5'>实验</b><b class='flag-5'>讲</b>

    GD32F303红枫开发板使用手册】第二十 SPI-SPI NAND FLASH读写实验

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册GD32F303 SPI操作方式,参考19.2.2东方红
    的头像 发表于 06-20 09:50 885次阅读
    【<b class='flag-5'>GD32F</b>303红枫<b class='flag-5'>派</b><b class='flag-5'>开发板</b><b class='flag-5'>使用手册</b>】第二十<b class='flag-5'>讲</b> SPI-SPI NAND FLASH读写<b class='flag-5'>实验</b>