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

目录

背景

外部中断/事件控制器(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;  //抢占优先级 2NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;     //子优先级  2NVIC_Init(& NVIC_InitStruct);}
void  EXTI4_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line4)!=RESET){//判断某个线上的中断是否发生 //---中断处理部分 ---EXTI_ClearITPendingBit(EXTI_Line4);   //清除 LINE 上的中断标志位}     
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法【Day49】

Day49 42. 接雨水 思路 这道题利用单调栈进行横向求解。对于每一个元素,找到它右边第一个比它大的元素和左边第一个比它大(或者与它相等的元素,当然这种情况可以忽略),最后计算雨水的存储量:&#xff08…

PHP 网络编程介绍

PHP 学习资料 PHP 学习资料 PHP 学习资料 在当今数字化时代,网络编程是开发各类应用必不可少的技能。PHP 作为一门广泛应用于 Web 开发的编程语言,同样具备强大的网络编程能力。接下来,我们将深入探讨 PHP 中网络连接的建立、Socket 编程、…

《深度学习》——ResNet网络

文章目录 ResNet网络ResNet网络实例导入所需库下载训练数据和测试数据设置每个批次的样本个数判断是否使用GPU定义残差模块定义ResNet网络模型导入GPU定义训练函数定义测试函数创建损失函数和优化器训练测试数据结果 ResNet网络 ResNet(Residual Network&#xff0…

为什么要学习AI、掌握AI技能有什么用?

随着人工智能的迅速的发展,DeepSeek的爆火,加之目前就业环境的走向,越来越多的职场朋友开始关注到AI的发展,重视AI技能的掌握。不少同学都会问:“职场人为什么要学习AI、掌握AI技能?” 为什么要学AI 现…

AIP-146 泛化域

编号146原文链接AIP-146: Generic fields状态批准创建日期2019-05-28更新日期2019-05-28 API中的大多数域,无论是在请求、资源还是自定义应答中,都有具体的类型或模式。这个模式是约定的一部分,开发者依此约定进行编码。 然而,偶…

vue3和vue2的组件开发有什么区别

Vue3和Vue2在组件开发上存在不少差异,下面从多个方面详细介绍: 响应式原理 Vue2:用Object.defineProperty()方法来实现响应式。打个比方,它就像给对象的每个属性都安排了一个“小管家”,属性被访问或修改时&#xff0…

【NLP 25、模型训练方式】

目录 一、按学习范式分类 1. 监督学习(Supervised Learning) 2. 无监督学习(Unsupervised Learning) 3. 半监督学习(Semi-supervised Learning) 4. 强化学习(Reinforcement Learning, RL&#x…

1-知识图谱-概述和介绍

知识图谱:浙江大学教授 陈华军 知识图谱 1课时 http://openkg.cn/datasets-type/ 知识图谱的价值 知识图谱是有什么用? 语义搜索 问答系统 QA问答对知识图谱:结构化图 辅助推荐系统 大数据分析系统 自然语言理解 辅助视觉理解 例…

零基础学QT、C++(一)安装QT

目录 如何快速学习QT、C呢? 一、编译器、项目构建工具 1、编译器(介绍2款) 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢? 那就是项目驱动法&…

STM32外设SPI FLASH应用实例

STM32外设SPI FLASH应用实例 1. 前言1.1 硬件准备1.2 软件准备 2. 硬件连接3. 软件实现3.1 SPI 初始化3.2 QW128 SPI FLASH 驱动3.3 乒乓存储实现 4. 测试与验证4.1 数据备份测试4.2 数据恢复测试 5 实例5.1 参数结构体定义5.2 存储参数到 SPI FLASH5.3 从 SPI FLASH 读取参数5…

Leetcode2080:区间内查询数字的频率

题目描述: 请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 。 子数组中一个值的 频率 指的是这个子数组中这个值的出现次数。 请你实现 RangeFreqQuery 类: RangeFreqQuery(int[] arr) 用下标从 0 开始的整数数组 arr 构造…

Spring Boot自动装配:约定大于配置的魔法解密

#### 一、自动装配的哲学思考 在传统Spring应用中,开发者需要手动配置大量的XML或JavaConfig。Spring Boot通过自动装配机制实现了**约定大于配置**的设计理念,其核心思想可以概括为: 1. **智能预设**:基于类路径检测自动配置 2…

Fiddler笔记

文章目录 一、与F12对比二、核心作用三、原理四、配置1.Rules:2.配置证书抓取https包3.设置过滤器4、抓取App包 五、模拟弱网测试六、调试1.线上调试2.断点调试 七、理论1.四要素2.如何定位前后端bug 注 一、与F12对比 相同点: 都可以对http和https请求进行抓包分析…

Python爬虫-猫眼电影的影院数据

前言 本文是该专栏的第46篇,后面会持续分享python爬虫干货知识,记得关注。 本文笔者以猫眼电影为例子,获取猫眼的影院相关数据。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) …

linux笔记:shell中的while、if、for语句

在Udig软件的启动脚本中使用了while循环、if语句、for循环,其他内容基本都是变量的定义,所以尝试弄懂脚本中这三部分内容,了解脚本执行过程。 (1)while循环 while do循环内容如下所示,在循环中还用了expr…

利用分治策略优化快速排序

1. 基本思想 分治快速排序(Quick Sort)是一种基于分治法的排序算法,采用递归的方式将一个数组分割成小的子数组,并通过交换元素来使得每个子数组元素按照特定顺序排列,最终将整个数组排序。 快速排序的基本步骤&#…

从零到一实现微信小程序计划时钟:完整教程

在本教程中,我们将一起实现一个微信小程序——计划时钟。这个小程序的核心功能是帮助用户添加任务、设置任务的时间范围,并且能够删除和查看已添加的任务。通过以下步骤,我们将带你从零开始实现一个具有基本功能的微信小程序计划时钟。 项目…

idea日常报错之UTF-8不可映射的字符

目录 一、UTF-8不可映射的字符的解决 1、出现这种报错的情形 2、具体解决办法 前言: 在我们日常代码编写的时候可能会遇到各式各样的错误,有时候并不是你改动了代码,而是莫名其妙就出现的报错,今天我就遇到一个在maven编译的时候…

人工智能技术-基于长短期记忆(LSTM)网络在交通流量预测中的应用

人工智能技术-基于长短期记忆(LSTM)网络在交通流量预测中的应用 基于人工智能的智能交通管理系统 随着城市化进程的加快,交通问题日益严峻。为了解决交通拥堵、减少交通事故、提高交通管理效率,人工智能(AI&#xff…

HTTP FTP SMTP TELNET 应用协议

1. 标准和非标准的应用协议 标准应用协议: 由标准化组织(如 IETF,Internet Engineering Task Force)制定和维护,具有广泛的通用性和互操作性。这些协议遵循严格的规范和标准,不同的实现之间可以很好地进行…