STM32中断,看着一篇就够了

news2024/11/18 17:28:21

3f94189d0eccc8d577eeea560f69a021.png

1,环境搭建:

硬件平台:STM32H750XBH6

开发环境:STM32CubeMX V6.8.1+KEIL V5.28.0.0

STM32H750固件版本:package V1.11.0

仿真下载驱动:ST-Link

2,中断的定义

中断(Interrupt)微控制器中的一种机制,允许在正常程序执行期间暂停当前正在执行的任务,以处理特定事件或条件。这些事件或条件可以是来自外部的信号、设备状态的改变、定时器触发、错误条件等。中断使系统能够及时响应重要事件,而无需不断轮询或等待事件的发生。

3,中断的分类

中断可以根据多个因素进行分类,主要根据其来源、优先级、触发方式和处理方式。以下是一些常见的中断分类:

根据来源分类:

A.外部中断(External Interrupts):这些中断来自于外部硬件或设备,如按键、传感器、通信接口等的触发信号。

B.内部中断(Internal Interrupts):这些中断源于处理器或微控制器内部的事件,如定时器计数溢出、除零错误等。

根据触发方式分类:

A.硬件中断(Hardware Interrupts):硬件中断是由硬件触发的中断,如外部设备产生的信号。

B.软件中断(Software Interrupts):软件中断是由程序中的指令产生的,通常用于执行特定功能或服务调用。

根据优先级分类:

A.可屏蔽中断(Maskable Interrupts):这些中断可以通过设置中断屏蔽位来禁用或启用。通常,系统可以控制是否屏蔽可屏蔽中断。

B.不可屏蔽中断(Non-Maskable Interrupts,NMI):这些中断无法被屏蔽,通常用于处理紧急或重要事件,如硬件故障。

根据处理方式分类:

A.同步中断(Synchronous Interrupts):这些中断在程序执行期间同步触发,例如除零错误。

B.异步中断(Asynchronous Interrupts):这些中断可以随时发生,不受程序控制,例如外部硬件触发的中断。

根据应用领域分类:

A.实时中断(Real-Time Interrupts):这些中断需要在严格的时间要求内进行处理,通常用于实时系统,如航空航天、汽车控制等。

B.一般用途中断(General-Purpose Interrupts):这些中断用于一般计算和控制任务,时间要求没有那么严格。

根据中断向量表分类:

A.单一中断向量表(Single Interrupt Vector Table):整个系统使用一个中断向量表,每个中断在表中有唯一的入口点。

B.多中断向量表(Multiple Interrupt Vector Tables):不同的模块或设备可能使用独立的中断向量表,每个表包含特定设备的中断处理程序。

51f5dd4f61a8afac4c715cd810c0c733.png

4,内部中断与外部中断

内部中断和外部中断是根据中断的来源和触发方式来进行分类的两种常见中断类型。它们在嵌入式系统和微控制器中具有不同的特点:

1. 内部中断

来源:内部中断是由处理器或微控制器内部的事件引发的。这些事件通常与处理器或微控制器的运行状态和特性有关,例如定时器溢出、除零错误、指令执行完成等。

触发方式:内部中断是同步的,它们在程序执行期间由内部事件引发,通常是特定指令的执行或计时器/计数器的状态变化。

屏蔽:通常,内部中断可以通过设置中断屏蔽位来禁用或启用。处理器通常提供了特定的寄存器或标志位来管理内部中断的屏蔽。

例子:除零错误、非法指令、定时器中断等都可以归类为内部中断。

2. 外部中断:

来源:外部中断是由外部硬件或设备触发的事件引发的,如按键、传感器、通信接口等。

触发方式:外部中断是异步的,它们可以随时发生,不受程序控制。通常,当外部事件满足特定条件时,外部中断会被触发。

屏蔽:外部中断通常可以通过设置中断屏蔽位来禁用或启用。在外部中断情况下,系统可以根据需要控制是否屏蔽外部中断。

例子:按键按下、传感器触发、串行通信接口数据接收等都可以归类为外部中断。

5,中断优先级

中断优先级分组:STM32微控制器使用中断优先级分组来划分中断优先级。中断优先级分组的设置决定了可用的优先级位数和子组位数。通常,分组位数越多,允许更精细的优先级控制。

优先级位数:在STM32中,通常有4位或3位用于中断优先级设置,具体取决于微控制器型号。较多的优先级位数允许更精细的控制。

子组位数:某些STM32系列支持子组位数,这允许在同一主组中进一步细分优先级。

中断优先级值:中断优先级值是一个数字,通常在0到(2^N - 1)之间,其中N是可用的位数。较小的值表示更高的优先级。在中断优先级寄存器中,优先级值的最高位通常是最重要的位。

中断优先级设置:为了设置中断优先级,您需要编程配置中断控制器的相关寄存器。具体的设置方法和寄存器名称可能因STM32微控制器型号而异,因此您需要查看特定型号的参考手册和数据表。

  1. 中断优先级分组示例:以下是一个示例,展示了如何设置中断优先级:
    Group 0, Subgroup 0: 0x00 - 0x03
    Group 0, Subgroup 1: 0x04 - 0x07
    Group 1, Subgroup 0: 0x08 - 0x0B
    ...
    Group 7, Subgroup 1: 0x38 - 0x3B
    Group 0: 0x00 - 0x0F
    Group 1: 0x10 - 0x1F
    Group 2: 0x20 - 0x2F
    ...
    Group 15: 0xF0 - 0xFF
    4位分组,0位子组:
    3位分组,1位子组:

4,中断嵌套

在STM32微控制器中,中断嵌套(Interrupt Nesting)是一种机制,允许处理多个中断请求,并在一个中断服务程序中嵌套地处理其他中断。这种机制非常有用,因为它使您能够处理多个中断,而不需要等待一个中断服务程序完成后才能处理下一个中断。这提高了系统的响应性,特别是在具有多个优先级的中断时。

以下是有关STM32中断嵌套的一些关键概念:

中断嵌套优先级:STM32支持设置每个中断请求的中断优先级。通过设置不同的中断优先级,您可以控制中断的相对优先级。当多个中断同时发生时,高优先级的中断将优先得到处理。这确保了对紧急事件的快速响应。

中断嵌套的允许:STM32允许中断嵌套,但它需要在中断控制寄存器中进行相应的配置。

中断服务程序(ISR)中的中断嵌套:如果在中断服务程序中发生了中断,系统会检查新中断的优先级。如果新中断的优先级更高,系统会暂停当前中断服务程序的执行,并立即开始新中断的服务程序。一旦新中断服务程序完成,系统会返回到原始中断服务程序的执行点,继续执行。

中断服务程序的嵌套深度:STM32支持多级中断嵌套,这意味着可以在中断服务程序中触发其他中断,而这些新中断也可以再触发其他中断,依此类推。这允许系统以一种高度灵活的方式处理多个中断。

5,代码与中断

对于内核来说提供的优先级有多少位在芯片厂商设计的时候并不会用到全部,ST只用到了四位,并且默认配置使用16个主优先级,并没有用到子优先级,我们可以看到可配置优先级为0-15 数字越大优先级越低

77543d28756bcb31da5e7b9a2a4b5533.png

45696ce741529997630619364cf5440a.png

以下是如何配置和使用 STM32 中断的简单步骤:

A.配置中断源:首先,你需要配置引起中断源。例如,如果你使用外部引脚作为中断源,你需要配置该引脚为外部中断模式。

B.设置优先级:使用 NVIC 函数来设置中断优先级。

C.启用中断:再次使用 NVIC 函数启用特定的中断。

D.编写ISR:为特定的中断源编写一个处理函数。例如,如果你为 EXTI0编写一个ISR,你可能会有一个如下的函数:

void EXTI0_IRQHandler(void) {
    // 处理中断的代码
    
    // 清除中断标志
    EXTI_ClearITPendingBit(EXTI_Line0);   
}

注意:确保你的主程序中已经启用了全局中断。通常,这是通过 __enable_irq(); 函数实现的。一旦中断发生,程序将自动跳转到相应的 ISR。确保你的 ISR 是简短和高效的,以避免长时间的中断延迟。

==========

往期回顾:

【蓝桥杯单片机】第二章 软件安装

【蓝桥杯单片机】第一章 大赛概述

【蓝桥杯嵌入式】第九章 PWM

【蓝桥杯嵌入式】第八章 串口接收

==========

8055aff9c144bdbd115e2fea3f646255.png

34ad2d4fec934069735146383177cc8d.png

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

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

相关文章

【考研数学】数学“背诵”手册 | 需要记忆且容易遗忘的知识点

文章目录 引言一、高数常见泰勒展开 n n n 阶导数公式多元微分函数连续、可微、连续可偏导之间的关系多元函数极值无条件极值条件极值 三角函数的积分性质华里士公式( “点火”公式 )特殊性质 原函数与被积函数的奇偶性结论球坐标变换公式 二、写在最后 …

centos中安装mysql5.7

建议第八步骤,和第九步骤对于生产者人员就不用配置了,风险大,我自己的也没有配置 1.首先切换到root用户下 2.更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 3.安装mysql yum库 rpm -Uvh https://repo.mysql.com//…

云计算模式的区域LIS系统源码,基于ASP.NET+JQuery、EasyUI+MVC技术架构开发

云计算模式的区域LIS系统源码 云LIS系统源码,自主版权 LIS系统是专为医院检验科的仪器设备能与计算机连接。可通过LIS系统向仪器发送指令,让仪器自动操作和接收仪器数据。并快速的将检验仪器中的数据导入到医生工作站中进行管理,且可将检验结…

10.26ALP论文原代码请稿

尊敬的作者, 我是中国重庆大学的一名学生,近期准备就浮点数据无损压缩这个研究领域作一篇综述。 我对于您的ALP压缩算法十分感兴趣,并对于它的表现感到十分惊喜,我自己也尝试按您文章里的伪代码与思路复现您的方法,但…

非小米笔记本小米妙享中心安装最新教程 3.2.0.464 兼容所有Windows系统

小米妙享中心 3.2.0.464 版本帮助 : 支持音频流转、屏幕镜像、屏幕拓展、键鼠拓展、无线耳机、小米互传 目录 小米妙享中心 3.2.0.464 版本帮助 : 1.常规教程使用安装包方式安装失败 或者 1.1安装失败可使用大佬的加载补丁方法解决 补充卸载残留 1.2 截图存档 2. 本教程…

CentOS - 安装 Elasticsearch

"Elasticsearch"是一个流行的开源搜索和分析引擎,它可以用于实时搜索、日志和事件数据分析等任务。以下是在 CentOS 上安装 Elasticsearch 的基本步骤: 安装 Java: Elasticsearch 是基于 Java 的应用程序,所以首先需要…

Git窗口打开vim后如何退出编辑(IDEA/Goland等编辑器)

最近在学习git高级操作过程中,遇到了一下问题: 我在学习Git合并多个commit为一个的时候,需要输入一个命令 git rebase -i HEAD~2 这说明已经是编辑模式了。当我写好后,我还按照原来在linux上的按下ESC键,但是只是光…

题目 1058: 二级C语言-求偶数和(python详解)——练气四层中期

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🍒专栏:算法修炼之练气篇(Python版) ✨…

ThreadLocal 是什么?它的实现原理呢?

这个问题我从三个方面来回答: ThreadLocal 是一种线程隔离机制,它提供了多线程环境下对于共享变量访问的安全性。 在多线程访问共享变量的场景中(出现下面第一个图),一般的解决办法是对共享变量加锁(出现下…

太极v14.0.4 免ROOT用Xposed

一个帮助你免 Root、免解锁免刷机使用 Xposed 模块的 APP 框架。 模块通过它改变系统和应用的行为,既能以传统的 Root/ 刷机方式运作, 也能免 Root/ 免刷机运行;并且它支持 Android 5.0 ~ 11。 简单来说,太极就是个 Xposed 框架…

0基础学习PyFlink——用户自定义函数之UDF

大纲 标量函数入参并非表中一行(Row)入参是表中一行(Row)alias PyFlink中关于用户定义方法有: UDF:用户自定义函数。UDTF:用户自定义表值函数。UDAF:用户自定义聚合函数。UDTAF&…

基于LSTM encoder-decoder模型实现英文转中文的翻译机器

前言 神经网络机器翻译(NMT, neuro machine tranlation)是AIGC发展道路上的一个重要应用。正是对这个应用的研究,发展出了注意力机制,在此基础上产生了AIGC领域的霸主transformer。我们今天先把注意力机制这些东西放一边,介绍一个对机器翻译…

[论文阅读]Point Density-Aware Voxels for LiDAR 3D Object Detection(PDV)

PDV Point Density-Aware Voxels for LiDAR 3D Object Detection 论文网址:PDV 论文代码:PDV 简读论文 摘要 LiDAR 已成为自动驾驶中主要的 3D 目标检测传感器之一。然而,激光雷达的发散点模式随着距离的增加而导致采样点云不均匀&#x…

云原生架构设计理论与实践

云原生架构设计理论与实践 云原生架构概述 云原生的背景 云原生定义和特征 云原生架构的设计原则 架构模式 服务化架构模式 Mesh化架构模式 Serverless模式 存储计算分离模式 分布式事务模式 可观测架构 事件驱动架构 云原生架构相关技术 容器技术 云原生微服务技术 无服务…

orm连接mysql

7.2 ORM ORM可以帮助我们做两件事 创建、修改、删除数据库中的表(不用写SQL语句)。无法创建数据库操作表中的数据(操作表中的数据)。 1.自己创建数据库 启动自己的mysql服务自带的工具创建数据库 create database gx_day5 DE…

CMake多文件构建初步

前面学习了cmake,不熟悉,只是记录了操作过程;下面再继续; 略有一点进步,增加一个代码文件,之前是1个代码文件; 如下图,prj是空文件夹, CMakeLists.txt如下;…

MySQL多表关联on和where速度对比实测谁更快

MySQL多表关联on和where速度对比实测谁更快 背景 今天发现有人在讨论:两张MySQL的数据表按照某一个字段进行关联的时候查询,我们使用on和where哪种查询方式更快。百闻不如一见,我们来亲自测试下。 先说结论 Where、对等查询的join速度基本…

vue使用smooth-signature实现移动端电子签字,包括横竖屏

vue使用smooth-signature实现移动端电子签字&#xff0c;包括横竖屏 1.使用smooth-signature npm install --save smooth-signature二.页面引入插件 import SmoothSignature from "smooth-signature";三.实现效果 四.完整代码 <template><div class&quo…

第13期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

asp.net学生考试报名管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net学生考试报名管理系统是一套完善的web设计管理系统系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使 用c#语言开发 应用技术&#xff1a;asp…