深入理解STM32中断控制器:NVIC的工作原理与配置方法

在STM32微控制器中,中断控制是实现外部事件响应和实时任务调度的重要机制,其中中断优先级的配置和管理是至关重要的。NVIC(Nested Vectored Interrupt Controller)是STM32微控制器上的中断控制器,负责接收、管理和分发中断请求。本文将深入探讨STM32中断控制器NVIC的工作原理和配置方法,以帮助开发人员更好地理解和使用中断机制。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

NVIC的工作原理
NVIC是一种嵌套式中断控制器,能够处理多个中断优先级,允许嵌套中断,且能够提供低延迟的中断响应。它主要包括以下几个关键特性和组成部分:

1. 中断优先级分组:STM32将中断优先级划分为组优先级(Group Priority)和子优先级(Subpriority),可以根据具体的应用需求进行配置。不同的优先级分组方式会影响中断的响应和处理顺序。

2. 中断优先级管理:NVIC能够管理各个中断通道的优先级,响应优先级较高的中断请求,并进行嵌套中断处理。

3. 中断使能和禁止:NVIC允许配置每个中断通道的使能和禁止状态,开发人员可以根据需求动态地控制中断的触发和处理。

4. 中断向量表:NVIC通过中断向量表来存储中断服务函数的地址,当中断发生时,NVIC可以根据中断号查找相应的中断服务函数地址并跳转执行。

NVIC的配置方法
在STM32中,通过配置NVIC可以实现中断优先级的管理和中断处理的使能与禁止。以下是配置NVIC的基本方法:

1. 设置中断优先级分组:在STM32CubeMX或者手动配置的情况下,可以选择合适的中断优先级分组方式。通常有四种模式可供选择:0位优先级分组(3位抢占优先级,1位响应优先级)、1位优先级分组(2位抢占优先级,2位响应优先级)、2位优先级分组(1位抢占优先级,3位响应优先级)和 3位优先级分组(4位抢占优先级,0位响应优先级)。

2. 配置中断优先级:在初始化中断时,可以使用HAL库提供的函数或者直接写寄存器的方式对中断的优先级进行配置。每个具体的中断通道都有自己的优先级寄存器,可以单独配置。

3. 使能和禁止中断:通过编程控制NVIC相应的寄存器,可以实现对中断的使能和禁止。使能某个中断意味着当中断请求发生时,该中断会被处理;而禁止中断则会忽略该中断请求。

下面是一个使用HAL库进行中断优先级配置的示例代码:

```c
#include "main.h"
#include "stm32f4xx_hal.h"void SystemClock_Config(void);
void Error_Handler(void);
static void MX_GPIO_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();HAL_NVIC_SetPriority(EXTI0_IRQn, 1, 0);  // 配置外部中断0的优先级,0位抢占优先级,1位响应优先级HAL_NVIC_EnableIRQ(EXTI0_IRQn);  // 使能外部中断0while (1){// 主循环代码}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;// 省略时钟配置代码
}void Error_Handler(void)
{while (1){// 错误处理代码}
}static void MX_GPIO_Init(void)
{__HAL_RCC_GPIOC_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_13;GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
```

在示例代码中,我们使用HAL_NVIC_SetPriority函数对外部中断0的优先级进行了配置,并使用HAL_NVIC_EnableIRQ函数使能了外部中断0。

总结
通过本文的介绍,我们深入理解了STM32中断控制器NVIC的工作原理和配置方法。了解NVIC的工作原理和掌握配置方法对于理解中断响应机制、优先级管理和中断使能与禁止具有重要意义。
希望本文能够帮助开发人员更好地理解和使用STM32中断控制器,从而更高效地开发STM32嵌入式项目。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

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

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

相关文章

ios设备解锁 --Apeaksoft iOS Unlocker

Apeaksoft iOS Unlocker是一款针对iOS系统的密码解锁工具。其主要功能包括解锁多种锁屏类型,包括数字密码、Touch ID、Face ID和自定义密码。此外,它还可以帮助用户删除iPhone密码以进入锁屏设备,忘记的Apple ID并将iPhone激活为新的&#xf…

二叉树的锯齿形遍历,力扣

目录 题目: 我们直接看题解吧: 快速理解解题思路小建议: 解题方法: 相似题目对比分析: 解题分析: 解题思路: 补充说明: 思路优化: 代码实现(层序遍历倒序): 题…

备战蓝桥杯---动态规划(基础2)

本专题主要是介绍几个比较经典的题目: 假设我们令f[i]为前i个的最长不下降子序列,我们会发现难以转移方程很难写(因为我们不知道最后一个数)。 于是,我们令f[i]为以i结尾的最长不下降子序列,这样子我们就可…

Leetcode 第 112 场双周赛题解

Leetcode 第 112 场双周赛题解 Leetcode 第 112 场双周赛题解题目1:2839. 判断通过操作能否让字符串相等 I思路代码复杂度分析 题目2:2840. 判断通过操作能否让字符串相等 II思路代码复杂度分析 题目3:2841. 几乎唯一子数组的最大和思路代码复…

C#系列-访问SqlServer+Mysql+Oracle数据库(6)

目录 一、 C#访问SqlServer数据库 二、 C#异步读取SqlServer数据库 三、 C#访问Mysql数据库 四、 C#访问Oracle数据库 一,C#访问SqlServer数据库 在C#中访问SQL Server数据库,你通常会使用ADO.NET (ActiveX Data Objects .NET)&…

“深度解析Java虚拟机:运行时数据区域、垃圾收集、内存分配与回收策略、类加载机制“

"深度解析Java虚拟机:运行时数据区域、垃圾收集、内存分配与回收策略、类加载机制" Java 虚拟机一、运行时数据区域程序计数器Java 虚拟机栈本地方法栈堆方法区运行时常量池直接内存 二、垃圾收集判断一个对象是否可被回收1. 引用计数算法2. 可达性分析算…

Python列表中的insert功能及用法举例

Python列表中的insert功能及用法举例 🌵文章目录🌵 🌳引言🌳🌳insert()🌳🍀功能介绍🍀🍀语法🍀🍀示例🍀🍀注意事项&#x…

【Java】小白友好的SpringBoot简单开发基础学习笔记

目录 简介 简单代码示例 配置文件种类 选择特定profile 从配置文件获取数据 Spring Boot整合MyBatis代码示例 简介 Spring Boot是一个用于创建独立、生产级别的Spring应用程序的开源框架。它简化了基于Spring框架的应用程序的开发和部署过程,提供了一种快速构…

【前后端的那些事】webrtc入门demo(代码)

文章目录 前端代码apivue界面 后端modelwebsocketconfigresource 龙年到了,先祝福各位龙年快乐,事业有成! 最近在搞webrtc,想到【前后端的那些事】好久都没有更新了,所以打算先把最近编写的小demo发出来。 p2p webrt…

for循环的多重跳出

for的多重跳出 1.前言2.标签使用3.使用异常的方式 本文在jdk17中测试通过 1.前言 前段时间面试时,面试官问我多重for循环如何跳出,我懵了,今天特别的研究了一下 本文主要说的不是continue与break,而是少用的另类操作 1.continue:…

数据结构——5.4 树、森林

5.4 树、森林 概念 树的存储结构 双亲表示法 孩子表示法 孩子兄弟表示法(二叉树表示法): 二叉树每个结点有三个变量 ① 二叉树结点值:原树结点的值 ② 二叉树左孩子:原树结点的最左孩子 ③ 二叉树右孩子&#xff1a…

计算机网络——04接入网和物理媒体

接入网和物理媒体 接入网络和物理媒体 怎样将端系统和边缘路由器连接? 住宅接入网络单位接入网络(学校、公司)无线接入网络 住宅接入:modem 将上网数据调制加载到音频信号上,在电话线上传输,在局端将其…

【C语言|数据结构】数据结构顺序表

目录 一、数据结构 1.1概念 1.2总结 1.3为什么需要数据结构? 二、顺序表 1.顺序表的概念及结构 1.1线性表 2.顺序表分类 2.1顺序表和数组的区别 2.2顺序表的分类 2.2.1静态顺序表 2.2.1.1概念 2.2.1.2缺陷 2.2.2动态顺序表 三、动态顺序表的实现 3.1新…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南,帮助您了解如何部署一个高可用的 Linux 集群: 确定需求和目标:在开始部署之前,您需要明确高可用性的定义和目标。对于一些组织而言,高…

寒假提升(6)[杂烩典型题]

天可补,海可填,南山可移。 日月既往,不可复追。 ——曾国藩 知识点 1、关于整形提升2、大小端3、使用函数时参数的影响3、1、计算大小(有函数存在)3、2、计算大小(无函数存在)3、3、形参和实参 4、关于赋值 1、关于整形提升 char a101; int …

算法竞赛例题讲解:平方差 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C平方差

题目描述 给定 L L L和 R R R,问 L ≤ x ≤ R L\leq x \leq R L≤x≤R中有多少个数 x x x满足存在整数 y y y, z z z使得 x y 2 − z 2 x y^{2} - z^{2} xy2−z2。 输入格式 输入一行包含两个整数 L L L, R R R,用一个空格分隔。 输出格式 输出一…

计算机设计大赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) …

刷题13 数组

989. 数组形式的整数加法 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。例如,对于 num 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num k 的 数组形式 。 输入…

12118 - Inspector‘s Dilemma (UVA)

题目链接如下: Online Judge 脑雾严重,这道题一开始我想的方向有问题.....后来看了别人的题解才写出来的..... 用的是欧拉路径的充要条件;以及数连通块。需要加的高速路数目 连通块个数 - 1 sum(每个连通块中连成欧拉路径需要…

EMC学习笔记(二十三)降低EMI的PCB设计指南(三)

双层板电源分配 1.单点与多点分布2.星型分布3.创建网格平面4.旁路和磁珠5.将噪声保持在芯片附近 tips:资料主要来自网络,仅供学习使用。 1.单点与多点分布 在一个真正的单点配电系统中,每个有源元件都有自己独立的电源和地,这些…