打印

【GD32 MCU入门教程】四、GD32 MCU 常见外设介绍(11)PMU 模块介绍

[复制链接]
638|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 聚沃科技 于 2024-9-18 15:51 编辑

11.1.PMU 简介
PMU即电源管理单元,它有三个电源域,包括VDD/VDDA域、1.1V/1.2V域和备份域。电源管理单元在常规芯片提供了三种省电模式,包括睡眠模式、深度睡眠模式和待机模式;在低功耗芯片中,电源管理单元提供了十种省电模式,包括运行模式,运行模式 1,运行模式 2,睡眠模式,睡眠模式 1,睡眠模式 2,深度睡眠模式,深度睡眠模式 1,深度睡眠模式 2 和待机模式。这些模式能减少电源能耗,且使得应用程序可以在CPU运行时间要求、速度和功耗的相互冲突中获得最佳折衷。
11.2.PMU 功能
三个电源域:备份域、 VDD/VDDA域和1.1V/1.2V电源域;
三种省电模式(常规芯片):睡眠模式、深度睡眠模式和待机模式;
十种省电模式(低功耗芯片):运行模式、运行模式1、运行模式2、睡眠模式、睡眠模式1、睡眠模式2、深度睡眠模式、深度睡眠模式1、深度睡眠模式2和待机模式。
内部电压调节器( LDO)提供1.1V/1.2V电源;
提供低电压检测器,当电压低于所设定的阈值时能发出中断或事件;
当VDD供电关闭时,由VBAT(电池)为备份域供电;
LDO输出电压用于节约能耗;
低驱动模式用于在深入睡眠模式下超低功耗。高驱动模式用在高频模式中。
如下图PMU及相关电源域内部结构框图所示。
电池备份域
电池备份域由内部电源切换器来选择VDD供电或VBAT(电池)供电,然后由VBAK为备份域供电,该备份域包含RTC(实时时钟)、 LXTAL(低速外部晶体振荡器)、 BPOR(备份域上电复位)、 BREG(备份寄存器),以及PC13至PC15共3个PAD。为了确保备份域中寄存器的内容及RTC正常工作,当VDD关闭时, VBAT引脚可以连接至电池或其他电源等备份源供电。
VDD/VDDA 电源域
VDD/VDDA 域包括 VDD 域和 VDDA 域两部分。VDD 域包括 HXTAL(高速外部晶体振荡器)、LDO(电压调节器)、 POR/PDR(上电/掉电复位)、 FWDGT(独立看门狗定时器)和除 PC13、PC14和 PC15 之外的所有 PAD 等等。 VDDA 域包括 ADC/DAC( AD/DA 转换器)、 IRC8M( 内部 8MRC 振荡器)、 IRC48M( 内部 48M RC 振荡器)、 IRC40K(内部 40KHz RC 振荡器) PLLs(锁相环)和 LVD(低电压检测器)等等。
VDD 域 POR/ PDR(上电/掉电复位) 电路检测VDD/VDDA并在电压低于特定阈值时产生电源复位信号复位除备份域之外的整个芯片。 如下图上电/掉电复位波形图显示了供电电压和电源复位信号之间的关系。 VPOR表示上电复位的阈值电压, VPDR表示掉电复位的阈值电压,以GD32F303为例 ,典型值约为2.40V,典型值约为1.8V。迟滞电压Vhyst值约为600mV。
VDDA 域
LVD 的功能是检测 VDD/VDDA 供电电压是否低于低电压检测阈值,该阈值由电源控制寄存器(PMU_CTL)中的 LVDT[2:0]位进行配置。 LVD 通过 LVDEN 置位使能,位于电源状态寄存器(PMU _CS)中的 LVDF 位表示低电压事件是否出现,该事件连接至 EXTI 的第 16 线,用户可以通过配置 EXTI 的第 16 线产生相应的中断。下图LVD阈值波形图显示了 VDD/VDDA 供电电压和 LVD 输出信号的关系。( LVD 中断信号依赖于 EXTI 第 16 线的上升或下降沿配置)。
迟滞电压 Vhyst 值为 100mV。
省电模式
三种低功耗功耗模式对比表
不同系列 standby 唤醒源
11.3.硬件注意事项
1)对于没有外部电池的应用,建议将 VBAT 引脚通过 100nF 的外部陶瓷去耦电容连接到 VDD 引 脚上;
2)由于 PC13 至 PC15 引脚是通过电源切换器供电的,电源切换器仅可通过小电流,因此当 PC13 至 PC15 的 GPIO 口在输出模式时, 其工作的速度不能超过 2MHz(最大负载为 30pF)。
3)如果 VDDA 和 VDD 不同时,VDDA 须高于 VDD,但压差不超过 0.2V。
VBAT 参考电路
11.4.软件配置说明
PMU 以低功耗模板配置为例来说明
Demo 一 ( Deepsleep 模式)
demo 功能说明:
MCU 上电启动后,LED 灯闪烁 5 次,进入深度睡眠模式,通过按键来唤醒,LED 灯继续闪烁 5次又进入深度睡眠。
软件配置步骤如下:
1)开启 PMU 时钟
rcu_periph_clock_enable(RCU_PMU);
2)配置 LED 灯
void led_config(void)
{
gd_eval_led_init(LED1);
gd_eval_led_init(LED2);
gd_eval_led_init(LED3);
gd_eval_led_init(LED4);
}
3)配置唤醒按键 PC13
void gd_eval_key_init(void)                                                                                                              //配置唤醒按键
{
rcu_periph_clock_enable(RCU_GPIOC);                                                                                    //配置 GPIOC  的时钟
rcu_periph_clock_enable(RCU_AF);                                                                                          //开启复用时钟
gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_13);//配置 GPIO PC13 为浮空输入模式
nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U);                                                                      //配置中断向量、抢占优先级、主优先 级
gpio_exti_source_select(GPIO_EVENT_PORT_GPIOC, GPIO_EVENT_PIN_13);             //配置外部中断源 PC13
exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);                                        //配置外部中断 13 线 、下降沿触发
exti_interrupt_flag_clear(EXTI_13);                                                                                  //清空外部中断 13 线的中断标志
}
4)进入低功耗模式函数
pmu_to_deepsleepmode(PMU_LDO_NORMAL,WFI_CMD);
5)按键外部触发中断服务函数
void EXTI10_15_IRQHandler(void)
{
if (RESET != exti_interrupt_flag_get(EXTI_13)) //判断是否为 13 号中断线
{
exti_interrupt_flag_clear(EXTI_13); //清空标志
}
}
6)唤醒后重新配置 PLL 系统时钟
void systemclk_from_deepsleep(void) // deepsleep 唤醒后系统时钟从内部时钟切换到 PLL 时钟
{
RCU_CTL |= RCU_CTL_PLLEN; //使能 PLL
while(0U == (uint32_t)(RCU_CTL & RCU_CTL_PLLSTB)) //等待 PLL 稳定
{
}
RCU_CFG0 &= ~RCU_CFG0_SCS;
RCU_CFG0 |= RCU_CKSYSSRC_PLL;
while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ //选择 PLL 为系统时钟
}
}
11.5.PMU 使用注意事项
(1)深度睡眠模式 只要是外部中断就能唤醒;
(2)从深度睡眠模式唤醒后,PLL 是没有被使能,唤醒后需要配置 PLL,不然 MCU 系统时钟就是内部时钟;
(3)进入 deepsleep 低功耗模式后,将未使用到的 IO 配置成模拟输入模式,以降低芯片整体功耗。
教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

190

帖子

10

粉丝