mcpField
L
low-power-embedded

low-power-embedded

github.com/mohitmishra786开发269311 次安装18 周前更新
代码仓库

关于 low-power-embedded

面向嵌入式开发 Agent 的低功耗固件指导,涵盖 MCU 睡眠模式、唤醒源、时钟门控和电流测量,并提供 STM32 相关实践。

主要功能

  1. 01比较 Sleep、Stop 和 Standby 模式
  2. 02配置 Cortex-M 的 WFI/WFE 睡眠
  3. 03设置 EXTI、RTC 等唤醒源
  4. 04检查外设时钟与低功耗状态
  5. 05测量电流并排查唤醒问题

适用场景

  1. 01为电池供电固件降低功耗
  2. 02权衡唤醒延迟与电流消耗
  3. 03排查睡眠后无法唤醒的问题
  4. 04在发布前检查 RTOS 空闲睡眠

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill low-power-embedded

安装后在 Claude Code 中输入/low-power-embedded确认已加载。

详细介绍

低功耗嵌入式系统

用途

指导 Agent 使用 MCU 低功耗模式:休眠与深度休眠(停止/待机)、外设和总线时钟门控、唤醒源配置以及实用的电流测量,并提供 Cortex-M WFI/WFE 和厂商 PWR 示例(以 STM32 为主的模式也适用于其他平台)。

适用场景

  • 电池供电固件未达到功耗预算
  • 权衡唤醒延迟与功耗
  • 调试“设备无法唤醒”或“休眠时电流仍有数 mA”
  • 发布 RTOS 空闲钩子或裸机主循环休眠前
  • 与 skills/baremetal/interrupts-and-exceptions-baremetal 交叉引用

工作流

1. 电源模式层级(STM32 风格)
模式CPU外设RAM唤醒源相对电流
运行开开开—最高
休眠关开开任意 IRQ中等
停止关大多数关闭开EXTI、RTC、UART低
待机关关丢失*WKUP 引脚、RTC最低

* 待机会清除大部分 SRAM;状态请存入备份域或外部 EEPROM。

2. 进入休眠(WFI)
/* Cortex-M — sleep until interrupt */
__disable_irq();
/* configure wake source (e.g. EXTI, RTC alarm) */
__enable_irq();
__WFI(); /* or __WFE() for event-based wake */

在执行 WFI 前,确保已清除待处理中断,否则可能立即唤醒。

3. STM32 停止模式模式
#include "stm32f4xx.h"

void enter_stop_mode(void)
{
    /* Gate clocks you do not need */
    RCC->AHB1ENR &= ~RCC_AHB1ENR_GPIOAEN; /* example — only if safe */

    PWR->CR |= PWR_CR_CWUF;   /* clear wake flags */
    PWR->CR |= PWR_CR_PDDS;   /* deep sleep = Stop */
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

    __WFI();

    /* After wake: re-enable HSE/PLL — clocks lost in Stop on many parts */
    SystemInit();
}

退出停止模式后,重新初始化寄存器已丢失的时钟和外设。

4. 时钟门控检查清单
Before sleep
├── Disable unused peripheral clocks (RCC xENR)
├── Disable ADC/DAC continuous modes
├── Stop DMA channels
├── Enter peripheral low-power (UART mute, SPI off)
└── Configure lowest viable regulator scale (Voltage Scale 2/3)
5. 唤醒源
来源配置
EXTI GPIOSYSCFG + EXTI IMR,边沿触发
RTC 闹钟RTC WUT/WAKEUP
UART起始位检测(部分 MCU)
IWDG不是唤醒源——会复位设备
6. 测量技巧
  • 将电流表串联到 VDDA/VDD;使用较短的采样窗口测量 uA
  • 使用 DWT 周期计数器对唤醒延迟进行基准测试
  • 记录并确保运行与休眠电流的对比采用相同的时钟树
7. RTOS 说明

FreeRTOS 的 configUSE_TICKLESS_IDLE 会映射到 WFI/停止模式——请与 skills/embedded/freertos 协调。

8. Agent 用法
/low-power-embedded Configure STM32 Stop mode with EXTI0 wake and PLL restore

常见问题

症状原因修复方法
“休眠”时电流仍有数 mA调试接口(SWD)仍处于活动状态断开调试器;禁用 DBGMCU
执行 WFI 后立即唤醒NVIC IRQ 仍待处理执行 WFI 前清除标志
唤醒后状态丢失进入了待机模式,而非停止模式若 RAM 必须保留,请使用停止模式
唤醒后 UART 无法工作时钟树未恢复调用 SystemInit() 路径
电流高于数据手册标示的 uAGPIO 悬空将未使用的引脚设为模拟模式或配置上拉

相关技能

  • skills/baremetal/interrupts-and-exceptions-baremetal — EXTI 唤醒 IRQ
  • skills/baremetal/gpio-baremetal — 用于控制漏电的引脚模式
  • skills/baremetal/stm32-baremetal — RCC 和 PWR 寄存器
  • skills/baremetal/timers-pwm-baremetal — 休眠前停止定时器
  • skills/embedded/freertos — Tickless 空闲集成

评论

支持 Markdown