EXTI边沿触发:按键一按就通知CPU,不用轮询

短文标题: EXTI 边沿触发:按键一按就通知CPU,不用轮询

你有没有想过一个问题:用GPIO读取按键,程序一直在循环检查引脚电平------"按了没?按了没?"这叫轮询 ,CPU累,响应还慢。EXTI外部中断 是更好的办法:按键一按,硬件触发中断,CPU才去处理。**平时CPU干别的,信号来了叫醒我。EXTI的"边沿检测",**EXTI可以检测三种信号变化:

  • 上升沿触发:低电平→高电平
  • 下降沿触发:高电平→低电平
  • 双边沿触发:上升沿和下降沿都触发

按键通常配下降沿触发(按键按下,引脚从高→低)。

EXTI->RTSR |= (1 << 0); // 使能上升沿(不用)

EXTI->FTSR |= (1 << 0); // 使能下降沿(按键用)

中断线共享:PA0、PB0、PC0共用同一根线, EXTI只有16条线(EXTI0~EXTI15),但GPIO引脚很多。设计者把所有端口的Pin0接到EXTI0 ,Pin1接到EXTI1......多个引脚共享同一条中断线。**中断触发时,硬件无法区分是PA0还是PB0。**若项目中PA0和PB0都需要中断,软件解决方法:

void EXTI0_IRQHandler(void) {

if (GPIO_ReadInputPin(GPIOA, GPIO_PIN_0) == 0) {

// PA0按下

}

if (GPIO_ReadInputPin(GPIOB, GPIO_PIN_0) == 0) {

// PB0按下

}

EXTI->PR = (1 << 0); // 清中断标志

}

建议设计时分散引脚编号 (用PA0、PA1、PA2),让每个中断独占一条线。软件中断:调试利器 EXTI还支持软件触发中断:写SWIER寄存器对应位,立即产生中断。

EXTI->SWIER |= (1 << 0); // 软件触发EXTI0中断

调试时不用等硬件信号,直接验证中断处理函数。纯硬件触发+软件消抖标准流程:

  1. 配置下降沿触发
  2. 中断服务函数里:
    • 清中断标志(EXTI->PR = 位掩码,注意是写1清零)
    • 启动一个定时器(如SysTick单次中断)延时20ms
    • 定时器中断里再读按键电平
  3. 主循环不做任何按键轮询

轮询让CPU忙等,中断让CPU"按需工作"。这个故事的启示 中断不是"更快"的轮询,而是完全不同的工作模式 。EXTI + 定时器消抖,是按键检测的标准姿势。能硬件通知,就别让CPU傻等。

写在最后, 按键、传感器信号、过零检测......凡是需要捕捉电平变化的,都适合用EXTI。配置好边沿,写好中断,清好标志,CPU就能"无事发生"地休息。


(本文灵感源于于振南《新概念ARM32单片机》教程第6.1节"EXTI按键中断实验与定时器",感谢作者将EXTI的精髓讲得如此通透。)

觉得有用?点赞、转发,让更多人看懂"硬件触发"比"轮询"高明在哪。

相关推荐
不悔哥3 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20163 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
优信电子3 天前
AIT1001 非接触式红外测温模块 STM32 驱动开发实战:从引脚到代码全解析
stm32·嵌入式·温度传感器·红外测温·非接触式测温·ait1001
深圳老胡3 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
wuyk5553 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
女神下凡3 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9663 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛3 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅3 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员3 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程