keer_zu 发表于 2025-8-12 09:31

STM32L051 的低功耗等级(功耗模式)

<p>STM32L051 的低功耗等级(功耗模式)及其对应的状态机模型。STM32L051 属于 STM32L0 系列,是 STMicroelectronics 专为超低功耗应用设计的微控制器,其功耗模式设计非常精细,以满足不同应用场景对功耗和唤醒速度/状态保持的需求。</p>
<p><strong>核心低功耗模式概览:</strong></p>
<p>STM32L051 主要提供以下功耗模式,按功耗从高到低排列:</p>
<ol>
<li><strong>运行模式 (Run Mode)</strong></li>
<li><strong>低功耗运行模式 (Low-Power Run Mode - LPRun)</strong></li>
<li><strong>睡眠模式 (Sleep Mode)</strong></li>
<li><strong>低功耗睡眠模式 (Low-Power Sleep Mode - LPSleep)</strong></li>
<li><strong>停机模式 (Stop Mode)</strong></li>
<li><strong>待机模式 (Standby Mode)</strong></li>
<li><strong>关机模式 (Shutdown Mode)</strong></li>
</ol>
<p><strong>状态机模型:</strong></p>
<p>下图描述了这些模式之间的转换关系以及主要的进入/退出条件:</p>
<pre><code>+-----------------------------------------------------------------------+
|                               运行模式 (Run)                        |
|(Core: On, Periph: On, Clocks: HSI/MSI/HSE/PLL, Regs/RAM: Keep)   |
|(Highest Power Consumption)                                       |
+-----------------------------------------------------------------------+
       | WFI/WFE/SLEEPONEXIT
       | OR LPR bit set &amp; MSI as sysclk &amp; Vcore Range 2
       v
+----------------------+       +----------------------+
|   睡眠模式 (Sleep)|&lt;-----&gt;| 低功耗睡眠模式 (LPSleep) |
| (Core: Off,          |       | (Core: Off,          |
|Periph: On,         |       |Periph: On,         |
|Clocks: SysClk On,|       |Clocks: SysClk Off, |
|Regs/RAM: Keep)   |       |LSE/LSI/MSI On*,    |
|                      |       |Regs/RAM: Keep)   |
+----------------------+       +----------------------+
       | WFI/WFE/SLEEPONEXIT
       | OR Enter Stop via PWR_CR
       v
+-----------------------------------------------------------------------+
|                               停机模式 (Stop)                         |
|(Core: Off, Periph: Off (SRAM/Regs Keep), Clocks: Off (LSE/LSI/MSI*) |
|(Low Power Consumption, Fast Wakeup, Full Context Retention)         |
+-----------------------------------------------------------------------+
       | WFI/WFE/SLEEPONEXIT
       | OR Enter Standby via PWR_CR
       v
+-----------------------------------------------------------------------+
|                               待机模式 (Standby)                      |
|(Core: Off, Periph: Off, Clocks: Off (LSI/LSE On* for RTC/WKUP),   |
|   SRAM/Regs: Lost (Except Backup Domain), IOs: High-Z or Analog)      |
|(Very Low Power Consumption, Reset-like Wakeup)                      |
+-----------------------------------------------------------------------+
       | Enter Shutdown via PWR_CR
       v
+-----------------------------------------------------------------------+
|                               关机模式 (Shutdown)                     |
|(Core: Off, Periph: Off, Clocks: Off (LSE On* for RTC if used),      |
|   SRAM/Regs: Lost (Except Backup Domain), IOs: High-Z or Analog)      |
|(Lowest Power Consumption, Reset-like Wakeup)                        |
+-----------------------------------------------------------------------+
</code></pre>
<p><strong>箭头说明:</strong></p>
<ul>
<li><strong>垂直向下箭头 (-&gt;):</strong> 表示从高功耗模式进入低功耗模式的主要路径。通常通过执行 <code>WFI</code> (Wait For Interrupt) 或 <code>WFE</code> (Wait For Event) 指令、设置 <code>SLEEPONEXIT</code> 位、或直接配置电源控制寄存器 (<code>PWR_CR</code>) 中的相关位 (<code>LPMS</code>, <code>FWU</code>, <code>ULP</code>, <code>LPSDSR</code>, <code>PDDS</code>, <code>CWUF</code>) 来实现。</li>
<li><strong>水平双向箭头 (&lt;-&gt;):</strong> 表示 <code>睡眠模式</code> 和 <code>低功耗睡眠模式</code> 之间可以根据配置(主要是系统时钟源是否关闭)直接切换。</li>
<li><strong>唤醒事件/中断:</strong> 所有低功耗模式都可以被特定的唤醒源(外部中断、RTC 闹钟、IWDG、特定外设事件等)唤醒。唤醒后,微控制器会返回到进入低功耗模式之前的运行状态(<code>运行模式</code> 或 <code>低功耗运行模式</code>),<strong>除了</strong>:
<ul>
<li><code>待机模式</code> 和 <code>关机模式</code> 唤醒后相当于进行一次复位(从复位向量重新开始执行),SRAM 和寄存器内容丢失(备份域寄存器内容保留)。</li>
<li><code>停机模式</code> 唤醒后,程序会从进入停机模式指令 (<code>WFI/WFE</code>) 之后的下一条指令开始执行(或响应唤醒事件的中断服务程序),所有寄存器和 SRAM 内容保留。</li>
</ul>
</li>
</ul>
<hr />
<p><strong>各低功耗模式详细说明:</strong></p>
<ol>
<li>
<p><strong>运行模式 (Run Mode)</strong></p>
<ul>
<li><strong>状态:</strong> CPU 内核运行,外设可以开启(取决于配置),所有时钟(HSI, MSI, HSE, PLL)都可以使用。</li>
<li><strong>功耗:</strong> 最高。典型值取决于主频、开启的外设数量和电压调节器范围 (Range)。例如,在 16MHz (Range 1) 下运行 CoreMark 时约为 1.5mA,在 2MHz (Range 2) 下运行约为 230μA。</li>
<li><strong>唤醒源:</strong> 不适用(本身是活动状态)。</li>
<li><strong>唤醒时间:</strong> 不适用。</li>
<li><strong>状态保持:</strong> 所有寄存器和 SRAM 内容保持。</li>
<li><strong>进入方式:</strong> 上电复位、从任何低功耗模式唤醒(除了待机/关机唤醒相当于复位)。</li>
<li><strong>退出方式:</strong> 执行 <code>WFI</code>/<code>WFE</code> 进入睡眠;配置进入更低功耗模式;或通过软件切换时钟/电压调节器进入 <code>低功耗运行模式</code>。</li>
</ul>
</li>
<li>
<p><strong>低功耗运行模式 (Low-Power Run Mode - LPRun)</strong></p>
<ul>
<li><strong>状态:</strong> CPU 内核运行,外设可以开启(但只能使用低功耗时钟源:<strong>MSI</strong> (典型 131kHz, 262kHz 等低速档位) 或 <strong>HSI16</strong> (在分频后低频运行),<strong>不能使用 HSE 或 PLL</strong>。电压调节器必须切换到 <strong>低功耗范围 (Range 2)</strong>。</li>
<li><strong>功耗:</strong> 显著低于普通运行模式。典型值在 MSI 131kHz + Range 2 下约为 30μA (仅内核运行)。</li>
<li><strong>唤醒源:</strong> 不适用(本身是活动状态)。</li>
<li><strong>唤醒时间:</strong> 不适用。</li>
<li><strong>状态保持:</strong> 所有寄存器和 SRAM 内容保持。</li>
<li><strong>进入方式:</strong> 在 <code>运行模式</code> 下,将系统时钟切换到 MSI (低速档) 或分频后的 HSI16,并将电压调节器设置为 Range 2 (<code>PWR_CR</code> 的 <code>VOS</code> 位和 <code>LPR</code> 位)。</li>
<li><strong>退出方式:</strong> 将电压调节器切换回 Range 1 (<code>LPR=0</code>),并将系统时钟切换到 HSI/HSE/PLL 以返回普通 <code>运行模式</code>;也可以执行 <code>WFI</code>/<code>WFE</code> 进入 <code>低功耗睡眠模式</code>。</li>
</ul>
</li>
<li>
<p><strong>睡眠模式 (Sleep Mode)</strong></p>
<ul>
<li><strong>状态:</strong> <strong>CPU 内核停止运行</strong>,但<strong>系统时钟 (SYSCLK) 仍然运行</strong>。开启的外设继续工作并可以产生中断/事件来唤醒内核。</li>
<li><strong>功耗:</strong> 高于 <code>停机模式</code> 但低于 <code>运行模式</code>。取决于开启的外设数量和时钟频率。典型值在 2MHz 下约为 100μA (仅内核停止)。</li>
<li><strong>唤醒源:</strong> 任何使能的中断或事件(来自 NVIC 或外设)。</li>
<li><strong>唤醒时间:</strong> <strong>非常快</strong> (几个时钟周期)。CPU 从中断/事件发生点立即恢复执行(或响应中断)。</li>
<li><strong>状态保持:</strong> 所有寄存器和 SRAM 内容保持。</li>
<li><strong>进入方式:</strong> 执行 <code>WFI</code> 或 <code>WFE</code> 汇编指令;或设置内核寄存器 (<code>SCR</code>) 的 <code>SLEEPONEXIT</code> 位,在退出最低优先级中断后自动进入睡眠。</li>
<li><strong>退出方式:</strong> 发生使能的中断或事件。</li>
</ul>
</li>
<li>
<p><strong>低功耗睡眠模式 (Low-Power Sleep Mode - LPSleep)</strong></p>
<ul>
<li><strong>状态:</strong> <strong>CPU 内核停止运行</strong>,<strong>系统时钟 (SYSCLK) 被关闭</strong>。<strong>只有低功耗时钟源保持运行</strong>:LSE (32.768kHz 外部晶振), LSI (~37kHz 内部 RC), 或者 <strong>MSI</strong> (在低速档位,如 65.5kHz, 131kHz)。开启的外设<strong>如果依赖 SYSCLK 则停止工作</strong>,但依赖 LSE/LSI/MSI 的外设(如 LPUART, LPTIM, RTC, IWDG)可以继续工作并产生唤醒事件。</li>
<li><strong>功耗:</strong> <strong>显著低于普通睡眠模式</strong>。典型值在仅 LSI 或 LSE 运行 + SRAM 保持下约为 1.5μA - 2μA。</li>
<li><strong>唤醒源:</strong> 来自运行中的低功耗外设的事件(如 LPUART 接收、LPTIM 比较匹配、RTC 闹钟)、外部中断 (EXTI)、IWDG 复位(如果使能)等。<strong>不能响应需要 SYSCLK 的外设中断</strong>。</li>
<li><strong>唤醒时间:</strong> <strong>较快</strong>。需要重新使能系统时钟,但比 <code>停机模式</code> 唤醒可能稍快一点(因为电压调节器保持运行)。通常在微秒级。</li>
<li><strong>状态保持:</strong> 所有寄存器和 SRAM 内容保持。</li>
<li><strong>进入方式:</strong>
<ul>
<li>在 <code>睡眠模式</code> 下,关闭系统时钟 (<code>SYS_CFGR</code> 寄存器配置)。</li>
<li>在 <code>低功耗运行模式</code> 下执行 <code>WFI</code> 或 <code>WFE</code>。</li>
</ul>
</li>
<li><strong>退出方式:</strong> 发生支持的唤醒事件。系统时钟根据配置重新启动,CPU 恢复执行。</li>
</ul>
</li>
<li>
<p><strong>停机模式 (Stop Mode)</strong></p>
<ul>
<li><strong>状态:</strong> <strong>CPU 内核停止运行</strong>,<strong>所有高速时钟关闭 (HSI, HSE, PLL, MSI, SYSCLK)</strong>。<strong>核心电压调节器可以配置为保持运行 (Regulator ON) 或进入低功耗状态 (Low-Power Regulator)</strong>。<strong>只有 LSE 和 LSI 可以保持运行 (可选)</strong>,用于驱动 RTC, IWDG, LPUART, LPTIM 或作为唤醒源。<strong>所有外设时钟停止</strong>。I/O 引脚状态保持。</li>
<li><strong>功耗:</strong> <strong>非常低</strong>。典型值:
<ul>
<li><code>Regulator ON</code> + SRAM 保持 + LSI/LSE 关闭:约 1.1μA</li>
<li><code>Low-Power Regulator</code> + SRAM 保持 + LSI/LSE 关闭:约 0.4μA</li>
<li>开启 RTC/LSE:额外增加 ~1μA</li>
</ul>
</li>
<li><strong>唤醒源:</strong> 外部中断 (EXTI - 包括 RTC 闹钟事件、Tamper 事件)、特定引脚上升沿、LPTIM 异步事件、IWDG 复位(如果使能)等(依赖于保持运行的 LSE/LSI)。</li>
<li><strong>唤醒时间:</strong> <strong>快</strong> (微秒级)。因为电压调节器状态可配置为保持运行或快速恢复。程序从进入停机模式的指令 (<code>WFI/WFE</code>) 之后继续执行(或响应唤醒事件的中断)。</li>
<li><strong>状态保持:</strong> <strong>所有寄存器和 SRAM 内容保持</strong>。这是 <code>停机模式</code> 的关键优势之一。</li>
<li><strong>进入方式:</strong> 配置电源控制寄存器 (<code>PWR_CR</code>) 中的 <code>LPMS</code> 位选择 <code>Stop</code> 模式,设置 <code>LPSDSR</code> (选择 Regulator 模式),<code>FWU</code> (快速唤醒),<code>ULP</code> (超低功耗 - 关闭 Flash 电源) 等选项,然后执行 <code>WFI</code> 或 <code>WFE</code>。</li>
<li><strong>退出方式:</strong> 发生支持的唤醒事件。系统时钟根据配置重新启动(通常是 MSI),CPU 恢复执行。</li>
</ul>
</li>
<li>
<p><strong>待机模式 (Standby Mode)</strong></p>
<ul>
<li><strong>状态:</strong> <strong>电压调节器关闭 (核心电源域断电)</strong>。<strong>所有高速和低速时钟关闭 (HSI, HSE, PLL, MSI, SYSCLK, LSI, LSE - 但 LSE <em>可以</em> 被独立配置为保持运行以驱动 RTC)</strong>。<strong>SRAM 和寄存器内容丢失 (除了备份域寄存器)</strong>。<strong>大部分 I/O 引脚进入高阻态或模拟状态 (具体取决于配置)</strong>。<strong>只有备份域 (Backup Domain) 和待机电路保持供电</strong>。</li>
<li><strong>功耗:</strong> <strong>极低</strong>。典型值:
<ul>
<li>LSE 关闭:约 0.27μA</li>
<li>LSE 开启 (RTC 运行):约 0.95μA</li>
</ul>
</li>
<li><strong>唤醒源:</strong> <strong>有限</strong>:
<ul>
<li>特定的唤醒引脚 (<code>WKUPx</code>) 上升沿。</li>
<li>RTC 闹钟事件 (如果 LSE/LSI 配置为保持运行)。</li>
<li>IWDG 复位 (如果使能)。</li>
<li>NRST 引脚外部复位。</li>
</ul>
</li>
<li><strong>唤醒时间:</strong> <strong>慢</strong> (毫秒级)。唤醒过程相当于一次<strong>复位</strong>(冷启动)。程序从复位向量 (<code>0x0000_0004</code>) 重新开始执行。</li>
<li><strong>状态保持:</strong> <strong>仅备份域寄存器 (RTC, Backup SRAM, Tamper 配置等) 内容保持</strong>。主 SRAM 和所有通用寄存器内容丢失。</li>
<li><strong>进入方式:</strong> 配置 <code>PWR_CR</code> 中的 <code>PDDS</code> 位选择 <code>Standby</code> 模式,设置 <code>CWUF</code> (清除唤醒标志),配置 <code>PWR_CSR</code> 中的 <code>EWUPx</code> 位使能唤醒引脚,然后执行 <code>WFI</code> 或 <code>WFE</code>;或设置 <code>SLEEPDEEP</code> 位 + <code>PDDS</code> + <code>WFI/WFE</code>。</li>
<li><strong>退出方式:</strong> 发生支持的唤醒事件或复位。系统执行完整的复位初始化流程。</li>
</ul>
</li>
<li>
<p><strong>关机模式 (Shutdown Mode)</strong></p>
<ul>
<li><strong>状态:</strong> <strong>电压调节器关闭 (核心电源域断电)</strong>。<strong>所有时钟关闭 (包括 LSE 和 LSI - 但 LSE <em>可以</em> 被独立配置为保持运行以驱动 RTC)</strong>。<strong>SRAM 和寄存器内容丢失 (除了备份域寄存器)</strong>。<strong>大部分 I/O 引脚进入高阻态或模拟状态</strong>。<strong>只有备份域 (Backup Domain) 和极低功耗的唤醒逻辑保持供电</strong>。这是 <strong>最低功耗</strong> 的模式。</li>
<li><strong>功耗:</strong> <strong>最低</strong>。典型值:
<ul>
<li>LSE 关闭:约 0.03μA</li>
<li>LSE 开启 (RTC 运行):约 0.7μA</li>
</ul>
</li>
<li><strong>唤醒源:</strong> <strong>非常有限</strong>:
<ul>
<li>特定的唤醒引脚 (<code>WKUPx</code>) 上升沿。</li>
<li>RTC 闹钟事件 (如果 LSE 配置为保持运行 - <strong>LSI 在关机模式下不能运行</strong>)。</li>
<li>NRST 引脚外部复位。</li>
</ul>
</li>
<li><strong>唤醒时间:</strong> <strong>慢</strong> (毫秒级)。唤醒过程相当于一次<strong>复位</strong>(冷启动)。程序从复位向量 (<code>0x0000_0004</code>) 重新开始执行。</li>
<li><strong>状态保持:</strong> <strong>仅备份域寄存器 (RTC, Backup SRAM, Tamper 配置等) 内容保持</strong>。主 SRAM 和所有通用寄存器内容丢失。</li>
<li><strong>进入方式:</strong> 配置 <code>PWR_CR</code> 中的 <code>LPMS</code> 位选择 <code>Shutdown</code> 模式,设置 <code>CWUF</code>,配置 <code>PWR_CSR</code> 中的 <code>EWUPx</code> 位使能唤醒引脚,然后执行 <code>WFI</code> 或 <code>WFE</code>。</li>
<li><strong>退出方式:</strong> 发生支持的唤醒事件或复位。系统执行完整的复位初始化流程。</li>
</ul>
</li>
</ol>
<p><strong>关键选择因素总结:</strong></p>
<ul>
<li><strong>需要多快唤醒?</strong> <code>睡眠</code>/<code>低功耗睡眠</code>/<code>停机</code> (快) vs <code>待机</code>/<code>关机</code> (慢/复位)。</li>
<li><strong>需要保存 RAM 和寄存器状态吗?</strong> <code>睡眠</code>/<code>低功耗睡眠</code>/<code>停机</code> (保存) vs <code>待机</code>/<code>关机</code> (丢失,仅备份域保留)。</li>
<li><strong>需要多低的功耗?</strong> <code>运行</code> (最高) -&gt; <code>LPRun</code> -&gt; <code>睡眠</code> -&gt; <code>LPSleep</code> -&gt; <code>停机</code> -&gt; <code>待机</code> -&gt; <code>关机</code> (最低)。</li>
<li><strong>唤醒源是什么?</strong> 不同模式支持的唤醒源不同 (例如,<code>待机</code>/<code>关机</code> 只能用 WKUP 引脚或 RTC 闹钟唤醒)。</li>
<li><strong>需要外设在低功耗下工作吗?</strong> <code>睡眠</code>/<code>LPRun</code> (外设可用) -&gt; <code>LPSleep</code>/<code>停机</code> (仅低功耗外设可用) -&gt; <code>待机</code>/<code>关机</code> (外设完全关闭)。</li>
</ul>
<p><strong>重要提示:</strong></p>
<ol>
<li><strong>实际功耗:</strong> 上述功耗值是典型值,在特定条件下测得(通常是 25°C, VDD=3.0V, 无负载)。实际功耗受温度、供电电压、PCB 设计、未用引脚配置(推荐配置为模拟输入或输出低)、GPIO 外部电路漏电流、开启的外设数量和频率等因素显著影响。务必根据实际电路进行测量。</li>
<li><strong>配置细节:</strong> 进入和退出每种模式,以及配置唤醒源、时钟、电压调节器、I/O 状态等,都需要仔细配置相关的寄存器 (<code>PWR</code>, <code>RCC</code>, <code>SYSCFG</code>, <code>GPIO</code>, <code>EXTI</code>, <code>NVIC</code> 等)。请务必参考 <strong>STM32L051 参考手册 (RM)</strong> 的 <strong>电源控制 (PWR)</strong> 和 <strong>复位和时钟控制 (RCC)</strong> 章节。</li>
<li><strong>调试:</strong> 调试器连接通常会阻止微控制器进入深度睡眠模式(如停机、待机、关机)。进行低功耗测试时,可能需要断开调试器,使用 GPIO 翻转或串口输出等方式辅助调试。</li>
<li><strong>BOR/PVD:</strong> 欠压复位 (BOR) 和可编程电压检测器 (PVD) 在低功耗模式下仍然工作,以保护芯片。</li>
<li><strong>Flash 存储器:</strong> 在进入某些深度睡眠模式前(尤其是 <code>待机</code>/<code>关机</code>),确保没有正在进行的关键 Flash 操作(擦除/编程)。</li>
</ol>
<p>理解这些功耗模式及其状态转换是成功设计基于 STM32L051 的超低功耗应用的关键。根据你的应用需求(唤醒频率、唤醒速度、状态保持要求、目标功耗)选择合适的模式组合。</p>
页: [1]
查看完整版本: STM32L051 的低功耗等级(功耗模式)