当前位置: 首页 > news >正文

06:【stm32】中断一:NVIC的配置

中断

  • 1、中断的简介
    • 1.1、什么是中断
    • 1.2、为什么需要中断
  • 2、中断的优先级
    • 2.1、中断优先级的表示方法
  • 3、NVIC
    • 3.1、什么的NVIC
    • 3.2、NVIC的内部结构
    • 3.3、中断向量表
    • 3.4、程序实现
    • ①开启中断源
    • ②配置NVIC
    • ③中断响应函数

1、中断的简介

1.1、什么是中断

   正在进行的事务被突发事件打断,转而处理这个突发事件,突发事件处理完成后回到
被打断的事务继续执行,这一处理突发事件的过程叫做中断。
在这里插入图片描述
【注】
中断结束后,回来执行的事件不再是从头开启,而是接着继续执行。

体现在程序中就是,CPU在执行主函数里面的程序,然后突然有一个中断源触发,CPU检测到中断触发后就会跳出主函数,进而去执行中断函数里面的程序。当中断函数里面的程序执行完后,在回到主函数里面接着执行没有执行完的程序。

1.2、为什么需要中断

   有突发性的,紧急性的事件就需要使用中断来处理,比如:主函数中里面拥有大量的循环程序,进而执行起来需要耗费大量的时间,而有一个事件是突发性的,比如按钮控制灯亮灭,当检测到按钮按下时,CPU才执行灯的动作,所以我们不能够将这个事件放在主程序里面,如果放在主程序里面时,当CPU还在执行循环程序,当按下按钮,程序还没有执行到判断按钮的程序,所以灯的状态不会改变。

2、中断的优先级

   中断优先级:中断处理的紧急程度叫做中断优先级。

  • 中断排队:在中断响应的过程中又有新的中断到来,新到来的中断需要排队,根据中断优先级决定排队的顺序
    在这里插入图片描述
  • 中断嵌套:中断处理过程被更紧急的中断源打断
    在这里插入图片描述

2.1、中断优先级的表示方法

   中断优先级分为2个,抢占优先级和子优先级,下图为2位表示一个优先级。我们可以自己划分位数。

在这里插入图片描述例如下面的几种情况:
中断嵌套
在这里插入图片描述
中断排队

在这里插入图片描述

3、NVIC

3.1、什么的NVIC

   NVIC其实就是中断控制器,它不属于片上外设,它在CPU中的内部,复制管理中断。

3.2、NVIC的内部结构

   中断的模型是:片上外设产生中断源–>中断信号传递给NVIC–>去查中断向量表,匹配中断函数。

在这里插入图片描述
NVIC主要负责中断源的开关,优先级的配置,然后中断仲裁。

在这里插入图片描述
中断优先级可以分组的。如下图所示:

在这里插入图片描述

3.3、中断向量表

   中断向量表:Flash存储器内部从地址0开始的一段区域,按照中断号排列,每4个字节存
储一个中断响应函数的地址(在使用手册的9)

在这里插入图片描述
在这里插入图片描述

3.4、程序实现

   我们以USART1中断为例
在这里插入图片描述

  • ①开启中断源

我们在USART.h里面找到ITconfig函数,这是配置中断是函数
在这里插入图片描述
然后我们右键点击go to,然后我们查看这个函数里面的形式参数里面取值

在这里插入图片描述

 //打开USART的某个中断源USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  • ②配置NVIC

我们在杂项miss.h里面找到这2个函数,分别是中断优先级的分组,初始化NVIC的某一路中断开关
在这里插入图片描述
1、优先级分组
然后我们右键点击go to,然后我们查看这个函数里面的形式参数里面取值
在这里插入图片描述

//分为2位
NVIC_PriorityGroupConfig(NVIC_priorityGroup_2);

2、初始化NVIC的某一路中断开关
然后我们右键点击go to,然后我们查看这个函数里面的形式参数里面取值
在这里插入图片描述

我们通过翻译得出NVIC_InitStruct是结构体指针变量,这个变量里面有很多的元素需要我们去配置。我们打开这个结构体的定义去看看。

在这里插入图片描述
2.1、 我们看看中断源选择这个元素

在这里插入图片描述

NVIC_InitTypeDef NVICInitStruct;//创建一个结构体变量
NVICInitStruct.NVIC_IRQChannel = USART1_IRQn;

2.2、中断分组数值这个元素

在这里插入图片描述

NVICInitStruct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级数值配置为0
NVICInitStruct.NVIC_IRQChannelSubPriority= 0;//子优先级数值配置为0

2.3、开关

NVICInitStruct.NVIC_IRQChannelCmd = ENABLE;

所以配置NVIC的最终代码如下:

NVIC_PriorityGroupConfig(NVIC_priorityGroup_2);   NVIC_InitTypeDef NVICInitStruct;//创建一个结构体变量
NVICInitStruct.NVIC_IRQChannel = USART1_IRQn;   
NVICInitStruct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级数值配置为0
NVICInitStruct.NVIC_IRQChannelSubPriority= 0;//子优先级数值配置为0
NVICInitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVICInitStruct);
  • ③中断响应函数

    通过weak方法进行同名的覆盖
    在这里插入图片描述
    在这里插入图片描述

    void USART1_IRQHandler()//中断函数
    {函数执行体;
    }
    

最终完整的代码如下:

int main()
{USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打开USART1的中断源NVIC_PriorityGroupConfig(NVIC_priorityGroup_2);   NVIC_InitTypeDef NVICInitStruct;//创建一个结构体变量NVICInitStruct.NVIC_IRQChannel = USART1_IRQn;   NVICInitStruct.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级数值配置为0NVICInitStruct.NVIC_IRQChannelSubPriority= 0;//子优先级数值配置为0NVICInitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVICInitStruct);
}
void USART1_IRQHandler()//中断函数
{函数执行体;
}

相关文章:

06:【stm32】中断一:NVIC的配置

中断 1、中断的简介1.1、什么是中断1.2、为什么需要中断 2、中断的优先级2.1、中断优先级的表示方法 3、NVIC3.1、什么的NVIC3.2、NVIC的内部结构3.3、中断向量表3.4、程序实现①开启中断源②配置NVIC③中断响应函数 1、中断的简介 1.1、什么是中断 正在进行的事务被突发事件打…...

Flutter简介

Flutter是一个由Google开发的开源移动UI框架,它允许开发者使用Dart语言来构建高性能、高保真的iOS和Android应用。Flutter的设计理念是"编写一次,到处运行"(write once, run everywhere),这意味着开发者可以…...

WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一

一、产品概况 对讲机市场是一个技术成熟且具有广泛应用前景的市场。对讲机作为无线通信设备的一种,在许多不同的领域和业务中发挥着重要作用。从技术发展角度来看,对讲机经历了从模拟到数字的转型,以及从简单通信工具向多功能设备的演进。当…...

ctfshow-web入门-sql注入(web191-web195)

目录 1、web191 2、web192 3、web193 4、web194 5、web195 1、web191 过滤了 ascii 使用 ord 代替: import requests import string url "http://a585c278-320a-40e7-841f-109b1e394caa.challenge.ctf.show/api/index.php" out for j in range(1…...

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer (SP) 4.1.3 Program Counter (PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register (SPSR) 4.2 Proc…...

SpringIOC整合dbUtil做的增删改查以及转账业务的实现

目录 一、xml方式实现 1.介绍lombok插件 2.功能 3.步骤 3.1 idea安装插件(只做一次) 3.2 添加坐标 3.3 编写注解 4.核心类 4.1 QueryRunner 4.2 query() 查询 4.3 update() 增删改 5.配置文件applicationContext.xml 6.junit测试 6.1使用步骤 6.1.1 坐标 6.1.2…...

【Nacos无压力源码领读】(二) 集成 LoadBanlancer 与 OpenFeign

上一篇文章中, 详细介绍了 Nacos 注册中心的原理, 相信看完后, 大家应该完全掌握了 Nacos 客户端是如何自动进行服务注册的, 以及 Nacos 客户端是如何订阅服务实例信息的, 以及 Nacos 服务器是如何处理客户端的注册和订阅请求的; 本文承上启下, 在订阅服务实例的基础上, 介绍如…...

CP AUTOSAR标准之DefaultErrorTracer(AUTOSAR_SWS_DefaultErrorTracer)(更新中……)

1 简介和功能概述 本规范描述了默认错误跟踪器的API。基础软件中检测到的所有开发和运行时错误都会报告给此模块。API参数允许跟踪错误来源和类型: 检测到错误的模块检测到错误的函数错误类型此模块API背后的功能不在本规范的范围内。软件开发人员和软件集成商应根据其特定应用…...

SpringMVC (发送请求——>参数传递—— >响应数据)

设置请求访问路径 RequestMapper:将请求访问路径和我们业务层的方法联系起来 ResponseBody:将我们业务层方法的返回值转化为json,xml或其他格式的数据返回给页面 两种请求 get请求 post请求 测试案例 RequestMapping("/getNameAndAge&…...

认识Modbus RTU与Modbus TCP

(选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 ) Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较: Modbus RTU 协议类型: …...

如何在 Kubernetes 中使用 ClickHouse 和 JuiceFS

ClickHouse 结合 JuiceFS 一直是一个热门的组合,社区中有多篇实践案例。今天的文章来自美国公司 Altinity,一家提供 ClickHouse 商业服务的企业,作者是 Vitaliy Zakaznikov,他尝试了这个组合并公开了过程中使用的代码。原文有两篇…...

云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 ACO蚁群优化 4.2 蛙跳优化 5.完整程序 1.程序功能描述 云计算任务调度优化,优化目标位任务消耗时间,调度后的经济效益以及设备功耗,对比蚁群优化算法和蛙跳优化…...

基于双PI+EKF扩展卡尔曼滤波的PMSM速度控制simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 双PI控制器设计 4.3 扩展卡尔曼滤波器(EKF) 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于双PIEKF扩展卡尔曼滤波的PMSM速度控制simulink建模与仿真。对比基于双PI的扩展卡…...

医疗器械注册资源宝库数屿医械官方平台!

医学影像设备市场作为医疗器械领域的佼佼者,技术门槛高且规模庞大,2021年全球规模达458亿美元,预计2022年逼近500亿美元,增长动力源自技术革新与临床需求攀升。中国市场亦不甘落后,受政策驱动与市场需求双重提振&#…...

Django如何移除数据库字段?

关键步骤: 第一步:python manage.py makemigrations 你的项目名称第二步: python manage.py migrate (.venv) PS D:\python_workpace\django_xitong_shezhi\pythonProject\myproject> python manage.py makemigrations myproject Migra…...

阶段项目——拼图小游戏

Java学习笔记(新手纯小白向) 第一章 JAVA基础概念 第二章 JAVA安装和环境配置 第三章 IntelliJ IDEA安装 第四章 运算符 第五章 运算符联系 第六章 判断与循环 第七章 判断与循环练习 第八章 循环高级综合 第九章 数组介绍及其内存图 第十章 数…...

基于本地消息表实现分布式事务(最终一致性)

前言 传统单体架构下,所有的功能模块都在一个应用下,所有的代码和业务逻辑都在同一个应用下实现,所以保证数据的一致性就很简单,保证相关操作都在同一个本地事务下就可以了。 但是在微服务架构下,将一个应用拆分成了…...

大数据mapper书写范式hdfs

文章目录 1. 大数据mapper书写范式hdfs 1. 大数据mapper书写范式hdfs import json import sysdef read_input(input_stream):for line in input_stream:yield line.rstrip(\n)def load_json_data(json_line):try:data json.loads(json_line)unique_id data.get(id)combined_…...

ubuntu将软件放到任务栏

右键点击这个 pycharm 方法1: 方法2: sudo nano /usr/share/applications/PyCharm.desktop 编辑这个 [Desktop Entry] NamePyCharm CommentPyCharm Integrated Development Environment Exec/path/to/PyCharm.sh Icon/path/to/PyCharm.svg Terminalf…...

Spring Boot 参数校验 Validation 使用

概述 当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是必不可少的活。前、后端校验都是保证参数的准确性的手段之一,前端校验并不安全,任何人都可以通过接口来调用我们的服务,就算…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如&#xff1a…...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...