YTM32 MCU的电源管理体系中,按照功耗从高向低排列,包括:正常模式(Normal/Active)、休眠模式(Sleep)、深度休眠模式(DeepSleep)、待机模式(StandBy)及掉电模式(PowerDown)。
通过阅POWER_SYS_SwitchToLowPowerMode函数可以知道,切换功耗模式都是首先对SCB_SCR寄存器进行配置,然后对PCU->CTRL里面的PCU_CTRL_RPMEN_MASK和PCU_CTRL_STANDBYEN_MASK进行相应的配置来进入对应的功耗模式
其中SleepOnExit——从中断服务例程返回后立即睡眠。
- 当 SLEEPONEXIT 被设置为 1 时,处理器在退出异常处理程序后会自动进入睡眠模式。
- 当 SLEEPONEXIT 被清除为 0 时,处理器退出异常处理程序后不会进入睡眠模式。
这样一来,处理器的所有工作就只是响应中断了,其它时间都在睡眠。在真实的应用程序里,通常只有在程序很简单的电池供电设备中,才会用此功能。如欲使用此特性,需要把系统控制寄存器中的 SLEEPONEXIT 置位。
五种功耗模式的特征
正常模式(Normal)
供电状态:高压调压器全功率工作,所有外设模块(除WKU等专用于低功耗模式的模块外)均可正常供电。
时钟状态:系统总线时钟、外设时钟均正常开启。
唤醒能力:无休眠,上电复位后默认状态。
数据保留:所有内存和寄存器保持完整。休眠模式(Sleep)
供电状态:仅关闭CPU时钟,内核部分模块(如NVIC)保持工作,外设供电与Normal模式相同。
时钟状态:系统总线时钟暂停,外设时钟可保持运行(若配置独立时钟源)。
唤醒能力:通过NVIC响应中断/事件唤醒(无需复位)。
数据保留:全内存和寄存器保持。深度休眠模式(DeepSleep)
供电状态:关闭系统总线时钟和NVIC,但高压调压器仍工作。
时钟状态:仅异步时钟(如RTC、LPUART时钟)可驱动特定外设。
唤醒能力:异步外设中断唤醒至Normal模式。
数据保留:全内存和寄存器保持。待机模式(StandBy)
供电状态:改用低压调压器供电,关闭高压调压器,需禁用LVD(否则触发复位)。
时钟状态:与DeepSleep相同,依赖异步时钟。
唤醒能力:唤醒方式同DeepSleep。
数据保留:内存和寄存器保持状态(需低压调压器支持)。掉电模式(PowerDown)
供电状态:仅WKU/PCU/低速时钟供电,内存和寄存器数据丢失。
时钟状态:仅保留极低速时钟(如32kHz RTC)。
唤醒能力:只能通过WKU唤醒,唤醒后系统复位。
数据保留:仅WKU/PCU相关寄存器保留。
关键差异对比表
模式 | 供电调压器 | 数据保留能力 | 唤醒后状态 |
---|---|---|---|
Normal | 高压调压器 | 完全保留 | 持续运行 |
Sleep | 高压调压器 | 完全保留 | 中断恢复现场 |
DeepSleep | 高压调压器 | 完全保留 | 中断恢复现场 |
StandBy | 低压调压器 | 完全保留 | 中断恢复现场 |
PowerDown | 仅最低供电 | 数据丢失 | 系统复位 |
云途MD ARM Cortex-M33参考手册中关于功耗模式的介绍
下面表格是外设在各个功耗模式下的工作状态,外设模块是否能在某个低功耗下继续工作依赖于两个条件
- 相关电路的调压器保持供电
- 依赖的时钟源仍在继续工作
通常这类模块也会作为唤醒源,由硬件电路监测到特定事件后唤醒CPU。
低功耗模式中的唤醒源
• 在Powerdown以上的模式都可以用NVIC的中断唤醒,可以原地唤醒(恢复工作)
• 在Powerdown模式中必须使用 WKU 模块作为唤醒源, 以异步唤醒源触发唤醒,并且唤醒后直接复位,而不是原地唤醒。WKU在非Powerdown模式下不工作。
• WKU唤醒电源模块
• WKU可以使用最多16个指定的引脚作为唤醒源。 这些引脚事件可以被配置为上升沿、 下降沿或者通知检测二者, 并可配置滤波器可以提高抗干扰性。配置见 WKU PCR 寄存器
各个模式的唤醒方式可以通过查表得知
如果要判断HA的ADC能不能唤醒deepsleep模式,需要哪些信息呢
通过查表Power Mode ADC在deepsleep模式下具有全部功能(FF:Full Function )
再通过Wake-up Sources表,得知ADC能作为deepsleep模式下面的唤醒源
此外还需要将ADC的时钟源设置为能在deepsleep模式下工作的,比如外部高速晶振,同样的,在YCT工具中使能FXOSC在deepsleep工作。
然后将ADC->CFG0里面的LPEN位置位,使ADC在低功耗下保持工作