9.STM32 中断系统详解:从基础概念到 EXTI 实战

【嵌入式】带你初步认识并简单使用STM32的EXTI外部中断 STM32的EXTI是管理外部中断的重要模块。通过EXTI,当外部信号发生变化时,可以触发中断,使CPU暂停当前正在运行的程序,转而处理中断事件,处理完成后又返回原来被暂停的位置继续执行,极大地增强了单片机对外部事件响应的能力。。本文将详细介绍STM32的EXTI外部中断的配置和使用方法,并提供详细的代码示例和图片说明。支持16 个中断线可以配置成上升沿触发、下降沿触发或双边沿触发。每条中断线可以分别映射到不同的 GPIO 引脚。 阅读详情

中断是嵌入式开发中最重要的基础概念之一,也是 STM32 从入门到进阶必须掌握的核心能力。本文面向 STM32 初学者,从零开始系统讲解中断的完整知识体系:先介绍中断的基础概念与作用,再深入 STM32 中断系统架构(NVIC、中断向量表、处理流程),接着讲解中断优先级的配置方法,最后通过外部中断(EXTI)实战带你完整走通标准库和 HAL 库的配置流程,并给出按键控制 LED 的完整工程示例。

建议阅读顺序:如果你是第一次接触中断,请按章节顺序依次阅读,先理解「什么是中断」和「中断执行过程」,再进入架构与优先级部分;如果你已有一定基础,可以直接跳到「五、中断配置完整步骤」和「七、常见问题与注意事项」对照实践。文中所有代码示例基于 STM32F103 、STM32F411系列,建议边读边在开发板上动手验证,遇到问题可随时回看对应章节的排查清单。

1.1 什么是中断

中断(Interrupt)是指 CPU 在正常执行程序的过程中,由于内部或外部事件的触发,暂时中止当前程序的执行,转而去处理该事件对应的服务程序,处理完毕后再回到原程序被打断的位置继续执行的过程。

类比理解:你正在看书(主程序),电话铃响了(中断触发),你在书页上夹个书签(保存现场),去接电话(中断服务函数),接完电话后回到书签位置继续看书(恢复现场、返回主程序)。

1.2 中断的作用

  • 提高 CPU 效率:避免 CPU 不断轮询外设状态,让 CPU 在等待时处理其他任务。

  • 实时响应:紧急事件可以立即得到处理,满足实时系统的要求。

  • 实现多任务调度:操作系统利用 SysTick 等定时器中断实现任务切换。

  • 低功耗支持:CPU 可进入休眠模式,由中断唤醒。

1.3 中断 vs 轮询

对比项

中断方式

轮询方式

CPU 占用

低,事件到来时才响应

高,持续查询状态

响应速度

快,实时性好

取决于轮询周期

实现复杂度

较高,需配置中断和服务函数

简单,循环判断即可

适用场景

实时性要求高、事件频率低

事件频繁、实时性要求低

1.4 中断执行过程

二、STM32 中断系统架构

EXTI 中断线一共 23 个,其中外部 GPIO 的中断有 16 个。

EXTI流程

EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不同。

首先我们来看图中红色虚线指示的电路流程。它是一个产生中断的线路,最终信号流入到 NVIC 控制器内。

        输入线,EXTI 控制器有 23个中断/事件输入线,这些输入线可以通过寄存器设置为任意一个 GPIO,也可以是一些外设的事件。输入线一般是存在电平变化的信号。

        边沿检测电路,它会根据上升沿触发选择寄存(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来控制信号触发。边沿检测电路以输入线作为信号输入端,如果检测到有边沿跳变就输出有效信号 1 给或门电路,否则输出无效信号0。而 EXTI_RTSR 和 EXTI_FTSR 两个寄存器可以控制器需要检测哪些类型的电平跳变过程,可以是只有上升沿触发、只有下降沿触发或者上升沿和下降沿都触发。

        或门电路,它一个输入来自边沿检测电路,另外一个输入来自软件中断事件寄存器(EXTI_SWIER)。EXTI_SWIER允许我们通过程序控制就可以启动中断/事件线,这在某些地方非常有用。我们知道或门的作用就是有 1 就为 1,所以这两个输入随便一个有有效信号 1就可以输出 1 给下方的两个与门电路。

        与门电路,它一个输入是前边的或门电路,另外一个输入来自中断屏蔽寄存器(EXTI_IMR)。与门电路要求输入都为 1 才输出 1,导致的结果是如果 EXTI_IMR 设置为 0 时,那不管或门电路的输出信号是 1 还是 0,最终与门电路输出的信号都为 0;

        如果EXTI_IMR设置为1时,最终与门电路输出的信号才由或门电路的输出信号决定,这样我们可以简单的控制 EXTI_IMR 来实现是否产生中断的目的。与门 电路输出的信号会被保存到挂起寄存器(EXTI_PR)内,如果确定与门 电路输出为 1 就会把 EXTI_PR 对应位置 1。

        上边的与门电路是将 EXTI_PR 寄存器内容输出到 NVIC 内,从而实现系统中断事件控制。

        接下来我们来看看蓝色线指示的电路流程。它是一个产生事件的线路,最终输出一个脉冲信号。

        产生事件线路是在或门电路之后与中断线路有所不同,之前电路都是共用的。

蓝线上方的与门电路,它一个输入来自前方或门 电路,另外一个输入来自事件屏蔽寄存器(EXTI_EMR)。如果 EXTI_EMR设置为 0时,那不管或门电路的输出信号是 1还是 0,最终编号 6 电路输出的信号都为 0;如果 EXTI_EMR 设置为 1 时,最终与门电路输出的信号才由或门 电路的输出信号决定,这样我们可以简单的控制 EXTI_EMR 来实现是否产生事件的目的。

        脉冲发生器电路,当它的输入端,即蓝线与门电路的输出端,是一个有效信号 1 时就会产生一个脉冲;如果输入端是无效信号就不会输出脉冲。

       蓝色线上下起伏的是一个脉冲信号,就是产生事件的线路最终的产物,这个脉冲信号可以给其他外设电路使用,比如定时器 TIM、模拟数字转换器 ADC 等等,这样的脉冲信号一般用来触发 TIM 或者 ADC开始转换。

        产生中断线路目的是把输入信号输入到 NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。

另外,EXTI是在 APB2总线上的,在编程时候需要注意到这点。

2.1 NVIC 嵌套向量中断控制器

STM32(基于 Cortex-M 内核)的中断管理由 NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)负责。NVIC 是内核的一部分,与 CPU 紧密耦合,支持:

  • 可嵌套中断(高优先级中断可打断低优先级中断)

  • 向量中断(自动定位中断服务函数入口,无需软件查询)

  • 动态优先级调整

  • 中断屏蔽(除 HardFault 外,所有中断均可被屏蔽)

2.2 中断向量表

中断向量表是一个存放中断服务函数入口地址的数组,位于存储器起始地址(默认 0x08000000)。每个中断源对应一个固定的向量编号和偏移地址。

以 STM32F103 为例,向量表前几项如下:

向量编号

中断源

说明

0

—

初始栈顶地址(MSP)

1

Reset

复位中断,程序入口

2

NMI

STM32 外部中断EXTI 输入线就是20条外部中断线,可能是GPIO0~15的十六根线,也有可能是其他的线,比如说GPIO进来之后产生了一个信号,进入边沿检测电路,我们通过这个要选择是上升沿还是下降沿(上升和下降是针对电平来说的,下降沿是从高电平到低电平,上升沿是从低电平到高电平),根据是上升沿发生中断还是下降沿发生中断,是配置我们中断发生的条件,串口1的发送,串口1的接收,正常情况下PA9是发送PA10是接收,但是当串口USART1_REMAP = 1 时 ,PB6也能用来当串口1的发送,PB7能用来当作串口1的接收。 阅读详情

相关推荐

STM32——EXTI外部中断:中断方式翻转LED灯

使用EXTI(External Interrupt)外部中断方式, 通过中断服务函数对GPIO口进行控制, 使得LED灯可以进行亮灭翻转.

冲啊梅勒斯 9904

STM32笔记(六)---GPIO中断EXTI

GPIO中断EXTI 文章目录GPIO中断EXTI一、 基础概念二、中断步骤:三、 中断编程:配置流程总结疑问解答疑问解答 一、 基础概念 EXTI框图 ​ 外部中断通用I/O映像 ​ EXTI 中断/事件线 ∴ 1.输入线总共有20条,EXTI0~EXTI19 2.通过配置AFIO_EXTICRx寄存器相应位段进行设置: ​ 以框图为配置步骤参考,上升沿与下降沿触发选择寄存器(EXTI_RTSR 、EXTI_FTSR )配置后GPIO触发则边沿检测电路输出1与软件中断事件寄存器(

m0_48830645的博客 6993

STM32CubeMX——外部中断基础(HAL 库)

1、

莘莘的博客 1万+

STM32之EXTI外部中断

对射式红外式传感器计次:采用外部中断的实例(代码注释均有讲解)

qq_44386182的博客 2028

6.STM32F40x 外部中断(EXTI)

EXTI(外部中断)是一种在微处理器系统中用于处理外部事件的机制。它允许外部设备(例如按键、传感器等)触发中断,从而通知处理器处理新的事件。

2301_78324535的博客 1643

STM32笔记—EXTI外部中断

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行;中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源;中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。(不用开启外设时钟:特殊)EXTI可以监测指定GPIO口的电平信号,当其指定的。

weixin_57604904的博客 2420

stm32外部中断

目录 1. STM32的外部中断线 2.NVIC嵌套向量中断器 3.外部中断、事件控制器(EXTI): 4.STM32CubeMX配置外部中断: 1.外部中断是什么 想象一个场景:你在家里玩游戏,这时候突然来电话了。这时你会停止玩游戏去接电话,电话打完再放下电话继续玩。这一个过程就体现了中断的思想。我们抽象一下,把自己想象成一个单片机系统,玩游戏就是正在执行的主任务,如果没有外界干扰,这个系统会一直执行当前的主任务。而当外部有改变(电话响了)的时候,系统会第一时间响应,从主任务跳..

qq_63069727的博客 8230

[STM32] 江科大-EXTI外部中断(学习笔记-上)

EXTI(Extern Interrupt)外部中断EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断。

2301_81011494的博客 1798

STM32第十节(中级篇):EXTI(第一节)——EXTI功能框图及初始化结构体讲解(包括STM32中断应用总结)

在STM32的中级教程中,第十节涉及到外部中断(EXTI)的功能框图以及初始化结构体的讲解。在本节课中,我们将深入探讨外部中断的初始化结构体,这是配置外部中断功能所必需的步骤。了解如何正确地初始化外部中断结构体可以帮助开发人员充分利用STM32的中断功能,并实现更加灵活和高效的中断应用。除了讲解外部中断的功能框图和初始化结构体外,本节课还将对STM32中断应用进行总结。中断是一种在嵌入式系统中常用的技术,能够提高系统的响应速度和效率。

2301_79641086的博客 1938

Metal ECO实战:如何在不修改底层掩模的情况下修复芯片时序问题

本文深入探讨了Metal ECO技术在芯片设计中的应用,这是一种在不修改底层晶体管掩模的前提下,仅通过调整金属连线和替换预置填充单元来修复时序问题的“微创手术”。文章详细解析了其原理、适用场景、关键操作流程与命令,并分享了实战中的高级技巧与常见陷阱,为面临流片前时序违例的工程师提供了宝贵的修复指南。

wdx0123456的博客 433

国产AI芯动力:复旦微FMQL100TAI900 FPGA原型验证板全解析

本文全面解析了复旦微FMQL100TAI900 FPGA原型验证板在国产AI硬件领域的创新突破。该板卡采用全栈国产化设计,具备出色的AI推理性能、视频处理能力和接口生态,特别适合工业质检、智能交通等场景。文章详细介绍了其芯片架构、存储子系统、接口扩展及电源设计,并分享了实战开发经验,为开发者提供了一套可靠的国产计算平台解决方案。

weixin_29250573的博客 457

光学系统设计:波段、光源、光纤与探测器匹配指南

在光学测量和光纤通信系统中,波段、光源、光纤和探测器的匹配关系是系统设计的核心基础。波段指电磁波谱中的特定波长范围,光源负责产生特定波长的光信号,光纤作为传输介质需要与波长匹配以降低损耗,探测器则负责将光信号转换为电信号。理解各组件的光谱特性对于系统性能至关重要,例如在850nm短波长多模光纤系统中,VCSEL激光器与PIN光电二极管的组合能提供最佳性价比。典型应用场景包括生物医学成像、光纤通信和气体传感,其中光谱重叠优化、模场直径匹配和偏振特性协调是关键技术要点。通过实测数据对比不同组合的传输性能,可以为

weixin_33812433的博客 339

小白投资理财 - 解读威廉分形指标 Williams Fractals

威廉分形指标用于识别价格趋势中的关键点,帮助判断支撑位和阻力位。

wumingxiaoyao的博客 4339

车载毫米波雷达实战:用MATLAB复现DDMA-MIMO雷达的Empty-band算法(附代码解析)

本文详细介绍了车载毫米波雷达中DDMA-MIMO技术的实战应用,重点解析了Empty-band算法的原理与MATLAB实现。通过搭建仿真环境,文章深入探讨了发射天线通道解调与相位法速度解模糊两大核心难题的解决方案,并提供了完整的代码解析,为雷达算法工程师提供了从理论到实践的清晰指南。

hill8的博客 564

PPT+视频 | 详解智能营销增益模型(uplift model)

分享营销增益模型的原理和常见的建模及评估方法,并以淘票票智能票补为例介绍uplift model技术的实践经验。

阿里文娱技术 8627

PCIe链路均衡实战:从Preset调节到系数优化的完整指南(附Synopsy IP案例)

本文深入解析PCIe链路均衡技术,从Preset调节到系数优化的全流程实战指南,特别针对PCIe 3.0/4.0中的Recovery.Equalization状态进行详细说明。通过Synopsy IP案例,展示如何应对高速信号完整性挑战,优化前向反馈均衡(FFE)机制,提升系统性能。

peace的博客 1055

看懂特斯拉IMU底层逻辑,才懂农业机器人不可替代的核心技术壁垒

在自动驾驶与具身智能赛道,特斯拉彻底重构了IMU(惯性测量单元)的技术定位,打破行业“IMU仅为辅助补盲配件”的固有认知,将其从底盘附属硬件升级为纯视觉感知体系的物理核心基座。依托500–1000Hz超高刷新率、无外部依赖的惯性感知能力、端到端神经网络融合架构,特斯拉实现了“视觉感知环境、IMU定义运动”的技术闭环,摆脱对激光雷达、高精地图、卫星定位的强依赖。这套技术逻辑落地农业机器人赛道,不再是技术优化,而是规模化落地的生存刚需。城市自动驾驶属于结构化稳定场景,IMU仅作误差修正的锦上添花;

getusushu的博客 50

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 8.STM32 串口通信程序编写详解:寄存器与 HAL 库实战
下一篇: 10.DHT11温湿度传感器详解:原理、时序与程序设计
硅基造物主
博客等级 码龄4年 17粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值