[其他ST产品] 低功耗模式选择与唤醒源优化

[复制链接]
417|11
xiyaoko2365 发表于 2025-11-30 22:02 | 显示全部楼层 |阅读模式
STM32G0 低功耗模式选型
避免使用深度休眠(如 STANDBY 模式),优先选择STOP 1 模式(保留 SRAM 和外设寄存器),唤醒后无需重新初始化 I2C 和 RAM 数据,缩短恢复时间:
c
运行
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); // STOP 1模式
唤醒源触发方式
若通过按键唤醒,确保按键中断触发后先恢复系统时钟(如从 MSI 切换到 HSE),再初始化 I2C,避免时钟频率不足导致 I2C 速率异常:
c
运行
void EXTI0_IRQHandler(void) {
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
    SystemClock_Config(); // 恢复系统时钟
    WakeUp_I2C_Init();    // 初始化I2C
}

公羊子丹 发表于 2025-12-1 08:19 | 显示全部楼层
我之前在 G0 上也避开了 STANDBY,主要是太多外设状态会丢,唤醒后全套重来太费时间。STOP1 的平衡点确实不错,你可以再看看是不是能把部分 GPIO 保持模式也打开。
周半梅 发表于 2025-12-1 08:22 | 显示全部楼层
你唤醒后重新配置时钟这一点很关键,我以前调车规 I2C 的时候就是忘了切回主时钟,结果 I2C 跑到几十 KHz,SE 芯片直接不理。建议在唤醒流程里加个时钟检测。
帛灿灿 发表于 2025-12-1 08:23 | 显示全部楼层
如果你的应用对响应时间特别敏感,建议把唤醒源用成 EXTI + LPUART 组合,这样外围设备来的数据也能直接拉 MCU 起床。我试过一次,功耗几乎没怎么涨。
帛灿灿 发表于 2025-12-1 08:25 | 显示全部楼层
STOP1 模式有个小坑,你要注意调试模式下功耗会差很多。有时候你在 IDE 里测出来不错,实际掉电运行就完全不是那个数了。最好用实际电源去量。
万图 发表于 2025-12-1 08:26 | 显示全部楼层
按键唤醒的话,记得给按键做个硬件去抖。之前同事没做,结果 MCU 动不动被触发唤醒,最后以为是代码问题,排查半天才发现是按键本身震荡。
Wordsworth 发表于 2025-12-1 08:27 | 显示全部楼层
你有试过让 I2C 用 wake-up 功能吗?有些 G0 的 I2C 支持 STOP 模式下自动唤醒,这样你可能连中断都不需要,省得写一堆唤醒代码。
Bblythe 发表于 2025-12-1 08:27 | 显示全部楼层
我建议你把 STOP 和 RUN 模式的切换时间实际测一下,有时候你以为恢复很快,但内部电源稳压器切换其实也要几百微秒,不同批次芯片差异还挺大。
Pulitzer 发表于 2025-12-1 08:28 | 显示全部楼层
钟恢复那块你最好检查一下 Flash wait state,尤其是切到 HSE 后跑高频的时候,如果 wait state 没配好,会随机 HardFault,调起来很烦。
Uriah 发表于 2025-12-1 08:29 | 显示全部楼层
如果对功耗要求特别极限,你可以考虑用 STOP2 模式,然后把必要的寄存器通过 backup 寄存器保存。我用在 L0 上效果不错,G0 也类似。
Clyde011 发表于 2025-12-1 08:30 | 显示全部楼层
还有一点,唤醒后 I2C 初始化顺序一定要在 GPIO 配好之后,我以前就是顺序写反了,导致 SDA/SCL 处于开漏状态时电平不稳,偶发性掉帧,查了挺久才定位。
幸福小强 发表于 2025-12-7 16:44 | 显示全部楼层
避免使用深度休眠(如 STANDBY 模式),优先选择STOP 1 模式(保留 SRAM 和外设寄存器),唤醒后无需重新初始化 I2C 和 RAM 数据,缩短恢复时间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

644

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0