STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介

什么是 NVIC NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller 。它 是内核的器件,所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且具有 256 级的可编程中断设置。然而芯片厂商一般不会把内核的这些资源全部用完,如 STM32F407 的系统中断有 10 个,外部中断有82 个。

1、NVIC寄存器

2、中断优先级

STM32 中的中断优先级可以分为:抢占式优先级和响应优先级,响应优先级也称子优先级,每个中断源都需要被指定这两种优先级。抢占式优先级和响应优先级的区别:
抢占优先级 :抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。
响应优先级 :抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断。
还有一种情况就是当两个或者多个中断的抢占式优先级和响应优先级相同时,那么就遵循自然优先级,看中断向量表的中断排序,数值越小,优先级越高。
对于 NVCI 的中断优先级分组: STM32F407 将中断分为 5 个组,组 0~4 。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。
所以中断优先级分组决定了中断优先级控制寄存器位数的分配设置,设置哪几位是抢占优先级,哪几位是响应优先级,所以中断优先级分组就决定了中断的抢占优先级和响应优先级的设置范围。
通过这个表,我们就可以清楚的看到组 0~4 对应的配置关系,例如优先级分组设置为 3 , 那么此时所有的 82 个中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级, 低 1 位是响应优先级。每个中断,你可以设置抢占优先级为 0~7 ,响应优先级为 1 0 。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
HAL_NVIC_SetPriorityGrouping 函数
HAL_NVIC_SetPriorityGrouping 是设置中断优先级分组函数。 这个函数在一个工程里基本只调用一次,而且是在程序 HAL 库初始化函数里面已经被调 ,后续就不会再调用了。因为当后续调用设置成不同的中断优先级分组时,有可能造成前面设置好的抢占优先级和响应优先级不匹配。

3、NVIC的使用

二、EXTI 简介

EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/ 中断请求的边沿检测器组成。每 一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
产生中断线路目的使把输入信号输入到 NVIC,进一步运行中断服务函数,实现功能。而产生事件线路目的是传输一个脉冲信号给其他外设使用,属于硬件级功能。
对于正点原子:
EXTI 的功能框图是最直接把有关 EXTI 的知识点连接起来的图,掌握了该图的来龙去脉,就会对 EXTI 有了一个整体熟悉,编程时候可以得心应手。

三、如何使用中断

1、EXTI中断流程

EXTI 0-15这16根线会与gpio完成映射,EXTI16、17....等输入线是其他外设中断,比如闹钟,USB等,这两者统称为EXTI中断。

2、EXTI中断配置步骤

 其中步骤2-5可以使用HAL_GPIO_Init一步到位

四、HAL库中断回调处理机制

五、应用示例

应用步骤​​​​​​​

1、看原理图确定引脚连接

2、使能IO口时钟,完成IO口与中断线的映射关系,设置优先级,设置中断服务函数处理中断,设置中断回调函数实现具体中断处理操作。

按键消抖的实现:

按键按下(GPIO中断)
       |
       v
启动定时器(复位计数器)
       |
       v
   定时器计时(10ms)
       |
       v
定时器计数完成(触发中断)
       |
       v
检查按键状态(确认按下)
       |
       v
停止定时器,设置标志位
       |
       v
   主循环处理中断事件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WHAT - 容器化系列(一)

这里写目录标题 一、什么是容器与虚拟机1.1 什么是容器1.2 容器的特点1.3 容器和虚拟机的区别虚拟机(VM):基于硬件的资源隔离技术容器:基于操作系统的资源隔离技术对比总结应用场景 二、容器的实现原理1. Namespace(命…

【Java】一文看懂Thread 线程池的 7 种创建方式、任务队列及自定义线程池(代码示例)

本文摘要:【Java】Thread 线程池的 7 种创建方式及自定义线程池(代码示例版) 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专…

1. MySQL 数据库的基本操作

文章目录 【 1. SQL 的书写规则 】大小写规则常量的表示注释 【 2. RDBMS 术语 】Table 表Filed 域/字段Column 列Record 记录NULL 空值Constraint 约束数据的完整性范式 【 3. 数据库基本操作函数 】3.1 SHOW DATABASES 显示数据库3.2 CREATE DATABASE 创建数据库3.3 ALTER DA…

传输中的串扰(八)

串扰指的是有害信号从一个线网传递到相邻线网上。通常把噪声源所在的线网称为动态线或攻击线网,而把有噪声形成的线网称为静态线或受害线网。 静态线上的噪声电压的表现与信号电压完全一样。一旦在静态线上产生噪声电压,它们就会传播并在阻抗突变处出现反…

【JS重点知识03】定时器—间歇函数

一:间歇函数的应用场景 网页倒计时是需要每个一段时间需自动执行一段代码,而不需要手动去触发;间歇函数刚好满足了这一要求; 二:间歇函数的使用 1 开启定时器 语法规范: 1 setInterval(匿名函数,时间)…

HarmonyOS 鸿蒙DevEco:导入无法运行提示Sync failed

场景:导入官网下载的案例后导入发现无法运行模拟机,Notifications提示Sync failed... 解决:查看Cause发现是版本问题,通过修改相关内容来解决该问题 1、打开案例地址找到hvigor文件夹 2、打开hvigor-config.json5,将&…

【计算机毕设】SpringBoot校园资料分享平台的设计与实现 - 源码免费(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的校园资料分享平台,以满足学生在学习过程中对资料分享和获取的需求。具体目标包括&#xff1a…

YOLOv5改进(五)-- 轻量化模型MobileNetv3

文章目录 1、MobileNetV3论文2、代码实现2.1、MobileNetV3-small2.2、MobileNetV3-large 3、运行效果4、目标检测系列文章 1、MobileNetV3论文 Searching for MobileNetV3论文 MobileNetV3代码 MobileNetV3 是 Google 提出的一种轻量级神经网络结构,旨在在移动设备上…

《内网渗透实战攻略》读书笔记

一、书籍介绍 本书将分为三大部分,首先介绍内网渗透技术中涉及到的各类基础概念,并介绍攻击者视角中的入侵生命周期流程。其次进行环境搭建准备,并介绍各类常用工具的使用。z后通过9套内网环境的高强度实战训练,系统性的介绍和实践…

LeetCode-93. 复原 IP 地址【字符串 回溯】

LeetCode-93. 复原 IP 地址【字符串 回溯】 题目描述:解题思路一:回溯背诵版解题思路三:0 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0)&#xf…

PlantUML-使用文本来画时序图

介绍 PlantUML 是一个开源工具,用户可以使用纯文本描述来创建 UML (统一建模语言) 图形。由于它使用文本来描述图形,因此可以很容易地将这些描述与源代码一起存储在版本控制系统中。然后,PlantUML 负责将这些描述转换为图形。 资料 官方文…

阿里云短信服务使用(Java)

文章目录 一、流程1.打开短信服务2.提交材料申请资质3.资质通过后,申请短信签名并设置短信模板4.右上角设置AccessKey5.充值 二、参考官方文档调用API1.引入maven依赖2.调用API补充 一、流程 1.打开短信服务 登陆注册阿里云 搜索“短信服务”,点击“免…

C语言操作符详解(二)

统计整数在二进制中1的个数&#xff1a; 这是上一篇文章留下的问题&#xff0c;这里为大家作答&#xff1a; //统计二进制中1的个数 int statistics(int a) {int count 0;for (int i 0; i < 32; i){if (a & 1){count;}a a >> 1;}//while (a)//{// a a &…

React(五)UseEffect、UseRef

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期&#xff0c;但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时&#xff0c;网络请求&#xff0c;订阅等操作都是在生命周期中完成 import React, { Co…

网安速成之选择题(详细解析版)

网安速成之选择题 单选多选 单选 密码学的目的是&#xff08; C &#xff09;。 A. 研究数据压缩 B. 研究数据解密 C. 研究数据保密 D. 研究漏洞扫描 密码学的目的是研究数据加密&#xff0c;保证数据的机密性 数据机密性安全服务的基础是&#xff08; D &#xff09;。 A. 数…

11.2 选择排序

目录 11.2 选择排序 11.2.1 算法特性 11.2 选择排序 选择排序&#xff08;selection sort&#xff09;的工作原理非常简单&#xff1a;开启一个循环&#xff0c;每轮从未排序区间选择最小的元素&#xff0c;将其放到已排序区间的末尾。 设数组的长度为 &#x1d45b;…

杂牌记录仪TS视频流恢复方法

大多数的记录仪都采用了MP4/MOV文件方案&#xff0c;极少数的可能在用AVI文件&#xff0c;极极少数的在用TS文件方案。很多人可能不太解TS文件&#xff0c;这是一种古老的视频文件结构&#xff0c;下边这个案例我们来看下TS视频文件的恢复方法。 故障存储:8G存储卡/fat32文件系…

pdb文件名称被修改导致pdb文件加载失败的实战排查案例分享

目录 1、概述 2、问题说明 3、pdb文件加载失败的可能原因有哪些&#xff1f; 4、使用!sym noisy打开pdb加载详情&#xff0c;发现pdb文件名称确实被修改了 5、Windbg是如何知道要加载pdb文件名称的&#xff1f; C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表…

五类数据容器对比总结 知道喔!

五类数据容器对比总结 1.五类数据容器的区别 是否支持下标索引 支持&#xff1a;列表、元组、字符串---序列类型 不支持&#xff1a;集合、字典---非序列类型 是否支持重复元素 支持&#xff1a;列表、元组、字符串---序列类型 不支持&#xff1a;集合、字典---非序列类型 是…

Ray Tracing in one Weekend But on CUDA

Ray Tracing in one Weekend But on CUDA 环境说明项目代码项目内容思路实现方法效果 环境说明 代码运行在Visual Studio 2019环境&#xff0c;显卡为NVIDIA GeForce GTX 1650&#xff0c;CUDA版本为11.6&#xff0c;cuDNN版本为8.4.0。具体配置方式见CUDA C/C 从入门到入土 第…