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

news2024/9/20 21:41:28

中断

  • 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;//抢占优先级数值配置为0
	NVICInitStruct.NVIC_IRQChannelSubPriority= 0;//子优先级数值配置为0
	NVICInitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVICInitStruct);
}
void USART1_IRQHandler()//中断函数
{
    函数执行体;
}

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

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

相关文章

1688商品详情API返回值中的供应商信息

在使用1688(阿里巴巴中国站)的商品详情API时,API的返回值中通常会包含丰富的产品信息,包括供应商(卖家)的信息。不过,具体的返回值内容可能会根据API的版本、调用参数以及API的更新情况有所不同…

什么是国际网络组网?

国际网络组网是指通过互联网技术将全球各地的不同网络相互连接,以实现信息交换与资源共享的过程。在这一过程中,涉及到数据传输、协议转换、跨网络通信等多个技术领域,旨在实现全球信息的无缝互联互通。国际网络组网的主要目标是扩大网络覆盖…

半导体RFID识别系统134.2K低频读写器|读写头JY-V610之SECS协议通信说明

什么是SECS协议? SECS(Semiconductor Equipment Communication Standard)协议是半导体设备通讯标准,用来统一各个生产设备之间以及生产设备和控制设备之间的通讯,由SEMI(Semiconductor Equipment and Mate…

手搓滑动窗口

前言&#xff1a;好久没写滑动窗口&#xff0c;导致一些边界问题处理不好&#xff0c;back和top的初始值都搞不好 #include<bits/stdc.h> using namespace std;const int N (int)1e65; int n,m; int a[N],b[N]; int back,top;int main(){cin >> n >> m;for(…

【前端设计方案】H5 图片懒加载 SDK

实现思路 定义<img srcloading.png data-srcxxx.png/>页面滚动&#xff0c;图片露出时&#xff0c;将 data-src 赋值给 src 注意事项&#xff1a;滚动要节流 技术要点 获取图片的位置 elem.getBoundingClientRect() 图片 top < window.innerHeight 时&#xff0c;图片…

【学习笔记】爱立信SPO 1400 CRAFT软件基础知识9——Bridge(网桥)显示参数

一、前期准备 条件1.确认已正确使用爱立信SPO 1400 CRAFT软件通过网络登录设备&#xff08;以下简称NE&#xff09; 具体登录教程参考&#xff1a;使用爱立信SPO 1400 CRAFT软件通过网络登录设备的详细过程 二、学习内容&#xff1a; 提示&#xff1a;学习爱立信SPO 1400 CRA…

阿里员工:33岁,房贷还剩223万,每月还1.5W,失业中

中年失业 中年失业&#xff0c;真的很难。 虽然人到中年&#xff0c;一般多少都会有些储蓄&#xff0c;但也意味着会有更多的支出。 最近&#xff0c;一位阿里员工&#xff08;这会可能是前阿里员工了&#xff09;在社区分享到自己的经历。 贴主 33 岁&#xff0c;作为已结婚有…

搬瓦工日本软银线路VPS测评

搬瓦工日本VPS支持softbank/软银&#xff0c;Japan: Osaka (Softbank) &#xff0c;网络在2.5Gbps-10Gbps之间&#xff0c;底层为KVM虚拟、纯SSD阵列、支持在多机房之间切换。搬瓦工软银来国内的网络情况怎么样&#xff1f;测评数据大致如下&#xff1a; CPU具体型号不知道&…

深入了解指针(6)

文章目录 1.函数指针数组2.转移表3.回调函数 1.函数指针数组 存放函数指针的数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int add(int x, int y) {return x y; } int sub(int x, int y) {return x - y; }int main() {int (*p1)(int x, int y) add;int (…

基于python的百度迁徙迁入、迁出数据分析(八)

副标题&#xff1a;从百度迁徙数据看——重大公共卫生事件的影响 先来回顾一下&#xff0c;迁徙规模指数定义&#xff1a;反映迁入或迁出人口规模&#xff0c;城市间可横向对比。 2019年—2022年的部分春运数据已经不可查&#xff0c;用的环哥的数据&#xff0c;可参考环哥的…

LVS原理及相关配置

1. 描述以及工作原理 1. 什么是 LVS linux virtural server 的简称&#xff0c;也就是 linxu 虚拟机服务器&#xff0c;这是一个 由章文嵩博士发起的开源项目&#xff0c;官网是 http://www.linuxvirtualserver.org,现在 lvs 已经是 linux 内核标 准的一部分&#xff0c;使用…

用python的manim库实现表格格式操作【table 下】

1.Table 是 Manim 中用于创建一个包含文本或其他 数学符号的表格的类 Table 是 Manim 中用于创建一个包含文本或其他 数学符号的表格的类它能够帮助你在场景中清晰地展示数据或信息。 参数解释 table: 一个二维数组或列表&#xff0c;表示表格中的内容。每个子列表代表表格的…

zigbee笔记:十一、设备网络类型展示与按键实验

一、设备网络类型展示 利用开发板上的三个LED灯来显示设备当前的网络类型&#xff08;协调器、路由器、终端&#xff09;。 1、添加LED灯的初始化代码 1&#xff09;开发板LED原理图 2&#xff09;在模板工程的...Projects\zstack\Samples\smartHomeApp\Source目录下新建两个文…

【TabBar嵌套Navigation案例-发现页面-按钮上的图片旋转 Objective-C语言】

一、接下来,我们来做这个,点击以后,让它出一个蓝色的View 1.就是我们示例程序的这种效果, 一点击,让这个按钮旋转,然后呢,再让它出来一个蓝色的View, 首先,我们要去监听它的点击事件,这是第一,我点击以后,我要做一些什么样的操作,要有点击事件, 所以呢,我要把…

Processing中库和导出PDF内容

一.库 1.使用库的方式 从菜单栏&#xff08;Sketch Menu)选择导入库(import labrary),选择一个我们要添加或者成需要用到的库。 例如&#xff1a;当我们需要添加PDF扩展库时&#xff0c;需要将下面这段代码添加到草图中。 import processing.pdf.*; 除了processing里的库&…

ElasticSearch聚合操作详解

文章目录 聚合操作聚合的分类测试数据Metric AggregationBucket Aggregation获取job的分类信息限定聚合范围Range & Histogram聚合聚合嵌套 Pipeline Aggregation聚合的作用范围排序ES聚合分析不精准原因分析聚合性能优化启用 eager global ordinals 提升高基数聚合性能插入…

【Unity-本地化】简单的游戏本地化处理方案

目录 0 前言1 多语言配置2 本地化实现2.1 读取多语言文本的通用方法2.2 动态文本本地化2.3 静态文本本地化 3 方案扩展3.1 LanguageText扩展3.1.1 展示Excel里对应ID的文本3.1.2 自动填充ID3.1.3 同步prefab的修改3.1.4 完整代码 3.2 自动LanguageText挂载 4* 内嵌文本图片的本…

AI预测福彩3D采取888=3策略+和值012路或胆码测试8月14日新模型预测第56弹

好长时间没进行总结了&#xff0c;今天咱们做一个总结&#xff0c;总结一下最新模型经过50多期的测试结果&#xff1a; 经过近50多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率…

restful传值

GetMapping 普通的get请求 后端&#xff1a; restfule的get请求 通过/asd/123这种方式get请求传入后端 前端 url: /system/role/deptTree/ roleId / tenantId, method: get后端PathVariable从path上取对应的值 通过 GetMapping(value "/deptTree/{roleId}/{tenan…

Windows平台RTSP|RTMP播放器如何实时调节音量

我们在做Windows平台RTSP、RTMP播放器的时候&#xff0c;有这样的技术需求&#xff0c;特别是多路监控的时候&#xff0c;并不是每一路audio都需要播放出来的&#xff0c;所以&#xff0c;这时候&#xff0c;需要有针对音量调节的设计&#xff1a; /** smart_player_sdk.cs* C…