当前位置: 首页 > news >正文

STM32低功耗模式详解:睡眠、停机、待机模式原理与实践(下) | 零基础入门STM32第九十三步

主题内容教学目的/扩展视频
低功耗模式什么是低功耗,模式介绍,切换方法。为电池设备开发做准备。

师从洋桃电子,杜洋老师


📑文章目录

    • 一、低功耗模式基本工作原理
      • 1.1 功耗层级对比
      • 1.2 工作流程
    • 二、睡眠模式实践
      • 2.1 测试程序解析
      • 2.2 程序原理
    • 三、停机模式实践
      • 3.1 测试程序要点
      • 3.2 关键配置
    • 四、待机模式实践
      • 4.1 测试程序实现
      • 4.2 注意事项
    • 五、扩展应用场景
      • 5.1 模式选择建议
      • 5.2 进阶技巧
    • 六、常见问题解答
    • 七、相关资源


(图1:STM32F103低功耗模式架构示意图)

一、低功耗模式基本工作原理

1.1 功耗层级对比

模式唤醒源功耗等级保持状态
睡眠模式中断/事件最低保持内核寄存器
停机模式外部中断/RTC闹钟中等保持SRAM
待机模式复位按键/专用唤醒引脚最高系统复位

1.2 工作流程

执行WFI/WFE指令
SLEEPDEEP=0
SLEEPDEEP=1
PWR_CR位设置
中断/事件
外部中断
复位信号
运行模式
进入低功耗
模式选择
睡眠模式
停机模式
待机模式
唤醒恢复
系统重启

二、睡眠模式实践

2.1 测试程序解析

// main.c关键代码
__WFI(); // 使用WFI指令进入睡眠
// __WFE(); // 使用WFE指令进入睡眠

// NVIC配置
NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,DISABLE); // 设置为睡眠模式

2.2 程序原理

  • 通过__WFI()触发等待中断
  • 中断服务程序清标志位
  • 唤醒后从WFI下一行继续执行

三、停机模式实践

3.1 测试程序要点

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
// 唤醒后需要重新初始化时钟
RCC_Configuration(); 

3.2 关键配置

MCU PWR NVIC Interrupt RCC 使能时钟(RCC_APB1Periph_PWR) 配置外部中断 进入停机模式 时钟自动关闭 触发唤醒 重新初始化系统时钟 MCU PWR NVIC Interrupt RCC

四、待机模式实践

4.1 测试程序实现

PWR_WakeUpPinCmd(ENABLE); // 使能PA0唤醒功能
PWR_EnterSTANDBYMode();   // 进入待机模式

4.2 注意事项

  1. 唤醒后程序从头开始执行
  2. 需要配置WK_UP引脚为无上拉模式
  3. 保持时间至少1ms的唤醒信号

五、扩展应用场景

5.1 模式选择建议

应用场景推荐模式优势分析
实时数据采集睡眠模式快速唤醒,保留运行状态
周期性传感器监测停机模式低功耗与快速响应平衡
长期待机设备待机模式最低功耗,硬件复位特性

5.2 进阶技巧

  1. 混合模式使用:在不同工作阶段切换模式
  2. RTC唤醒配置:配合日历功能实现定时唤醒
  3. 功耗测量方法:使用uA级电流表串联测量

六、常见问题解答

Q1:唤醒后程序卡死怎么办?

  • 检查时钟初始化
  • 验证中断标志清除
  • 确认堆栈未溢出

Q2:如何测量实际功耗?

  1. 断开调试器
  2. 使用精密万用表电流档
  3. 测量VDD引脚电流

Q3:唤醒源不触发怎么办?

  • 检查GPIO模式配置
  • 验证中断优先级设置
  • 测试信号电平是否符合要求

七、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] 低功耗模式原理.pptx
[5] 睡眠模式测试程序
[6] 停机模式测试程序
[7] 待机模式测试程序


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨看门狗,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-04-05)
http://www.dtcms.com/a/112923.html

相关文章:

  • 30信号和槽_带参数的信号槽(3)
  • [Linux]进程状态、僵尸进程处理回收、进程优先级 + 图例展示
  • kali——httrack
  • Tensorflow、Pytorch与Python、CUDA版本的对应关系(更新时间:2025年4月)
  • 6.1 python加载win32或者C#的dll的方法
  • 对应列表数据的分割和分组
  • 【瑞萨 RA-Eco-RA2E1-48PIN-V1.0 开发板测评】PWM
  • tkiner模块的初步学习
  • 冷门预警,英超006:埃弗顿VS阿森纳,阿森纳分心欧冠,太妃糖或有机可乘
  • TDengine 3.3.6.0 版本中非常实用的 Cols 函数
  • Vue.js设计与实现学习
  • 走进未来的交互世界:下一代HMI设计趋势解析
  • 第九章Python语言高阶加强-面向对象篇
  • 基于Python的微博数据采集
  • 架构及大数据-Zookeeper与Kafka的关系及使用依赖,二者需要同时使用吗?KRaft模式又是啥?
  • Linux常用命令详解:从基础到进阶
  • 基于Python+Flask的服装零售商城APP方案,用到了DeepSeek AI、个性化推荐和AR虚拟试衣功能
  • DCMM详解
  • JS DOM 修改表单样式
  • 浅谈AI - DeepSpeed - 单卡慎用!
  • opencv中mat深拷贝和浅拷贝
  • 常用中间件合集
  • 深入理解 C++ 三大特性之一 继承
  • Java项目之基于ssm的孩童收养信息管理(源码+文档)
  • 详细分析单例模式
  • 【AI编程学习之Python】第五天:Python的变量和常量
  • Kafka 高吞吐量的原因是什么?
  • CNN 中感受野/权值共享是什么意思?
  • 基于Python的图书借阅推荐系统设计与实现
  • 深度学习的疑问(GNN)【1】:图采样与训练