SYSTEM WAKE-UP(系统唤醒)和外部中断唤醒(EXTI唤醒)
在STM32中,SYSTEM WAKE-UP(系统唤醒)和外部中断唤醒(EXTI唤醒)是两种不同的低功耗唤醒机制,主要区别在于触发源、应用场景和配置方式。以下是详细对比:
1. 触发源与用途
特性 | SYSTEM WAKE-UP | 外部中断唤醒 (EXTI) |
---|---|---|
触发源 | 特定硬件事件(如RTC闹钟、WKUP引脚、USB唤醒等) | 任意GPIO引脚(需配置为EXTI) |
典型应用 | 系统级唤醒(如RTC定时唤醒、按键开机) | 外部事件触发(如传感器信号、按键中断) |
唤醒后状态 | 可能触发系统复位或直接恢复运行 | 通常进入中断服务函数(ISR)处理事件 |
2. 硬件依赖
-
SYSTEM WAKE-UP
- 依赖专用唤醒引脚(如WKUP)(如PA0/WKUP1、PC13/WKUP2等,具体型号需查手册)。
- 部分事件(如RTC闹钟、USB唤醒)无需外部引脚。
- 电平要求:通常需要持续高/低电平(如WKUP引脚检测上升沿唤醒)。
-
外部中断唤醒 (EXTI)
- 可配置任意GPIO为EXTI中断源(受限于芯片复用功能)。
- 触发方式:支持边沿触发(上升沿、下降沿、双边沿)。
- 灵活性:可通过软件配置多个引脚,适应复杂事件。
3. 低功耗模式兼容性
低功耗模式 | SYSTEM WAKE-UP | EXTI唤醒 |
---|---|---|
Sleep Mode | ✔️ 支持 | ✔️ 支持 |
Stop Mode | ✔️ 支持(部分引脚保留) | ✔️ 支持(需配置唤醒引脚) |
Standby Mode | ✔️ 支持(仅专用WKUP引脚) | ❌ 不支持(需通过SYSTEM WAKEUP) |
注意:在Standby模式下,只有特定SYSTEM WAKE-UP事件(如RTC、WKUP引脚)能唤醒,EXTI通常无效(因大部分外设已断电)。
4. 软件配置差异
SYSTEM WAKE-UP(以WKUP引脚为例)
c
复制
markdown
复制
// 配置PA0为WKUP唤醒源(上升沿唤醒)
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); // PA0
HAL_PWR_EnterSTANDBYMode(); // 进入Standby模式,等待唤醒
- 特点:唤醒后MCU会复位(重新执行程序),需检查复位标志区分唤醒来源。
外部中断唤醒 (EXTI)
c
复制
c
复制
// 配置PA0为EXTI中断(下降沿触发)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // 清除唤醒标志
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 进入Stop模式
- 特点:唤醒后直接执行EXTI中断服务函数,无需复位。
5. 关键区别总结
对比项 | SYSTEM WAKE-UP | EXTI唤醒 |
---|---|---|
唤醒后行为 | 可能复位(Standby模式) | 进入中断服务函数(保留上下文) |
引脚限制 | 专用WKUP引脚(数量少) | 任意GPIO(数量多) |
功耗模式支持 | 支持所有模式(包括Standby) | 不支持Standby模式 |
事件处理 | 需通过复位标志判断 | 直接触发中断响应 |
6. 如何选择?
- 需要极低功耗(Standby模式) → 用SYSTEM WAKE-UP(如电池供电的定时唤醒设备)。
- 需快速响应外部事件 → 用EXTI唤醒(如传感器实时触发)。
- 需多个唤醒源 → EXTI更灵活(可组合多个GPIO)。
示例场景:
- 智能手表定时唤醒(RTC + SYSTEM WAKEUP)。
- 无线门磁触发报警(EXTI中断唤醒)。