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

​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-UPEXTI唤醒
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-UPEXTI唤醒
唤醒后行为可能复位(Standby模式)进入中断服务函数(保留上下文)
引脚限制专用WKUP引脚(数量少)任意GPIO(数量多)
功耗模式支持支持所有模式(包括Standby)不支持Standby模式
事件处理需通过复位标志判断直接触发中断响应

6. 如何选择?​

  • 需要极低功耗(Standby模式)​​ → 用SYSTEM WAKE-UP​(如电池供电的定时唤醒设备)。
  • 需快速响应外部事件​ → 用EXTI唤醒​(如传感器实时触发)。
  • 需多个唤醒源​ → EXTI更灵活(可组合多个GPIO)。

示例场景​:

  • 智能手表定时唤醒(RTC + SYSTEM WAKEUP)。
  • 无线门磁触发报警(EXTI中断唤醒)。
http://www.xdnf.cn/news/1104.html

相关文章:

  • 建筑末端配电回路用电安全解决方案
  • 【数据结构 · 初阶】- 堆的实现
  • 抱佛脚之学SSM四
  • Redis—为何持久化使用子进程
  • 【Hive入门】Hive架构与组件深度解析:从核心组件到生态协同
  • Go语言中 defer 使用场景及深度注意事项指南
  • JavaFX实战:从零打造一个功能丰富的“猜数字”游戏
  • 23种设计模式-结构型模式之桥接模式(Java版本)
  • 单个或批量实现-提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件。
  • SpringClound 微服务分布式Nacos学习笔记
  • 最新整理AI开源大模型介绍
  • vue3:十一、主页面布局(修改左侧导航条的样式)
  • C++继承(最详细)
  • SAP获利分析KEA0-值字段无法被分配,原因既然是。。
  • Linux常用命令
  • [创业之路-381]:企业法务 - 企业经营者,有哪些生产安全风险,哪些人承担责任?承担哪些责任?如何防范?
  • Java从入门到“放弃”(精通)之旅——抽象类和接口⑨
  • conda和pip的区别
  • C# 实现TCP/IP通信协议——Message结构设计
  • C# AppContext.BaseDirectory 应用程序的启动目录
  • Smart AI:在AI浪潮中崛起的智能NFT生态革命者
  • 【高并发内存池】从零到一的项目之高并发内存池整体框架设计及thread cache设计
  • 晶振详解:原理、作用、种类、应用与选型要点
  • Scribe: 一个非常方便的操作文档编写工具
  • 爬虫(requests库,logging库)
  • Linux ssh免密登陆设置
  • 【ECharts】ECharts曲线图节点点击事件实现
  • React18+ 项目搭建-从初始化、技术选型到开发部署的全流程规划
  • ProxySQL 性能调优实战案例
  • npm的基本使用安装所有包,安装删除指定版本的包,配置命名别名