【【萌新的STM32学习-17 中断的基本概念2】】

这篇具有很好参考价值的文章主要介绍了【【萌新的STM32学习-17 中断的基本概念2】】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

萌新的STM32学习-17 中断的基本概念2

STM32中断优先级的基本概念
【【萌新的STM32学习-17 中断的基本概念2】】,stm32学习,stm32,学习,嵌入式硬件
抢占优先级: 高抢占优先级可以打断正在执行的低抢占优先级中断
响应优先级: 这个也叫子优先级 抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断。还有一种情况就是当两个或者多个中断的抢占式优先级和响应优先级相同时,那么就遵循自然优先级,看中断向量表的中断排序,数值越小,优先级越高。

在 NVIC 中由寄存器 NVIC_IPR0-NVIC_IPR59 共 60 个寄存器控制中断优先级,每个寄存器的 8 位,所以就有了 240 个宽度为 8bit 的中断优先级控制寄存器,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是实际上 M3 芯片为了精简设计,只使用了高四位[7:4],低四位取零,这样以至于最多只有 16 级中断嵌套,即 2^4=16。
对于 NVCI 的中断优先级分组:STM32F103 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。
【【萌新的STM32学习-17 中断的基本概念2】】,stm32学习,stm32,学习,嵌入式硬件
特别提示: 一个工程中,一般只设置一次中断优先级分组。
这到底是怎么一个说法和分配呢
我们拿STM32中断优先级2 举例 假设分组为2
那么一共4个 分为 2部分 前面2个被称为抢占优先级 后面2个位组成 响应优先级

抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
结合实例说明一下:假定设置中断优先级分组为 2,然后设置中断 3(RTC_WKUP 中断)的抢占优先级为 2,响应优先级为 1。中断 6(外部中断 0)的抢占优先级为 3,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为:中断 7>中断 3>中断 6。上面例子中的中断 3 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 3 却不可以相互打断!
【【萌新的STM32学习-17 中断的基本概念2】】,stm32学习,stm32,学习,嵌入式硬件
关于STM32 NVIC的使用
1.设置中断 AIRCR[10:8]
HAL_NVIC_SetPriorityGrouping

2.设置中断优先级 IPRx bit [7:4]
HAL_NVIC_SetPriority

3.使能中断 ISERx
HAL_NVIC_EnablelRQ

ST 公司把 core_cm3.h 文件的 NVIC 相关函数封装到 stm32f1xx_hal_cortex.c 文件中,下面
列出我们较为常用的函数进行,想了解更多其他的函数请自行查阅。

  1. HAL_NVIC_SetPriorityGrouping 函数
    HAL_NVIC_SetPriorityGrouping 是设置中断优先级分组函数。其声明如下:
    void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);
    ⚫ 函数描述:
    用于设置中断优先级分组。
    ⚫ 函数形参:
    形参 1 是中断优先级分组号,可以选择范围:NVIC_PRIORITYGROUP_0 到
    NVIC_PRIORITYGROUP_4(共 5 组)。
    ⚫ 函数返回值:

    ⚫ 注意事项:
    这个函数在一个工程里基本只调用一次,而且是在程序 HAL 库初始化函数里面已经被调
    用,后续就不会再调用了。因为当后续调用设置成不同的中断优先级分组时,有可能造成前面
    设置好的抢占优先级和响应优先级不匹配。
  2. HAL_NVIC_SetPriority 函数
    HAL_NVIC_SetPriority 是设置中断优先级函数。其声明如下:
    void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority,
    uint32_t SubPriority);
    ⚫ 函数描述:
    用于设置中断的抢占优先级和响应优先级(子优先级)。
    ⚫ 函数形参:
    形参 1 是中断号,可以选择范围:IRQn_Type 定义的枚举类型,定义在 stm32f103xe.h。
    形参 2 是抢占优先级,可以选择范围:0 到 15。
    形参 3 是响应优先级,可以选择范围:0 到 15。⚫ 函数返回值:无3. HAL_NVIC_EnableIRQ 函数HAL_NVIC_EnableIRQ 是中断使能函数。其声明如下:void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);⚫ 函数描述:用于使能中断。⚫ 函数形参:形参 IRQn 是中断号,可以选择范围:IRQn_Type 定义的枚举类型,定义在 stm32f103xe.h。⚫ 函数返回值:无

EXIT
基本概念
简介是外部(扩展)中断事件控制器
包含20个产生事件/中断请求的边沿检测器 ,即总共: 20条EXTI线(F1)
EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/中断请求的边沿检测器组成。每一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
中断和事件的
中断: 要进入NVIC,有相应的中断服务区函数,需要CPU 处理
事件: 不进入NVIC,仅用于内部硬件自动控制的,如: TIM DMA ADC
【【萌新的STM32学习-17 中断的基本概念2】】,stm32学习,stm32,学习,嵌入式硬件
这里19根因为在设计的时候就没设计成互联型 互联型的是带上以太网的所以是20根

每条EXTI线都可以单独配置:选择类型(中断或者事件) ,触发方式(上升沿,下降沿,或者双边沿触发) ,支持软件触发,开启/屏蔽,有挂起状态位

EXTI的工作原理
【【萌新的STM32学习-17 中断的基本概念2】】,stm32学习,stm32,学习,嵌入式硬件
标号①是一个边沿检测电路,包括边沿检测电路,上升沿触发选择寄存器(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)。边沿检测电路以输入线作为信号输入端,如果检测到有边沿跳变就输出有效信号‘1’,就输出有效信号‘1’到标号②部分电路,否则输入无效信号‘0’。边沿跳变的标准在于开始的时候对于上升沿触发选择寄存器或下降沿触发选择寄存器对应位的设置,对应位的设置可以参照一下表 16.1.2.1。标号②是一个或门电路,它的两个信号输入端分别是软件中断事件寄存器(EXTI_SWIER)和边沿检测电路的输入信号。或门电路只要输入端有信号‘1’,就会输出‘1’,所以就会输出‘1’到标号③电路和标号④电路。通过对软件中断事件寄存器的读写操作就可以启动中断/事件线,即相当于输出有效信号‘1’到或门电路输入端。标号③是一个与门电路,它的两个信号输入端分别是中断屏蔽寄存器(EXTI_IMR)和标号②电路输出信号。与门电路要求输入都为‘1’才输出‘1’,这样子的情况下,如果中断屏蔽寄存器(EXTI_IMR)设置为 0 时,不管从标号②电路输出的信号特性如何,最终标号③电路输出的信号都是 0;假如中断屏蔽寄存器(EXTI_IMR)设置为 1 时,最终标号③电路输出的信号才由标号②电路输出信号决定,这样子就可以简单控制 EXTI_IMR 来实现中断的目的。标号④电路输出‘1’就会把请求挂起寄存器(EXTI_PR)对应位置 1。最后,请求挂起寄存器(EXTI_PR)的内容就输出到 NVIC 内,实现系统中断事件的控制。接下来我们看看 EXTI 功能框图的产生事件的线路。产生事件线路是从标号②之后与中断线路有所不用,之前的线路都是共用的。标号④是一个与门,输入端来自标号②电路以及来自于事件屏蔽寄存器(EXTI_EMR)。如果 EXTI_EMR 寄存器设置为 0,那不管标号②电路输出的信号是‘0’还是‘1’,最终标号④输出的是‘0’;如果 EXTI_EMR 寄存器设置为 1,最终标号④电路输出信号就由标号③电路输出的信号决定,这
样子就可以简单的控制 EXTI_EMR 来实现是否产生事件的目的。
标号④电路输出有效信号 1 就会使脉冲发生器电路产生一个脉冲,而无效信号就不会使其
产生脉冲信号。脉冲信号产生可以给其他外设电路使用,例如定时器,模拟数字转换器等,这
样的脉冲信号一般用来触发 TIM 或者 ADC 开始转换。
产生中断线路目的使把输入信号输入到 NVIC,进一步运行中断服务函数,实现功能。而产
生事件线路目的是传输一个脉冲信号给其他外设使用,属于硬件级功能。

对于第一部分就是说 我使得上升沿置1 那么我通过边沿检测器进来一个上升沿 就允许传输到第二部分 如果是置为0 那么即使上升沿来了也不会
然后来到第二部分 第二部分是一个或门 因为我们收到的一部分内容是来自于前者通过边沿检测电路的(1)
因为上面连接的是软件中断事件寄存器 意思就是这一部分和块1的是并列的 大家都通过或门只要是1 都能传入下一级
这就是属于我们在选择触发上 可以选择硬件触发还是软件触发

接下来进入第三部分模块
硬件触发得到的1到了之后还得进入一个请求挂起寄存器 (因为对我们来说想要完成一次触发 不仅要保证 时序上的正确 还要保证 系统层面上 允许中断存在,不然真就随便一个中断就打断我现在做的事情吗) 1 来了之后回自动的使得请求挂起寄存器对应位置为1,然后和中断屏蔽寄存器共同连接至一个与门上 (所以中断屏蔽寄存器必须为1才能一起通过与门传输到NVIC中断控制器上)

上升沿触发选择寄存器(EXTI_RTSR)
【【萌新的STM32学习-17 中断的基本概念2】】,stm32学习,stm32,学习,嵌入式硬件
我们只用到了0到19 但是第19位是只适用于互联型的所以只用到了0到18 因为板子正好只有19根中断线 当寄存器输入1时才会允许 输入线上的上升沿触发

同理下降沿也是类似的

中断屏蔽也是同理19根线
挂机EXTI_PR也是同理
假设EXTI-8发生了选择的边沿事件, 该为被置入1 那么我们可以通过在该位写入‘1’ 来清除它

EXTI_FTSR 下降沿触发
EXTI_RTSR 上升沿触发
EXTI_IMR 中断屏蔽寄存器
EXTI_PR 请求挂起寄存器文章来源地址https://www.toymoban.com/news/detail-672885.html

到了这里,关于【【萌新的STM32学习-17 中断的基本概念2】】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【【萌新的STM32学习-27--USART异步通信配置步骤】】

    USART/UART 异步通信配置步骤 1.配置串口工作参数 HAL_UART_Init() 我们会在此处调用MSP中的回调函数 2.串口底层初始化 用户定义HAL_UART_MspInit() 配置GPIO NVIC CLOCK 等 3.开启串口异步接收中断 HAL_UART_Receive_IT() 4.设置优先级,使能中断 HAL_NVIC_SetPriority() HAL_NVIC_EnableIRQ() 5.编写中断服务函数

    2024年02月10日
    浏览(40)
  • 【【萌新的STM32学习25--- USART寄存器的介绍】】

    STM32–USART寄存器介绍(F1) 控制寄存器1 (CR1) 位13: 使能USART UE 0: USART分频器和输出被禁止 1: USART模块使能 位12 : 配置8个数据位 M 该位定义了数据字的长度,由软件对其设置和清零 0: 一个起始位,8个数据位,n个停止位 1: 一个起始位,9个数据位,n个停止位 有效数

    2024年02月09日
    浏览(54)
  • STM32基本定时器中断

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 定时器有什么用?精准延时,PWM,做一个时钟:年月日,时分秒。时钟最基本的就是1s怎么来? 提示:以下是本篇文章正文内容,下面案例可供参考 1.1如何实

    2024年02月06日
    浏览(49)
  • STM32之基本定时器中断

    一、TIM(Timer)定时器 基本定时器中断可以对输入的时钟进行计数,并在计数值达到设定值(自动重装值)时触发中断; 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时; 不仅具备基本的定时中断功能,而且还包含内外时钟源

    2024年02月08日
    浏览(44)
  • 【STM32】STM32学习笔记-TIM定时中断(13)

    TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码

    2024年01月17日
    浏览(46)
  • 【STM32】STM32学习笔记-EXTI外部中断(11)

    中断 :在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行 中断优先级 :当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加

    2024年02月04日
    浏览(40)
  • 基于STM32CubeMX和keil采用STM32F407的基本定时器中断实现LED闪烁

    定时器有三种,基本定时器,通用定时器,以及高级定时器。 这篇博客以最简单的基本定时器为例,实现LED的闪烁。 后面两种定时器的用法后面再写。 实现功能: TIM6控制LED每隔0.5s变一次状态。 TIM7控制LED1常量2s后熄灭。 因为都是用到LED,所以和上一篇基于STM32CubeMX与keil采

    2024年02月04日
    浏览(64)
  • STM32学习--定时器中断

    目录  概述 一、STM32 通用定时器简介 1.1 STM32定时器定时原理  1.2 STM32 通用定时器相关寄存器简介 1.3 定时器功能描述 1.4计数器模式 二、定时器中断库函数 2.1 步骤总结 2.2 库函数讲解 总结:         这一章,我们将向大家介绍如何使用 STM32F1 系列 的通用定时器。 TIM

    2024年02月02日
    浏览(50)
  • 【明解STM32】中断系统理论基础知识篇之中断基本原理及NVIC

    目录 一、前言 二、基本原理概述 1、中断的作用 2、中断和异常 3、NVIC中断控制器 4、中断的分类 三、中断管理机制 1、中断向量 2、中断优先级 3、中断嵌套 四、中断处理流程 五、总结         中断是什么?举个例子来说,当我们正在工作时,突然电话响了,这时你会把

    2024年02月05日
    浏览(48)
  • 【STM32学习笔记】(13)——外部中断详解

            EXTI(External interrupt/event controller)—外部中断/事件控制器 ,管理了控制器的 20 个中断/事件线。每个输入线可以独立地配置输入类型(脉冲 或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包