STM32F103C8T6低功耗模式详解:如何选择和应用Sleep、Stop、Standby模式?
文章目录
- 引言
- 一、STM32F103C8T6低功耗模式概览
-
- 1. 低功耗模式对比
- 二、各模式详解与代码实现
-
- 1. Sleep模式
- 2. Stop模式
- 3. Standby模式
- 三、实战案例:基于GPIO触发的低功耗控制
-
- 1. 需求描述
- 2. 实现步骤
-
- (1) 配置GPIO和外部中断
- (2) 中断服务函数
- (3) 主函数
- 四、如何选择合适的低功耗模式?
-
- 1. 决策树
- 2. 典型应用场景
- 五、注意事项
- 六、总结
引言
在物联网设备、电池供电的传感器节点等场景中,低功耗设计是延长设备寿命的关键。STM32F103C8T6作为一款经典的Cortex-M3微控制器,提供了三种低功耗模式:Sleep、Stop和Standby。本文将深入解析这三种模式的特点、应用场景,并通过代码示例展示如何实现低功耗控制。
一、STM32F103C8T6低功耗模式概览
1. 低功耗模式对比
模式 | 功耗 | 唤醒源 | 恢复时间 | RAM保持 | 系统状态 |
---|---|---|---|---|---|
Sleep | 中 | 任意中断/事件 | 极快 | 保持 | CPU暂停,外设运行 |
Stop | 低 | 外部中断、RTC、特定事件 | 较快 | 保持 | 时钟停止 |
Standby | 极低 | 复位、RTC、WKUP引脚 | 慢 | 丢失 | 系统复位 |
二、各模式详解与代码实现
1. Sleep模式
特点
- 功耗:约几mA(具体取决于运行的外设)。
- 唤醒方式:任何中断或事件均可唤醒。
- 恢复:从暂停处继续执行,无需重新初始化外设。
应用场景
- 短暂休眠等待外部事件(如按键触发)。
- 需要快速响应的周期性任务(如定时采集传感器数据)。
代码实现
// 进入Sleep模式
void Enter_Sleep_Mode(void) {
// 设置SLEEPDEEP位为0(选择Sleep模式)
SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
// 执行WFI指令
__WFI();
}
2. Stop模式
特点
- 功耗:约20μA(所有时钟停止,1.8V电源域关闭)。
- 唤醒方式:外部中断(EXTI)、RTC闹钟、NRST引脚复位。
- 恢复:需重新配置系统时钟(HSI默认启用),保留RAM和寄存器内容。
应用场景
- 长时间休眠且需保存运行状态(如智能手表的待机模式)。
- 需要低功耗但快速唤醒的场景(如无线传感器网络节点)。
代码实现
// 进入Stop模式(需配置PWR库)
#