本帖最后由 lzh12a3nf 于 2023-8-1 22:57 编辑
1.PMU模块简介
PMU,全程是Power Management Unit,即电源管理单元。它负责管理和控制设备的电源。通过PMU模块,APM32F4xx可以实现多种低功耗模式,包括待机模式、停机模式以及睡眠模式等。这些模式是的使得设备能够在完全关闭或最小功耗状态下运行,以节约能源并延长电池寿命。
2. 低功耗模式简介
在系统或者电源复位后,微控制器默认处于Run模式。但当CPU不需要保持运行状态时,可以使用低功耗模式来节省电源。而在切换低功耗模式的过程中,涉及到两个关键的内核命令__WFI和__WFE,将通过下面的章节进行介绍。 在低功耗模式中,其分为睡眠模式和深度睡眠模式;其中,在睡眠模式中,内核的工作是停止的,外设的工作是正常运行的。在深度睡眠模式中,其分为停止模式和待机模式。在停止模式中,所有时钟均为停止状态;在待机模式中,内核区域处于掉电状态。如下图: 3.__WFI和__WFE简介
WFI(Wait For Interrupt) 和 WFE(Wait For Event)是在ARM架构中的两个低功耗模式指令。它们主要作用便是让ARM核进入lower-power standby state模式。 3.1 __WFI和__WFE的异同点 1、让内核进入lower-power standby state模式,其中,中断和事件均可以唤醒内核。
1、对于__WFI来说,执行该内核命令之后,内核会立刻进入lower-power standby state模式,直到有WFI Wakeup event唤醒事件的发生。 2、对于__WFE来说,执行该内核命令之后,不会立刻进入lower-power standby state,会先检查事件锁存器。如果事件锁存器为0,则立刻进入lower-power standby state,并等待WFE Wakeup event唤醒事件的发生;如果为1,该指令会清除事件锁存器,并执行完成。如下图: 3.2 __WFI和__WFE的运用 通过上面的介绍,本文将基于睡眠模式下,将分别对__WFI和__WFE指令进行运用。 首先,我们来看下面的表格。对睡眠模式,如何通过调用__WFI和__WFE的指令进入和退出睡眠模式进行介绍。 对于上面的表格,可知,当我们想要进入睡眠模式,可以分别调用__WFI和__WFE指令进入。当进入睡眠模式后,只关闭了内核时钟,对于其他的外设没有影响,因此,本文运用按键,设置外部信号的触发方式来完成此次实验。
3.基于APM32F4xx实现PMU_Sleep关键代码详解
本文中,使用按键通过使能EINT线,分别从不同的命令中唤醒设备。接下来,
(1)__WFI
通过配置按键1作为EINT线作为唤醒,接着调用__WFI内核命令进入睡眠模式。 其中,在APM_MINI_PBInit函数中,设置按键允许中断请求,并使能对应外设中断线(在NVIC中使能)。当按下按键1后,外部中断线便会产生和配置一致的边沿,产生中断请求,从而唤醒设备。
(2)__WFE 通过配置按键1作为EINT线作为唤醒,接着调用__WFE内核命令进入睡眠模式。
其中,APM_MINI_PBInit函数中,使能EINT线为事件模式,当按键1按下后,外部事件线会产生和配置一直的边沿时,产生1个事件请求脉冲,唤醒内核。 4.基于APM32F4xx的应用案例
上述关于APM32F4 Demo的代码附件,供大家参考。
如有问题,也请大家多多提出,谢谢!
|