STM32中断,看着一篇就够了

发布者:温柔心情最新更新时间:2024-08-02 来源: elecfans关键字:STM32  中断  环境搭建 手机看文章 扫描二维码
随时随地手机看文章

1,环境搭建:

硬件平台:STM32H750XBH6开发环境:STM32CubeMX V6.8.1+KEIL V5.28.0.0STM32H750固件版本: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):不同的模块或设备可能使用独立的中断向量表,每个表包含特定设备的中断处理程序。


4,内部中断与外部中断

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


1. 内部中断

来源:内部中断是由处理器或微控制器内部的事件引发的。这些事件通常与处理器或微控制器的运行状态和特性有关,例如定时器溢出、除零错误、指令执行完成等。触发方式:内部中断是同步的,它们在程序执行期间由内部事件引发,通常是特定指令的执行或计时器/计数器的状态变化。屏蔽:通常,内部中断可以通过设置中断屏蔽位来禁用或启用。处理器通常提供了特定的寄存器或标志位来管理内部中断的屏蔽。例子:除零错误、非法指令、定时器中断等都可以归类为内部中断。


2. 外部中断:

来源:外部中断是由外部硬件或设备触发的事件引发的,如按键、传感器、通信接口等。触发方式:外部中断是异步的,它们可以随时发生,不受程序控制。通常,当外部事件满足特定条件时,外部中断会被触发。屏蔽:外部中断通常可以通过设置中断屏蔽位来禁用或启用。在外部中断情况下,系统可以根据需要控制是否屏蔽外部中断。例子:按键按下、传感器触发、串行通信接口数据接收等都可以归类为外部中断。


5,中断优先级

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


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


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

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


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


中断优先级分组示例:以下是一个示例,展示了如何设置中断优先级:Group 0, Subgroup 0: 0x00 - 0x03Group 0, Subgroup 1: 0x04 - 0x07Group 1, Subgroup 0: 0x08 - 0x0B...Group 7, Subgroup 1: 0x38 - 0x3BGroup 0: 0x00 - 0x0FGroup 1: 0x10 - 0x1FGroup 2: 0x20 - 0x2F...Group 15: 0xF0 - 0xFF4位分组,0位子组:3位分组,1位子组:

4,中断嵌套

在STM32微控制器中,中断嵌套(Interrupt Nesting)是一种机制,允许处理多个中断请求,并在一个中断服务程序中嵌套地处理其他中断。这种机制非常有用,因为它使您能够处理多个中断,而不需要等待一个中断服务程序完成后才能处理下一个中断。这提高了系统的响应性,特别是在具有多个优先级的中断时。
以下是有关STM32中断嵌套的一些关键概念:中断嵌套优先级:STM32支持设置每个中断请求的中断优先级。通过设置不同的中断优先级,您可以控制中断的相对优先级。当多个中断同时发生时,高优先级的中断将优先得到处理。这确保了对紧急事件的快速响应。中断嵌套的允许:STM32允许中断嵌套,但它需要在中断控制寄存器中进行相应的配置。中断服务程序(ISR)中的中断嵌套:如果在中断服务程序中发生了中断,系统会检查新中断的优先级。如果新中断的优先级更高,系统会暂停当前中断服务程序的执行,并立即开始新中断的服务程序。一旦新中断服务程序完成,系统会返回到原始中断服务程序的执行点,继续执行。中断服务程序的嵌套深度:STM32支持多级中断嵌套,这意味着可以在中断服务程序中触发其他中断,而这些新中断也可以再触发其他中断,依此类推。这允许系统以一种高度灵活的方式处理多个中断。


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

e59a1884-745b-11ee-9788-92fbcf53809c.png?imageView2/2/w/550

e5ad607e-745b-11ee-9788-92fbcf53809c.png?imageView2/2/w/550

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

A.配置中断源:首先,你需要配置引起中断源。例如,如果你使用外部引脚作为中断源,你需要配置该引脚为外部中断模式。B.设置优先级:使用 NVIC 函数来设置中断优先级。C.启用中断:再次使用 NVIC 函数启用特定的中断。D.编写ISR:为特定的中断源编写一个处理函数。例如,如果你为 EXTI0编写一个ISR,你可能会有一个如下的函数:


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

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


关键字:STM32  中断  环境搭建 引用地址:STM32中断,看着一篇就够了

上一篇:STM32外部中断大问题
下一篇:如何解决STM32调试无法进入main函数的问题?

推荐阅读最新更新时间:2026-02-19 10:40

STM32 HAL开发环境搭建指南:Keil MDK-ARM、STM32F1xx DFP与ST-Link工具链配置详解,结合STM32CubeMX使
安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法: 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径,避免占用C盘空间。 Core就是Keil(MDK-ARM)的程序安装目录。 Pack是各系列芯片的开发板的开发包的安装目录。 还要填写下用户信息: 然后开始安装: 同意安装“KEIL-Tools By ARM 通用串行总线控制器” 启动之后Keil会自动进行包描述的更新: 我们最好耐心等待它检查完,右下角会有进度: 大概会花费10到20分钟左右的时间 2025-03-29
[单片机]
<font color='red'>STM32</font> HAL开发<font color='red'>环境</font><font color='red'>搭建</font>指南:Keil MDK-ARM、STM32F1xx DFP与ST-Link工具链配置详解,结合STM32CubeMX使
ubuntu开发stm32单片机-环境搭建
1、首先安装串口助手(ch340驱动)首先查看操作系统中自带的串口驱动 arvin@arvin-virtual-machine:/lib/modules/5.19.0-43-generic/kernel/drivers/usb/serial$ ls aircable.ko f81232.ko iuu_phoenix.ko mxuport.ko quatech2.ko usbserial.ko ark3116.ko f81534.ko keyspan.ko navman.ko safe_serial.ko usb-serial-simple.ko belkin_sa.ko
[单片机]
ubuntu开发<font color='red'>stm32</font>单片机-<font color='red'>环境</font><font color='red'>搭建</font>
基于EIDE插件搭建vscode下的STM32单片机开发环境
EIDE(全称Embedded IDE)是国内的一个大佬开发的vscode插件,本人用下来体验非常好,因此在这里分享给大家,这是这个插件的 官方论坛 和 官方手册 本篇文章只会提一些基本的使用,而且也只是针对基于有CUBEMX的STM32,如果想要开发其他单片机详细的还是得参考手册 本篇文章是给有基础的人看的,vscode的基本使用在这里不会详细展开,一些地方会讲的比较粗略,如果有不懂的概念请自行查找资料 如果你不喜欢vscode而是喜欢JetBrain家的Clion,也可以参考大佬的 这篇文章 那么我们正式开始 一、安装GNU Arm Embedded Toolchain 去官网找 这个有手就行 二、安装vscode 这也是有
[单片机]
基于EIDE插件<font color='red'>搭建</font>vscode下的<font color='red'>STM32</font>单片机开发<font color='red'>环境</font>
STM32入门学习笔记之STM32F103环境搭建(上)
1.1 STM32F103单片机概述 ARM公司在ARM11以后的产品改用Cortex命名,主要分为三种,Cortex-M系列,Cortex-R系列和Cortex-A系列,Cortex系列属于ARMv7架构,这是2010年为止ARM公司最新的指令集架构,其中Cortex-M主要用于低端的嵌入式控制系统中,Cortex-R主要用于实时系统中,Cortex-A系列则是用于操作系统,智能设备和移动电话等领域,比如常见的Cortex-A15(用于Android,Ubuntu等系统中)。 意法半导体(ST公司)开发的STM32就属于Cortex-M架构,该架构细分又可以分为M0,M0+,M3,H7等,以最常见的STM32F103为例,该
[单片机]
<font color='red'>STM32</font>入门学习笔记之STM32F103<font color='red'>环境</font><font color='red'>搭建</font>(上)
linux搭建stm32开发环境
下载stm32固件库 创建目录 libs目录放stm32固件库,src放用户源码,inc放用户头文件 # mkdir libs src inc 将STM32F10x_StdPeriph_Lib_V3.5.0复制到libs目录下 创建Makefile.common 在主目录下创建 Makefile .common文件,这个是通用Makefile文件 #This file is included in the general Makefile, the libs Makefile and the src Makefile #Different optimize settings for library and sou
[单片机]
linux<font color='red'>搭建</font><font color='red'>stm32</font>开发<font color='red'>环境</font>
STM32搭建基于Eclipse平台的STM32调试环境
以NuttX工程为例,硬件平台STM32F103C8。 1 导入工程 File- Import 选择Existing Code as Makefie Project,点击next 输入工程名字(nuttx)以及工程路径(/home/boots/nuttx) 2 配置MCU调试环境 应用市场下载MCU插件: Help- Eclipse Marketplace :输入mcu并搜索,点击Install进行安装 点击甲壳虫旁边倒三角,点击Debug Configurations...进行Debug 参数配置 双击GDB SEGGER J-LINK Debugging(若成功安装MCU插件,就会出现该选项),新建nuttx
[单片机]
【<font color='red'>STM32</font>】<font color='red'>搭建</font>基于Eclipse平台的<font color='red'>STM32</font>调试<font color='red'>环境</font>
在KEIL下搭建基于 STM32 和 rt-thread 的开发环境
RT_thread开发人员是用MDK(Keil)进行开发管理的,当然也提供了IAR等开发环境的配置。针对初学者都提供了相关的教程和案例,不过项目开发,还是得讲究一下如何有效搭建开发环境和配置。 MDK(Keil)的安装和配置(破解)就略过了。能进行开发移植系统的程序员如果还不会最基础的开发环境搭建,那……去闭关修炼吧。 芯片选择:ST(意法半导体)-STM32F103ZE 原因: 开发必备。大多单片机爱好者,学习过程基本是:菜鸟52- 逐步深入stm32- 深度中毒ARM。 ST芯片应用广泛。ST的性价比(点赞)和高性能在各领域都发挥着重要作用(好用吖)。 ST开发容易。固件库和资料都很全,网上大把教程和学习板(
[单片机]
在KEIL下<font color='red'>搭建</font>基于 <font color='red'>STM32</font> 和 rt-thread 的开发<font color='red'>环境</font>
STM32高级开发(18)-使用VS Code搭建STM32开发环境
以前在伴随着开发平台的转换中,我尝试过各种各样的开发环境,而在最近一段时间的开发中我使用了Visual Studio Code来作为代码编辑器,其优异的工程管理,超快的启动速度,各种各样功能强大的插件,使我立刻爱上了这个文本编辑器。但是在开发中来来回回在编辑器和Keil等IDE之间来回切换对我造成了不少不方便,另外由于希望能够在windows下使用gcc工具链开发,所以我尝试使用插件来完整的在vscode上搭建了一个开发环境。可以说这是我在windows平台下尝试过的最好用的一种搭配,下面我就来详细讲述一下这个环境的搭建和基本使用方式。 ps:启动真心快,在win下优化程度堪比记事本. 安装软件 下载安装 Visual S
[单片机]
<font color='red'>STM32</font>高级开发(18)-使用VS Code<font color='red'>搭建</font><font color='red'>STM32</font>开发<font color='red'>环境</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved