STM32 外部中断和NVIC嵌套中断向量控制器

STM32(4):中断之嵌套向量中断控制器 什么是“中断”? CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。 比如打游戏时来电话了。 嵌套向量中断控制器 (NVIC) NVIC :嵌套向量中断控制器,用于总体管理异常 Cortex-M4内核支持256个中断,其中包... 阅读详情

目录

背景

外部中断/事件控制器(EXTI)

主要特性

功能说明

外部中断线

嵌套向量中断控制器

特性

‌中断线(Interrupt Line)

中断线的定义和作用

STM32中断线的分类和数量

优先级分组

抢占优先级(Preemption Priority)

子优先级(Sub-Priority)

外部中断的配置

第一步、使能GPIO组和AFIO时钟的外设

第二步、配置外部中断线路

第三步、配置EXTI‌

第四步、配置NVIC‌

‌第五步、编写中断服务函数‌

程序实例


背景

单片机开发过程中经常要用到外部中断(端口为双边沿触发、上升沿、下降沿触发)。

在配置中断的过程中,又需要涉及到中断优先级的配置,中断优先级配置就要NVIC来设置。

外部中断/事件控制器(EXTI)

对于互联型产品,外部中断 / 事件控制器由 20 个产生事件 / 中断请求的边沿检测器组成,对于其它
产品,则有 19 个能产生事件 / 中断请求的边沿检测器。每个输入线可以独立地配置输入类型 ( 脉冲
或挂起 ) 和对应的触发事件 ( 上升沿或下降沿或者双边沿都触发 ) 。每个输入线都可以独立地被屏
蔽。挂起寄存器保持着状态线的中断请求。

主要特性

EXTI 控制器的主要特性如下:
● 每个中断 / 事件都有独立的触发和屏蔽
● 每个中断线都有专用的状态位
● 支持多达 20 个软件的中断 / 事件请求
● 检测脉冲宽度低于 APB2 时钟宽度的外部信号。

功能说明

要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在中
断屏蔽寄存器的相应位写 ’1’ 允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个
中断请求,对应的挂起位也随之被置 ’1’ 。在挂起寄存器的对应位写 ’1’ ,将清除该中断请求。
如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置 2 个触发寄存
器,同时在事件屏蔽寄存器的相应位写 ’1’ 允许事件请求。当事件线上发生了需要的边沿时,将
产生一个事件请求脉冲,对应的挂起位不被置 ’1’ 。
通过在软件中断 / 事件寄存器写 ’1’ ,也可以通过软件产生中断 / 事件请求。

外部中断线

事件与中断的区别

嵌套向量中断控制器

特性

● 68 个可屏蔽中断通道 ( 不包含 16 个 Cortex™-M3 的中断线 ) ;
● 16 个可编程的优先等级 ( 使用了 4 位中断优先级 ) ;

‌中断线(Interrupt Line)

‌是指用于触发中断请求的信号线。在STM32微控制器中,中断线是连接外设和中断控制器的重要部分,用于检测外设事件的发生并触发中断请求。

中断线的定义和作用

中断线是STM32微控制器中用于检测外部或内部事件(如定时器溢出、按键输入、串口数据到达等)的信号线。当这些事件发生时,中断线会向中断控制器发送中断请求,中断控制器根据优先级管理机制决定是否响应该请求。如果响应,则会暂停当前执行的程序,转而执行相应的中断服务程序(ISR),处理完中断后再返回到原来的程序继续执行‌12。

STM32中断线的分类和数量

STM32的中断线可以分为内核中断和外部中断。以STM32F103C8T6为例,它支持70个中断,其中包括10个内核中断和60个外部中断。外部中断涵盖了EXTI(外部中断/事件控制器)、TIM(定时器)、ADC(模拟数字转换器)、I2C、SPI等外设‌。

NVIC把外部的中断信号关联到内核中,将各种中断进行分门别类,按前后顺序发送给内核。
嵌套中断向量控制器中的嵌套,表示中断也可以被其他更高优先级的中断事件中断
这就涉及到中断分组的概念

优先级分组

抢占优先级(Preemption Priority)

用于决定当多个中断同时发生时,哪个中断的处理器会被首先服务。抢占优先级高的中断会抢占正在执行的低优先级中断。

子优先级(Sub-Priority)

在两个或多个中断具有相同抢占优先级时,子优先级决定了哪个中断被首先服务。如果两个中断具有相同的抢占优先级,则子优先级较低的中断会先被服务。

抢占优先级和子优先级的设置值越低优先级越高

如果中断优先级完全相同,同时触发的话,查看谁在中断列表前面可知谁先执行

外部中断的配置


配置STM32的中断线通常包括以下几个步骤:

第一步、使能GPIO组和AFIO时钟的外设

需要通过设置AFIO寄存器来配置外部中断的输入模式。

第二步、配置外部中断线路

首先需要配置触发中断的外设,如GPIO、定时器、ADC等。


第三步、配置EXTI‌

设置外部中断的具体参数,如触发条件等。


第四步、配置NVIC‌

通过NVIC(Nested Vectored Interrupt Controller)设置中断的优先级和分组。


‌第五步、编写中断服务函数‌

根据不同的中断源编写相应的中断服务函数。例如,对于EXTI4的中断服务函数命名为EXTI4_IRQHandler,对于EXTI9_5的中断服务函数命名为EXTI9_5_IRQHandler‌
通过以上步骤,可以有效地配置和使用STM32的中断线,实现高效的中断处理和系统响应。

程序实例

void NVIC_Configuration(void){ //嵌套中断向量控制器 的设置
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
}
void PORTA6_EXITI_INIT (void){	 //按键中断初始化
	NVIC_InitTypeDef  NVIC_InitStruct;	//定义结构体变量
	EXTI_InitTypeDef  EXTI_InitStruct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //启动GPIO时钟 (需要与复用时钟一同启动)     
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);//配置端口中断需要启用复用时钟

//第1个中断	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);  //定义 GPIO  中断
	
	EXTI_InitStruct.EXTI_Line=EXTI_Line4;  //定义中断线
	EXTI_InitStruct.EXTI_LineCmd=ENABLE;              //中断使能
	EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;     //中断模式为 中断
	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;   //下降沿触发
	
	EXTI_Init(& EXTI_InitStruct);
	
	NVIC_InitStruct.NVIC_IRQChannel=EXTI4_IRQn;   //中断线     
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;  //使能中断
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;  //抢占优先级 2
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;     //子优先级  2
	NVIC_Init(& NVIC_InitStruct);
	}
void  EXTI4_IRQHandler(void){
	if(EXTI_GetITStatus(EXTI_Line4)!=RESET){//判断某个线上的中断是否发生 
		//---中断处理部分 ---
		EXTI_ClearITPendingBit(EXTI_Line4);   //清除 LINE 上的中断标志位
	}     
}

STM32嵌套中断向量控制器NVIC NVIC(Nest Vector Interrupt Controller),嵌套中断向量控制器,作用是管理中断嵌套 先级。核心任务是管理中断优管理中断嵌套:我们在处理某个中断的过程中还没处理完这个中断,又来了一个中断,是否可以打断这个中断,不能就存在中断嵌套特点:68个可屏蔽中断通道(不包含16个Cortex-M3的中断线)16个可编程的优先等级(使用了4位中断优先级)低延迟的异常和中断处理电源管理控制系统控制寄存器的实现。 阅读详情

相关推荐

【STM32学习笔记】(12)——NVIC(嵌套向量中断控制器)详解

本文简要的介绍了NVIC(嵌套向量中断控制器)的基础知识,为下一篇学习外部中断打下基础。

qq_53918631的博客 1万+

STM32的中断系统详解(嵌入式学习)

STM32微控制器的中断系统是其重要的功能之一,它允许处理器在运行过程中响应外部事件和紧急情况。中断向量表(Interrupt Vector Table):中断向量表是一个存储中断处理程序地址的表格。对于每个中断,中断向量表中都有一个相应的入口,存储了对应中断处理程序的地址。当中断请求发生时,处理器会根据中断号查找中断向量表,并跳转到相应的中断处理程序执行。NVIC(Nested Vectored Interrupt Controller):NVIC是STM32微控制器中的中断控制器,负责管理和控制中断。

1万+

stm32软硬件学习笔记3、中断系统

中断类型与优先级 中断分为两个类型:内核异常和外部中断。上图是stm32中断向量表的部分内容和优先级。 上图-3到6这个区域被标黑了,这个区域就是内核异常。内核异常不能够被打断,不能被设置优先级(也就是说优先级是凌驾于外部中断之上的)。常见的内核异常有以下几种:复位(reset),不可屏蔽中断(NMI),硬错误(Hardfault),其他的也可以在表上找到。 从第7个开始,后面所有的中断都是外部中断。外部中断包含线中断,定时器中断,IIC,SPI等所有的外设中断,可配置优先级。外部中断的优先级

qq_46041038的博客 505

STM32外部中断及中断嵌套

STM32外部中断及中断嵌套

ganhui13000的博客 4746

neruolib全脑建模计算框架

neurolib 是一个用python编写的全脑建模计算框架,也是可扩展的、允许轻松实现自定义神经质量模型,能够在介观尺度上表示脑区平均活动。

Rootfyx的博客 1149

【gcc】跨版本兼容实战:高版本编译程序在低版本glibc环境下的部署方案

本文针对高版本gcc编译的程序在低版本glibc环境下部署的兼容性问题,提供了四种实战解决方案:静态编译的局限性、容器化部署的优雅方案、使用Devtoolset工具链的官方支持,以及最通用灵活的打包依赖SO发布方案。重点剖析了通过设置RPATH和Interpreter或使用patchelf工具,实现程序与自带库的独立部署,有效解决glibc版本鸿沟。

weixin_29237635的博客 362

STM32标准库常用函数的使用和代码说明

在每次中断程序结束后,一定要再调用一下清除中断标志位的函数,因为只要中断标志位置1了,程序就会跳转到中断函数, 如果不清除中断标志位,那它就会一直申请中断,这样程序就会不断响应中断,执行中断函数,那程序就会卡死在中断函数中,所以每次中断程序结束后,都应该清除一下中断标志位。这里的结构体就是一个数据打包的过程,首先将参数写到结构体的三个变量里,然后统一打包,将结构体传递到初始化函数里,接着在初始化函数里面,再把这个结构体拆包出来,读取变量,这就是使用结构体的整个过程。

m0_50562428的博客 1万+

CloudCompare横截面工具实战:从点云切片到轮廓提取的完整流程

本文详细介绍了CloudCompare软件中Cross Section工具的核心功能与实战流程。从交互式裁剪框的精准操控,到包络线提取的参数设置与优化,再到内部轮廓提取及批量处理技巧,完整解析了如何从三维点云中高效提取建筑立面、隧道断面等关键轮廓信息,是点云数据处理与分析的实用指南。

weixin_29290963的博客 286

32单片机基础:EXTI外部中断

触发信号通过或门后,就兵分两路,上一路是触发中断的,下一路是触发事件的,触发中断会置一个挂起寄存器,这相当于是一个中断标志位,我们可以读取这个寄存器判断是哪一个通道触发的中断如果挂起寄存器置1,它就继续往左走,和中断屏蔽寄存器共同进入一个与门,然后至NVIC中断控制器,这里的与门实际就是开关的作用,因为1与上任意的数x,等于这个任意的数x,0与上任意的数x,都等于0.这就相当于,中断屏蔽器给1,另一个输入就是直接输出,也就是允许中断。画一个斜线写在20,表示的是,就是20根线,代表20个通道。

weixin_64484421的博客 1826

3A之自动对焦(AF)算法:从Tenegrad到拉普拉斯的清晰度评价实战

本文深入解析自动对焦(AF)算法的核心——清晰度评价函数,通过实战对比Tenegrad、方差、能量梯度、Brenner和拉普拉斯五大经典算法的原理、代码实现与性能。文章详细阐述了各函数在计算速度、抗噪性和单峰性上的优劣,并提供了从仿真测试到硬件部署的优化策略,帮助开发者根据实际场景选择最合适的AF算法。

weixin_29281915的博客 314

Simulink仿真状态空间中状态变量时域响应

起因 今天老师留了一道关于状态空间变量响应的题,于是想用simulink仿真,一开始使用state-space模块,但是发现它只能输出y,没办法显示状态变量的变化情况。然而状态变量之间的关系都可以表示为一阶微分方程组,因此我们考虑在Simulink中搭建微分方程组来求解这个问题。 微分方程组 x1˙=x2x2˙=−4x1−5x2+1(1)\dot{x_1}=x_2\\ \dot{x_2}=-4x_...

ZYunfei的博客 7454

(STM32基础)STM32常用中断介绍

1、中断通道就是中断源,STM32具体到某个型号不一定有68个中断这么全,基本上所有外设均可触发中断。一个外设可以有多个中断源,每个中断通道都有16个可编程的优先等级。2、中断使用NVIC(嵌套中断向量控制器)统一管理(可以把它比作是医院里面的叫号系统,CPU是医生)。管理中断、分配优先级都由它来控制。NVIC是一个内核外设,服务与CPU。图中n的意思是一个外设可能会占用多个中断通道。

myz1016的博客 3539

久坐不慌,健康护航 —— 智能震动提醒坐垫的设计与实现

硬件核心:选用 ESP32 为主控,HX711 + 应变片实现精准压力检测,8050 三极管驱动震动马达,锂电池 + TP4056 满足便携供电需求;软件逻辑:核心是 “压力阈值判断 + 时间计时”,达到久坐阈值后触发震动提醒,流程图清晰体现了循环检测、状态重置的核心逻辑;代码特性:代码注释完善,阈值可灵活调整,支持串口调试,新手可直接编译烧录并根据实际场景校准。

weixin_42300449的博客 401

中断控制——NVIC和EXTI

对外设的控制方式,一般是四种,即:轮询,中断,DMA,通道。 rbt6开发板显然没有DMA,也不存在通道。所以,控制方法就是轮询和中断。 轮询方式在LED的点亮已经演示过,但仍然有缺陷,可能是因为时钟频率不够,导致按键时松开的速度如果太快,就不能点亮或者熄灭,使按键点亮LED有时会失败。 中断一般会分为异常和外部的中断,异常是体现在内核的水平,主要就是指内核的外设,如系统滴答定时器等等。但在操作时...

qq_42424228的博客 6731

鸿蒙应用发布实战:应用热更新的实现

在移动应用开发领域,应用更新是持续交付价值的关键环节。传统的应用更新方式需要用户手动下载完整安装包,不仅用户体验差,而且更新率往往不理想。热更新技术(也称为OTA更新)允许应用在不重新安装的情况下动态更新部分功能,极大提升了用户体验和迭代效率。本文专注于鸿蒙操作系统下的应用热更新实现方案,涵盖从原理到实践的完整知识体系。鸿蒙热更新的技术架构差分更新算法实现动态部署机制实际项目中的最佳实践安全与性能优化策略首先介绍鸿蒙热更新的背景和核心概念深入分析技术原理和算法实现。

操作系统内核探秘的博客 965

【部署】Ubuntu 24.04.4虚拟机下部署OpenClaw

OpenClaw是一款基于AI的智能助手工具,本文详细介绍了在Ubuntu 24.04.4系统上的三种安装方法。推荐使用一键安装脚本(curl -fsSL https://openclaw.ai/install.sh | bash),自动完成Node.js检测、CLI安装和引导配置。对于开发者,提供了从源码构建的详细步骤,包括环境准备、依赖安装和构建流程。文章还包含常见问题解决方案(如sharp构建错误处理)以及后续维护建议(更新、配置检查和日志查看)。安装完成后,用户可通过终端TUI或Web UI进行初始

海兰 1万+

STM32中断和外部中断

相同的Pin不能同时触发中断,因为PA0,PB0,PC0通过AFIO选择后只有其中一个可以连接到EXTI的通道0上,PB1,PC1等也只有一个可以接入EXTI上。AFIO中断引脚选择:是一个中断引脚选择器可以在前面GPIO外设的16个引脚中选择一个连接到EXTI边沿检测及控制中所以。NVIC:嵌套中断向量控制器:用于统一分配中断优先级和管理中断。

qq_45973003的博客 1222

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32学习之外部中断(实现对射式红外计次/旋转编码器计次)

AFIO的作用可以进行中断引脚选择,同时也可以进行复用功能引脚重映射。5.配置外部中断步骤(1)配置RCC,将涉及的外部时钟打开(2)配置GPIO,选择端口为输入模式(3)配置AFIO,中断引脚进行选择,选择我们用的GPIO口,连接到后面的EXTI.(4)配置EXTI,选择边沿触发方式打开中断:比如上升沿触发/下降沿触发/双边沿。同时选择触发响应:中断响应还是事件响应。(5)配置NVIC,给我们的中断选择一格合适的优先级(6)通过NVIC,外部中断信号就能进入CPU了.

weixin_52448289的博客 1254

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

6、江科大stm32视频学习笔记——EXTI中断

stm32——EXTI中断,江科大stm32学习视频的笔记

weixin_45981798的博客 1175

[STM32学习笔记] EXTI外部中断使用说明

可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。

qq_45984081的博客 444

EXTI外部中断

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

2301_80924203的博客 942

中断系统及寄存器的外部中断简单应用

这70个中断就是F103中包含的中断,其中Reset,NMI和硬件失效这三个中断是不能被设置的,也就是这三个中断的优先级是固定的,而其他的67个中断的优先级是可以设置的,外面可以根据自己的需要进行设置。此处这个中断的优先级是默认的优先级,由于STM32的中断管理系统NVIC使用的是4位优先级,所以在设置优先级过程中难免会有一些重复,当两个任务或者多个任务的NVIC中的抢占优先级和响应优先级都相同时,并且是差不多同时就绪的时,系统就会根据这个默认大的中断优先级进行中断的执行。但是响应优先级不会导致中断嵌套。

2402_87803572的博客 1148

STM32-自学笔记(13.NVIC和外部中断)

1.NVIC,嵌套中断向量控制器。(通俗点理解就是,许多中断向量交织在一起,形成一个向量网) 和SysTick定时器一样,NVIC属于ARM Cortex-M3内核的内部设备之一,与基于此内核的控制器并无直接联系,就是说任何一款基于ARM Cortex-M3内核的微控制器都带有NVIC. 作用:用来管理中断嵌套的,主要在于优先级的管理。嵌套是什莫?,先回忆一下中断的几个概念。 中断响应:当某...

niuyuce的博客 3521

STM32EXTI外部中断

当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,cpu再次暂停当前中断程序,转而去处理更高优先级的中断源申请中断,cpu再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。在主程序运行过程中,出现了特定的中断触发条件(中断源),使得cpu暂停当前运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。当有多个中断源同时申请中断时,cpu会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。

cxdzy321的博客 565

STM32—EXTI(外部中断)

EXTI(Extern Interrupt)外部中断EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒触发响应方式:中断响应/事件响应。

2201_75452685的博客 445

【STM32-基础】

设置异常中断 HardFault_Handler。初始化栈指针 __initial_sp。指向复位程序 Reset_Hander。通过Boot引脚设定,寻找初始地址。设置系统时钟 SystemInit。:介绍以下STM32启动过程?调用C库函数 _main。

sinat_23896491的博客 499
上一篇: STM32 如何使用DMA和获取ADC
下一篇: STM32 PWM脉冲宽度调制介绍
sinat_36070482
博客等级 码龄10年 118粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值