登录/注册

STM32 L 低功耗 设置

STM32 L 低功耗 设置

更多

好的,以下是针对 STM32L 系列(低功耗系列)设置低功耗模式的核心要点和步骤的中文指南:

? 核心思路

  1. 选择合适的低功耗模式: STM32L 提供了多种模式,功耗越低,唤醒源越少,唤醒后的恢复时间越长。
  2. 关闭不需要的功能和外设: 时钟、外设、GPIO引脚等在进入低功耗前应妥善配置。
  3. 优化时钟系统: 降低时钟频率、使用低功耗时钟源(LSI, LSE, MSI)是降低功耗的关键。
  4. 配置唤醒源: 确保有合适的机制(外部中断、RTC闹钟、特定事件等)能将MCU从低功耗模式唤醒。

? 主要低功耗模式概述 (功耗水平:运行 > 睡眠 > 低功耗运行 > 低功耗睡眠 > 停机 > 待机)

  1. 睡眠模式 (Sleep Mode):

    • 仅内核停止,外设仍运行(如果时钟开启)。
    • 进入: 执行 WFI (等待中断) 或 WFE (等待事件) 指令。
    • 唤醒: 任何中断(NVIC)或事件(WFE)。
    • 特点: 功耗较低,唤醒速度快。
  2. 低功耗睡眠模式 (Low-power Sleep Mode):

    • 在睡眠模式基础上,进一步关闭部分高速时钟域(如 HCLK, PCLK1, PCLK2),只保留必要的低速时钟(如 LSI/LSE 给 RTC/WDG)。
    • 进入: 配置 SLEEPDEEP = 0 (Cortex-M 系统控制寄存器) 并在进入睡眠前配置时钟树只保留低频时钟源。
    • 唤醒: WF⁠I/W⁠F⁠E。
    • 特点: 功耗比普通睡眠更低,唤醒速度稍慢于普通睡眠。
  3. 停机模式 (Stop Mode):

    • 所有时钟停止(H⁠S⁠I, HSE, PLL, MSI 均关闭),内核和外设(除少数低功耗外设)停止工作。SRAM 和寄存器内容保留。
    • 进入: 配置 SLEEPDEEP = 1PDDS = 0 (电源控制寄存器 PWR_CR),然后执行 WFI/WFE。
    • 唤醒: 特定的外部中断引脚 (EXTI line,需配置为中断模式)、RTC 闹钟/事件、IWDG 复位、某些特定外设事件(取决于型号)。
    • 特点: 功耗非常低(微安级别),唤醒时间比睡眠模式长(需要恢复时钟)。
    • 电压调节器: 可选择主调节器 (MR) 或低功耗调节器 (LPR)。LPR 功耗更低但唤醒时间更长。
  4. 待机模式 (Standby Mode):

    • 功耗最低的模式。关闭所有时钟(包括MSI、LSI/LSE给RTC/WDG的除外),电压调节器断电(内核供电域完全掉电)。SRAM 和寄存器内容丢失(备份域寄存器除外)。
    • 进入: 配置 SLEEPDEEP = 1PDDS = 1 (PWR_CR),然后执行 WFI/WFE。还可配置 FWU (快速唤醒) 和 ULP (超低功耗)。
    • 唤醒: 特定的唤醒引脚 (W⁠K⁠U⁠P pin, 上升沿)、RTC 闹钟/事件、IWDG 复位、NRST 引脚复位。
    • 特点: 功耗极低(通常亚微安级别)。唤醒后相当于复位(从头执行程序),需检测复位源标志位 (PWR_CSR 寄存器) 判断是否从待机唤醒。
  5. 关机模式 (Shutdown Mode) (部分STM32L4/L4+等):

    • 比待机模式功耗更低。仅备份域(RTC, 备份寄存器)由 VBAT 供电(如果可用)。
    • 进入: 类似待机模式,进入更深层次的断电状态。
    • 唤醒: 通常只有特定的唤醒引脚或 RTC 闹钟。
    • 特点: 极低功耗(典型值可低至几十纳安),唤醒源非常有限。

? 设置低功耗模式的一般步骤 (以停机模式为例)

  1. 初始化 & 配置 (进入前):

    • 配置系统时钟: 优先使用内部低速时钟(MSI, LSI)或外部低速晶振(LSE)给RTC等必要外设。在进入停机前,通常会降低主频或切换到低速时钟源。
    • 配置外设:
      • 关闭所有不需要的外设时钟(使用 __HAL_RCC_xxx_CLK_DISABLE() 或 LL 库函数)。
      • 停止所有不需要的外设(如 ADC, TIMER, UART 等)。
      • 处理GPIO引脚:将未使用的引脚配置为模拟输入(功耗最低且防悬空)。对于需要唤醒功能的引脚,配置为外部中断 (EXTI) 模式,并启用中断。
    • 配置RTC (如果需要定时唤醒): 启用 LSE/LSI 作为时钟源,配置闹钟 (RTC_ALARM) 或唤醒定时器 (RTC_WAKEUPTIMER)。
    • 配置唤醒源 (EXTI): 启用所需唤醒引脚对应的 EXTI 线,并配置触发边沿(上升沿、下降沿或双边沿)。
    • 配置低功耗模式选项:
      • PWR 控制寄存器 (PWR_CR) 中:
        • 设置电压调节器模式 (MR 或 LPR - LPDS 位)。
        • 启用或禁用唤醒引脚 (EWUPx 位)。
      • 在 Cortex-M 系统控制寄存器 (SCB->SCR) 中:
        • 设置 SLEEPDEEP 位为 1 (表示进入深度睡眠 Stop/Standby)。
        • 设置 SLEEPONEXIT 位 (可选,中断处理完后自动进入低功耗)。
    • 清除可能的唤醒标志: 读取并清除 PWR_CR 中的唤醒标志位 (WUF)。
  2. 进入低功耗模式:

    // 确保所有挂起操作完成(如 DMA 传输)
    // 清除唤醒标志(如果需要)
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // HAL 库
    // 执行 WFI 或 WFE 指令进入停机模式
    __WFI(); // 等待中断唤醒
    // 或 __WFE(); // 等待事件唤醒
  3. 唤醒后的处理:

    • MCU 从停机模式唤醒后,首先会复位时钟系统(HSI 作为默认系统时钟)。
    • 检查唤醒源: 读取 PWR->CSR (或 PWR_EXTSCR 在某些系列) 中的唤醒标志位 (WUFx, SBF, WUF 等) 来确定是什么事件唤醒了 MCU。
    • 重新初始化系统: 根据应用需求重新配置系统时钟(恢复到工作频率)、外设、GPIO 等。这是最关键的一步! 不要假设唤醒后时钟和外设配置还保留(它们通常恢复到默认或复位状态)。
    • 处理唤醒事件: 根据检测到的唤醒源执行相应的操作(如读取传感器、发送数据、执行任务)。
    • 清除唤醒标志: 在重新配置或处理完事件后,清除相应的唤醒标志位。

? 关键配置与注意事项

✅ 实用代码片段 (伪代码/HAL风格)

// 假设使用停机模式,WKUP1 (PA0) 作为唤醒源,RTC 闹钟作为另一唤醒源
// 1. 初始化 (通常在 main 初始化部分)
MX_GPIO_Init(); // GPIO 配置中 PA0 配置为 EXTI 唤醒源
MX_RTC_Init();  // RTC 配置开启,启用闹钟
MX_PWR_Init();  // PWR 配置:电压调节器选 LPR,启用 WKUP1 引脚等

// 主循环或任务中
while (1) {
    // ... 执行主任务 ...

    // 准备进入停机
    HAL_SuspendTick(); // 挂起 SysTick 中断避免在唤醒前触发
    HAL_PWREx_EnableFlashPowerDown(); // 启用Flash掉电 (可选,进一步省电)
    HAL_ADC_Stop(&hadc1);           // 停止所有运行中的外设
    HAL_UART_Abort(&huart1);
    // ... 关闭其他外设时钟 (使用 __HAL_RCC_xxx_CLK_DISABLE()) ...

    // 配置未使用GPIO为Analog以省电 (根据具体情况)
    // ... GPIO配置代码 ...

    // 进入停机模式
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

    // ****** MCU 在此处进入停机 ******
    // ****** 唤醒后从这里继续执行 ******

    // 退出停机后的处理
    HAL_PWREx_DisableFlashPowerDown(); // 恢复Flash
    SystemClock_Config(); // !!!绝对关键!!! 重新配置系统时钟(唤醒后默认是HSI)
    HAL_ResumeTick();     // 恢复 SysTick

    // 检查唤醒源 (可选)
    if (__HAL_PWR_GET_FLAG(PWR_FLAG_WU) != RESET) { // 唤醒(W⁠K⁠U⁠P) 引脚唤醒标志
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
        // 处理 WKUP 唤醒事件
    }
    if (__HAL_RTC_GET_FLAG(&hrtc, RTC_FLAG_ALRAF) != RESET) { // RTC闹钟唤醒标志
        __HAL_RTC_CLEAR_FLAG(&hrtc, RTC_FLAG_ALRAF);
        // 处理 RTC 闹钟唤醒事件
        HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN); // 重新设置下一次闹钟
    }

    // 重新初始化所需外设 (因为时钟可能变了)
    MX_USART1_UART_Init();
    MX_ADC1_Init();
    // ... 其他外设初始化 ...
}

通过遵循这些指南、选择合适的模式、仔细配置时钟、外设和唤醒源,并特别注意唤醒后的时钟恢复,你就能有效地利用 STM32L 系列强大的低功耗特性来延长电池供电设备的续航时间。祝你开发顺利!??

STM32L151xC与STM32L152xC:超低功耗MCU的卓越之选

STM32L151xC与STM32L152xC:超低功耗MCU的卓越之选 在当今的电子设计领域,超

2026-03-11 16:30:09

stm32低功耗设计技巧

多个系列和型号可供选择,其中一些专门设计用于低功耗应用。 例如,STM32L系列芯片采用超低泄漏工艺,具有领先的处理性能和代码密度,以及多个动态可选电压范围,可在能耗上提供显著增益。 优化电源管理 : 使用多个独立的

2024-11-19 15:52:19

stm32f030K4t6 低功耗设置

低功耗是微控制器设计中非常重要的一个方面,尤其对于像STM32F030K4T6这样的微控制器来说,低功耗

2024-01-04 10:41:51

STM32HAL低功耗时也能调试设置,调试模式独立看门狗可被冻结L151

STM32HAL低功耗时也能调试设置,调试模式独立看门狗可被冻结L151

资料下载 山中老虎 2021-12-07 20:36:10

stm32L151低功耗心得

stm32L151低功耗心得前言STM32低功耗的三种模式

资料下载 佚名 2021-12-04 11:36:13

低功耗研发-STM32L151C8T6芯片(五)低功耗设计总结

超低功耗研发-STM32L151C8T6芯片(一)时钟系统概述超低功耗研发-STM32

资料下载 张燕 2021-11-06 14:36:01

STM32L476xx超低功耗手臂设计方案

STM32L476xx超低功耗手臂设计方案

资料下载 李宏阳 2021-03-10 10:27:44

STM32L151XX和STM32L152XX超低功耗32位MCU Cortex的数据手册免费下载

本文档的主要内容详细介绍的是STM32L151XX和STM32L152XX超低功耗32位MCU Cortex的数据手册免费下载。

资料下载 择持ccc 2020-01-14 08:00:00

STM32L4产品的低功耗特性及应用

包含了• ST低功耗MCU产品介绍• STM32L4 低功耗产品特性• STM32L

2023-09-07 08:12:41

STM32L4系列各种低功耗模式的特性是什么?

STM32具有哪几种低功耗模式?STM32L4系列各种低功耗模式的特性是

2022-02-23 07:41:48

STM32低功耗专用管脚唤醒介绍

STM32 低功耗专用管脚唤醒 (EWUP)1. 介绍STM32具有多种低功耗

2022-02-23 07:11:26

STM32L475低功耗实例分享

1.项目背景MCU:STM32L475外部AD:ADS1220外部RTC:DS3231扩展Flash:sst25vf016b外部SDUSB温湿度计4852.目标MCU运行在低功耗模式,每1小时读取

2022-02-11 07:17:10

stm32L151C8T6的低功耗模式简述

一、最近在搞stm32L151C8T6的低功耗模式。项目场景:提示:这里简述项目相关背景:LoRa低功耗,用到

2021-12-10 07:44:51

STM32L0低功耗应用

文章目录STM32L0低功耗应用1.睡眠模式2.低功耗运行模式3.低功耗

2021-12-02 06:31:06

STM32L053C8 MCU上的低功耗模式详解

知道可用的低功耗模式,如何配置它们以及最适合哪些任务。本文概述了STM32L053C8 MCU上的低功耗模式。但是,由于该系列的

2020-11-09 15:23:20

7天热门专题 换一换
相关标签