RISC-V MCU中文社区

RVMCU课堂「24」: 手把手教你玩转RVSTAR—PMU应用篇

发表于 2021-07-20 10:55:23
0
7332
2

低功耗设计是嵌入式系统中一个很重要的设计要素,尤其对于使用电池供电的设备,让微控制器主动进入低功耗模式可以有效降低系统整体的功耗,同时还能有效降低外部干扰带来的影响。RVSTAR使用的GD32VF103微控制器提供了电源管理单元(Power Management Unit,PMU),它提供了三种省电模式,本期内容将介绍其中一种模式的应用,帮助大家学习PMU的用法。

系统环境

Windows 10-64bit

软件平台

NucleiStudio IDE 202102版
或 PlatformIO IDE

硬件需求

RV-STAR开发板





GD32VF103的PMU单元


功耗设计是GD32VF103系列产品比较注重的问题之一。电源管理单元提供了三种省电模式,包括睡眠模式,深度睡眠模式和待机模式。这些模式能减少电源能耗,且使得应用程序可以在CPU运行时间要求、速度和功耗的相互冲突中获得最佳折衷。如图3-1.电源域概览所示,GD32VF103系列设备有三个电源域,包括VDD/VDDA域,1.2V域和备份域。VDD域由电源VDD直接供电。在VDD/VDDA域中嵌入了一个LDO,用来为1.2V域供电。在备份域中有一个电源切换器,当VDD电源关闭时,电源切换器可以将备份域的电源切换到VBAT引脚,此时备份域由VBAT引脚(电池)供电。



​PMU的主要特征如下:

      1. 三个电源域:备份域、VDD / VDDA域和1.2V电源域;
      1. 三种省电模式:睡眠模式、深度睡眠模式和待机模式;
      1. 内部电压调节器(LDO)提供1.2V电源;
      1. 提供低电压检测器,当电压低于所设定的阈值时能发初中断或事件;
      1. VDD供电关闭时,由VBAT(电池)为备份域供电;
      1. LDO输出电压用于节约能耗。



实验部分


本次的实验目标是通过指令让微控制器主动进入深度睡眠模式,然后再通过外部中断唤醒。进入深度睡眠模式时,1.2V域中的时钟全部关闭,IRC8M、HXTAL及PLLs全部被禁用,SRAM和寄存器中的内容被保留,程序会中止在当前状态不再继续运行。

我们的实验内容设计如下:

上电后将唤醒按键配置为中断模式并点亮红色LED,然后立即进入深度睡眠模式,程序中止,红色LED处于点亮状态,当按下唤醒按键,程序恢复运行,红色LED熄灭,绿色LED开始闪烁。

对应的主要代码如下:

#include "nuclei_sdk_hal.h"

void gd_rvstar_led_blink(int led);

int main()
{
    gd_rvstar_led_init(LED1);
    gd_rvstar_led_init(LED3);
    gd_rvstar_key_init(KEY_WAKEUP, KEY_MODE_EXTI);
/* 使能PMU时钟 */
    rcu_periph_clock_enable(RCU_PMU);

    gd_rvstar_led_on(LED3);

/* 进入深度睡眠模式 */
    pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);

    gd_rvstar_led_off(LED3);
    while (1) {
        gd_rvstar_led_blink(LED1);
    }
}

void EXTI0_IRQHandler(void)
{
    if (RESET != exti_interrupt_flag_get(WAKEUP_KEY_EXTI_LINE)) {
        exti_interrupt_flag_clear(WAKEUP_KEY_EXTI_LINE);
    }
}


完整代码请参考Github上nuclei_board_labs仓库中RVSTAR的PMU例程。

完整代码:https://github.com/Nuclei-Software/nuclei-board-labs/tree/master/rvstar/pmu/deepsleep_wakeup_exti

代码编写完毕后,编译并上传到开发板上,可以观察实验现象和我们的设计预期相符。






喜欢2
用户评论
Fish

Fish 实名认证

懒的都不写签名

积分
问答
粉丝
关注
专栏作者
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板