STM32基础篇:中断编程 × NVIC ×

中断的概念

什么是中断

中断:正在进行的事务被突发事件打断,转而处理这个突发事件,突发事件处理完成后回到被打断的事务继续执行,这一处理突发事件的过程叫做中断。

对于STM32,由于中断源的触发,常规程序被打断,CPU转而运行中断响应函数,而后又回到常规程序的执行,这一过程叫做中断。

一些生活中的"中断":


为什么使用中断

突发性:随时地在任意时刻发生、没有预兆。

紧急性:需要马上被处理。

例如,电脑通过串口向STM32发送数据,但STM32不知道电脑什么时候会发送数据,无法提前做出准备;并且电脑发送数据,等不到主程序执行完再处理数据,只能打断主程序的执行。

更多关于中断的基础概念和相关术语可参考:
http://t.csdnimg.cn/LG2b9


中断优先级

表示方法

与51单片机不同(通过寄存器),STM32通过数字去表示中断的优先级(通过4个比特位表示数字),且中断优先级可分为抢占优先级子优先级,具体如下:

中断优先级
抢占优先级子优先级
bit3bit2bit1bit0
1:01:01:01:0

可以看出优先级一共有0000~1111,共16个优先级,其中0000优先级最高。


中断优先分组

对于抢占优先级和子优先级,不一定是2:2的数量关系。其可通过中断优先分组来进行配置。其数量组合如下:

当配置为0位抢占优先级4位子优先级时,所有的中断都不会嵌套。而 4位抢占优先级0位子优先级时,恰恰相反。


优先级规则

1、优先级的值越小,优先级越高。

2、遇到抢占优先级更高的中断,会发生"中断嵌套"。

3、未发生中断嵌套时会发生"中断排队",总优先级更高的中断排在前面。


中断源

2种中断源

"脉冲型"中断源(罕见):中断触发信号一闪而过。

"电平型"中断源(常见):中断触发信号持续,直到手动关闭,因此在中断响应函数结束前清除中断。


4种状态

不活动:中断没有被触发,或已响应结束。

活动:中断正在被响应。

挂起:中断正在排队等待处理。

活动且挂起:中断处理的过程中再次出发(仅脉冲型)。

值得一提的是,假如中断A被执行的过程中,又被中断B嵌套从而执行B,此时A、B均为活动状态。


NVIC简介

NVIC:译为"嵌套中断向量控制器",一种核心外设,位于Cortex-M3内核中,负责管理中断(例如:中断进入时保护现场、中断退出时还原现场、中断优先级的设置、中断仲裁等)


内部结构

如下图所示,对于Cortex-M3内核,其NVIC管理中断源的最大数量是81路(中断源0到中断源80)。中断源往里走,有一个开关,负责中断屏蔽。再往里走,就有一个中断仲裁的模块,用来决定中断排队的顺序和是否进行嵌套

在中断仲裁的过程中,也需要读取每一路的中断优先级,即读取存储优先级的4个bit位。红色虚线代表优先级分组。


中断协作模型

所谓中断协作模型,就是用来表示中断处理过程中,STM32内部的一些模块,它们相互之间的一些分工关系

主要可分为三大模块:片上外设、NVIC、Flash。

中断编程的流程也可根据此模型来进行,如下所示:

1、开启中断源(开启方法因模块而异)

2、配置NVIC

3、编写中断响应函数


中断向量表

对于中断,其中断响应函数同样存储在Flash里,但Flash里面还有别的代码,当CPU中断发生时,可以通过中断向量表定位到中断源所对应的中断响应函数。

Flash存储内部从地址0开始的一段区域,会按照中断号(0~80)依次排序,每4个字节存储一个中断响应函数的地址,这就是中断向量表(相当于中断函数的地址集合)。当某个中断发生时(假设其中断号为0),CPU会去中断向量表里面的0号区域,查看对应的地址,通过地址找到具体的中断函数。

具体模块的中断号可去参考手册里面查找。


NVIC编程接口

NVIC模块的驱动程序位于misc.c和misc.h中,其编程接口有两个,如下所示:

其中,第一个函数NVIC_PriorityGroupConfig用于配置优先级分组;第二个函数NVIC_Init用于对NVIC的某一路中断源初始化。通常由这两个函数配置NVIC。

注意,不需要对NVIC去使能时钟,因为NVIC是芯片内核的,只要一上电,芯片就会工作,默认情况下时钟就是开启的(并且内核的时钟是无法关闭的)。

函数NVIC_PriorityGroupConfig具体使用方法:

函数NVIC_Init使用方法:

实例代码,例如要使用串口中断:

NVIC_InitTypeDef NVICInitStruct;

NVICInitStruct.NVIC_IRQChannel=USART1_IRQn;
NVICInitStruct.NVIC_IRQChannelPreemptionPriorty=0;
NVICInitStruct.NVIC_IRQChannelSubPriorty=2;
NVICInitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVICInitStruct);

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

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

相关文章

人工智能技术如何让中风瘫痪妇女重新获得声音,更自然地更高效地与人交流?

加州大学旧金山分校和伯克利分校的研究人员开发了一种创新的脑机接口(BCI)技术,使一位因中风而失去说话能力的女士Ann通过数字分身恢复了交流能力。这项技术首次实现了从大脑信号中合成语音和面部表情。 Ann在30岁时因脑干中风导致全身瘫痪&…

前端面试题35(在iOS和Android平台上,实现WebSocket协议有哪些常见的库或框架?)

在iOS和Android平台上,实现WebSocket协议有许多成熟且被广泛使用的库和框架。下面是一些推荐的选项: iOS 平台 SocketRocket 简介:这是由Facebook开源的库,专门为iOS和Mac OS X设计,提供WebSocket连接的功能。它基于S…

【CUDA】 Trust基本特性介绍及性能分析

Trust简介 Thrust 是一个实现了众多基本并行算法的 C 模板库,类似于 C 的标准模板库(standard template library, STL)。该库自动包含在 CUDA 工具箱中。这是一个模板库,仅仅由一些头文件组成。在使用该库的某个功能时,包含需要的头文件即可。该库中的所有类型与函数都在命名空…

神经网络设计过程

1.可根据Iris特征直接判断 2.神经网络方法,采集大量的Iris特征,分类对应标签,构成数据集。 将数据集喂入搭好的神经网络结构,网络通过反向传播优化参数得到模型。 有新的网络送入到模型里,模型会给出识别结果。 3.…

实验02 黑盒测试(组合测试、场景法)

1. 组合测试用例设计技术 指出等价类划分法和边界值分析法通常假设输入变量相互独立,但实际情况中变量间可能存在关联。全面测试:覆盖所有输入变量的所有可能组合,测试用例数量随输入变量的增加而指数增长。 全面测试需要对所有输入的各个取…

Vue 项目中 history 路由模式的使用

在最近帮客户开发的一个项目中,由于项目的特殊性,需要用到 Vue 中的 history路由模式。该模式使用时会涉及到“上传白屏”和“刷新 404 问题”。在帮助客户解决这两个问题的过程中,总结问题的解决方案并记录下来,希望能够保留这篇…

开始尝试从0写一个项目--前端(二)

修改请求路径的位置 将后续以及之前的所有请求全都放在同一个文件夹里面 定义axios全局拦截器 为了后端每次请求都需要向后端传递jwt令牌检验 ps:愁死了,翻阅各种资料,可算是搞定了,哭死~~ src\utils\request.js import axio…

数据结构--二叉树相关性质

1.性质 1.满二叉树每层节点个数:等比数列 3.(重要)任意二叉树:度为0(叶子节点)的比度为2的永远多一个。。度:就是看有多少孩子 如下图解析:(用推到归纳来分析&#xff…

Code2prompt:探索高效代码编辑新纪元的开源模型工具

项目介绍 Code2prompt 是一个命令行工具,能将你的代码库转化为单一的大型语言模型(LLM)提示,结合源码树结构,模板定制,以及令牌计数。它旨在简化与高级上下文窗口模型如GPT或Claude的交互,助你…

华为浏览器,Chrome的平替,插件无缝连接

文章目录 背景插件书签 背景 不知道各位小伙伴有没有这样的痛点,办公电脑、家里的电脑还有手机、平板等,收藏了一个网址或者在手机上浏览了某个网页,保存起来,可是一换平台或者换个电脑,在想要浏览之前收藏的东西&…

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’ 在运行sudo apt update时遇到报错,由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32 解决方法&#x…

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源

299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源 在现代软件开发中,API(应用程序接口)是实现应用间通信和功能扩展的关键工具。公共API(Public APIs)则为开发者提供了宝贵的资源&#…

passwd文件被删导致无法进入系统问题处理

系统:centos7 问题背景:根据描述,之前有人搞破坏,导致无法进入系统。启动界面显示各种服务无法启动。 进单用户模式 重启启动,在内核选择界面按e,在linux16 行,将ro 修改为rw,在行末添加 init/bin/bash ,按…

【C语言】【排序算法】----- 归并排序

由于最近要考试,好久没有发博客了,非常抱歉大家对我的支持。之后我会不断更新博客,继续创作出高质量的文章,希望能帮到大家! 文章目录 一、归并排序基本思想二、递归实现三、非递归实现四、效率分析 一、归并排序基本…

【工具】咸鱼小助手,一款咸鱼之王辅助工具

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ Github:咸鱼之王的自动化脚本,自动答题、爬塔、领资源等 下载:(密码:9u22) 咸鱼小助手 文档:腾讯文档 视…

Windows 下安装 Memcached

Memcached 安装包下载 官网上并未提供 Memcached 的 Windows 平台安装包。 我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可: 32位系统 1.2.5版本:http://static.jyshare.com/download/memcache…

1996-2023年各省农村居民人均消费支出数据(无缺失)

1996-2023年各省农村居民人均消费支出数据(无缺失) 1、时间:1996-2023年 2、来源:国家统计局、统计年鉴 3、指标:农村居民人均消费支出 4、范围:31省 5、缺失情况:无缺失 6、指标解释&…

使用昇腾芯片进行多卡训推时使用hccl_tools.py为npu分配ip报错问题解决办法

目录 问题描述问题产生原因解决办法最终执行并验证参考网站命令扩展 问题描述 昇腾芯片(910b/310p等)进行多卡训练或者推理时需要先获取并配置每张npu的ip信息,因此需要执行类似下面问题: python mindformers/tools/hccl_tools.…

快手kolors模型测评和安装完整教程(支持中文提示词、文字绘制 )

在人工智能领域,文本到图像合成技术一直是研究的热点。Kolors项目以其卓越的性能和创新的技术,正在重新定义这一领域的可能性。本文将深入探讨Kolors项目的核心优势、技术细节以及如何快速开始使用这一强大的模型。 随着深度学习技术的飞速发展&#xf…

【1.4】动态规划-解目标和

一、题目 给你一个整数数组nums和一个整数target 。 向数组中的每个整数前添加或 - ,然后串联起所有整数,可以构造一个表达式: 例 如 , nums[2,1] , 可 以 在 2 之 前 添 加 , 在 1 之 前 添 加 - &…