0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32中断,看着一篇就够了

撞上电子 ? 2023-10-27 08:00 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

e5ad607e-745b-11ee-9788-92fbcf53809c.png

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1922

    浏览量

    87279
  • STM32
    +关注

    关注

    2296

    文章

    11040

    浏览量

    366826
  • 设备
    +关注

    关注

    2

    文章

    4707

    浏览量

    72043
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CY4147S455将IO口设置成上升沿中断之后,打开看门狗定时唤醒,会自发触发这一中断,为什么?

    将IO口设置成上升沿中断之后,打开看门狗定时唤醒,会自发触发这一中断,芯片CY4147S455
    发表于 08-08 06:35

    STM32G474进入Fault3中断没办法设置成周期性触发吗?

    手动操作硬件触发了Fault3故障,进入了Fault3中断,此时若故障直存在程序就在中断里无法出来,FreeRTOS停止运行,把故障解除后FreeRTOS正常运行,即使把Fault3中断
    发表于 08-01 07:23

    第十章 W55MH32中断应用概览

    本章讲述了W55MH32中断应用,涵盖异常类型、NVIC介绍、优先级定义与分组,阐述中断编程三要点(使能中断、配置 NVIC、编写服务函数),并强调优先级分组设置注意事项。
    的头像 发表于 05-22 17:07 ?1166次阅读
    第十章 W55MH32<b class='flag-5'>中断</b>应用概览

    零死角玩转STM32——系统

    本文共4册,由于资料内存过大,分开上传,有需要的朋友可以去主页搜索下载哦~ 《零死角玩转 STM32》系列教程由初级、中级、高级、系统
    发表于 05-21 14:08

    零死角玩转STM32——高级

    本文共4册,由于资料内存过大,分开上传,有需要的朋友可以去主页搜索下载哦~ 《零死角玩转 STM32》系列教程由初级、中级、高级、系统
    发表于 05-21 14:02

    零死角玩转STM32——中级

    本文共4册,由于资料内存过大,分开上传,有需要的朋友可以去主页搜索下载哦~ 《零死角玩转 STM32》系列教程由初级、中级、高级、系统
    发表于 05-21 13:56

    零死角玩转STM32——初级

    本文共4册,由于资料内存过大,分开上传,有需要的朋友可以去主页搜索下载哦~ 《零死角玩转 STM32》系列教程由初级、中级、高级、系统
    发表于 05-21 13:48

    STM32中断如此简单(可下载)

    下面我们先来了解些基本概念:中断中断是什么?举个例子来说,当我们正在工作时,突然电话响了,这时你会把手里的工作先停下来,然后去接电话,当接完电话后,电话里的人安排你马上做件事,这
    发表于 03-24 14:27 ?1次下载

    TIM2输入捕获,DMA开启中断传输输入捕获数据,程序跑的过程,DMA一直中断,TIM6只触发中断,怎么解决?

    用TIM2捕获输入的数据,并且通过DMA存储,在开启DMA中断同时,TIM6中断也开启(用于计时)。但是程序跑的过程,DMA一直中断,TIM6只触发
    发表于 03-14 06:39

    STM32H743对关键中断函数,使用ITCM搬至RAM运行,仿真进入HardFault_Handler报错怎么解决?

    STM32H743对关键中断函数,使用ITCM搬至RAM运行,STM32CubeIDE仿真进入HardFault_Handler报错。其中,ITCM已查找网上多教程,修改了ld链接文
    发表于 03-07 08:04

    让ADS7864的BUSY脚接DSP的外部中断INT0,DSP通过中断来读取采样数据,要不要先关INT0中断呢?

    我让ADS7864的BUSY脚接DSP的外部中断INT0,DSP通过中断来读取采样数据。请问在中断服务程序,要不要先关INT0中断呢?如
    发表于 01-13 06:11

    stm32 GPIO中断配置教程

    在嵌入式开发STM32微控制器因其高性能和丰富的外设而广受欢迎。GPIO(通用输入/输出)中断STM32微控制器中常用的功能之,它允
    的头像 发表于 11-19 15:53 ?3746次阅读

    连块应用于飞控测试环境断线测试箱

    连块概述Overviewofdisconnectedblocks连块是种用于电路中断连接的连接器,广泛应用于电子测试设备和通信系统
    的头像 发表于 10-09 08:06 ?871次阅读
    <b class='flag-5'>断</b>连块应用于飞控测试环境断线测试箱

    国产端联块-连块应用于飞控测试环境断线测试箱

    连块概述 连块作为种用于电路中断连接的连接器,广泛应用于电子测试设备和通信系统。它能够在特定条件下,通过手动插拔精准地
    的头像 发表于 10-08 15:07 ?733次阅读

    stm32怎样触发软件中断

    了解STM32中断系统 STM32微控制器具有丰富的中断系统,包括NVIC(嵌套向量中断控制器)和SYSTICK定时器。NVIC可以处理多达
    的头像 发表于 09-02 09:32 ?2233次阅读