STM32的中断

STM32的中断

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

**中断响应函数 **:由于中断源触发而被调用的程序

中断处理的四个阶段

在这里插入图片描述

在这里插入图片描述

中断优先级

中断优先级:中断处理的紧急程度叫做中断优先级

基本概念

中断优先级表示方法
中断优先级表示方法
可设置的
抢占优先级
用于打断正在执行的指令
响应优先级
用于执行中断后要执行的指令
不可设置的
自然优先级
中断向量表的优先级
中断现象

在这里插入图片描述

  • 中断排队(甲):在中断响应的过程中又有新的中断到来,新到来的中断需要排队,根据中断优先级决定排队的顺序

  • 中断嵌套 (乙):中断处理过程被更紧急的中断源打断,于是处理更紧急的指令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

规则

  • 高抢占优先级可以打断正在执行的低抢占优先级
  • 中断当抢占优先级相同时响应优先级高的先执行,但是不能相互打断
  • 抢占和响应相同的情况下自然优先级越高的先执行
  • 数值越小优先级越高

简言之,

1.对于指令的执行:先比较抢占优先级,抢占优先级高的先执行;抢占优先级相同则比较响应优先级,响应优先级高的先执行;若抢占优先级和响应优先级都相等,则比较自然优先级,自然优先级高的先执行。

2.遇到抢占优先级更高的中断会发生“中断嵌套。

但遇到抢占优先级相等,响应优先级更高时不发生中断嵌套,即响应优先级间不发生打断。

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

中断优先级分组

在这里插入图片描述

**特别提示:一个工程中一般只能设置一次中断优先级分组。**若设置多次则以最后一次为准。

中断源

“脉冲型”中断源&“电平型”中断源

“脉冲型”中断源(罕见):中断提示信号一闪而过。

“电平型”中断源(常见):中断提示信号持续,直到手 动关闭,因此必须在中断响应函数结束前清除中断。

在这里插入图片描述

中断源的4种状态

  • 不活动(Inactive):中断没有被触发或已响应结束
  • 活动(Active):中断正在被响应
  • 挂起(Pending):中断正在排队等待处理
  • 活动且挂起(Active and Pending):中断处理的过程中再次触发(仅脉冲型)【图4的B】

在这里插入图片描述

GPIO外部中断简图

在这里插入图片描述

NVIC

Nested vectored interupt controller 嵌套向量中断控制器 属于内核 负责管理中断

NVIC支持:256个中断(16内核 + 240外部),支持:256个优先级,允许裁剪!

在这里插入图片描述

中断协作模型

在这里插入图片描述

大致分为片上外设(左)、NVIC(中)、Flash三部分。

工作过程:片上外设产生中断源,传输到NVIC中 -> NVIC管理处理中断信号,传输到flash -> flash通过中断向量表找到中断响应函数并执行。

中断向量表

什么是中断向量表:Flash存储器内部从地址0开始的一 段区域,每4个字节存储一个中断响应函数的地址。(用于搜索中断响应函数相当于他的目录)

e.g.

在这里插入图片描述

中断向量表定义在启动文件,当发生中断,CPU会自动执行对应中断服务函数。

在这里插入图片描述

NVIC相关寄存器介绍

NVIC相关寄存器作用位数寄存器个数备注
中断使能寄存器(ISER)给中断使能328每个为控制一个中断
中断除能寄存器(ICER)解除中断328每个位控制1个中断
应用程序中断及复位控制寄存器(AIRCR)可以进行系统复位、向量复位和清除当前活动的中断请求321位[10:8]控制优先级分组
中断优先级存储寄存器(IPR)用于控制中断优先级的分组和位数设置,以便进行中断优先级的管理和调度82408个位对应一个中断而STM32只使用高4位

NVIC还有挂起、解挂、激活标志等非常功能,在此作简单介绍:

  1. 挂起中断(Pending Interrupt):

    - 设置挂起标志(Pending Flag):通过设置NVIC_ISPR寄存器的对应位,可以将中断的挂起标志置位,表示该中断处于挂起状态。

    - 清除挂起标志(Clear Pending Flag):通过设置NVIC_ICPR寄存器的对应位,可以清除中断的挂起标志,表示该中断不再处于挂起状态。

  2. 解挂中断(Unpending Interrupt):

    - 解挂中断(Unpend Interrupt):通过设置NVIC_IABR寄存器的对应位,可以解挂中断,使其从挂起状态转为非挂起状态。

  3. 激活中断(Enable Interrupt):

    - 使能中断(Enable Interrupt):通过设置NVIC_ISER寄存器的对应位,可以使中断处于使能状态,即允许中断请求触发相应的中断服务程序。

    - 禁止中断(Disable Interrupt):通过设置NVIC_ICER寄存器的对应位,可以禁止中断,即阻止中断请求触发相应的中断服务程序。

NVIC工作原理

在这里插入图片描述

补充SHPR:

简言之SHPR是专门配置系统处理器优先级的寄存器。只控制内部不控制外部。

SHPR(System Handler Priority Register)是一个特殊的寄存器,用于配置系统处理器的优先级。它是NVIC(Nested Vectored Interrupt Controller)的一部分。

SHPR寄存器用于设置系统处理器的优先级,这些处理器包括:

- SysTick异常处理器

- PendSV异常处理器

- SVCall(Supervisor Call)异常处理器

该寄存器被分为三个字节,每个字节对应一个处理器的优先级。较低的数值表示较高的优先级(0是最高优先级)。当多个异常同时发生时,优先级较高的异常将被优先处理。【关于优先级下一部分会讲】

请注意,SHPR寄存器只控制系统处理器的优先级,而不是外部中断的优先级。对于外部中断(如GPIO中断),您需要使用其他寄存器(例如NVIC_IPR)来配置它们的优先级。

NVIC的初始化

1.设置中断分组 : AIRCR[10:8],HAL_NVIC_SetPriorityGrouping

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

3.使能中断 : ISERx,HAL_NVIC_EnableIRQ

在这里插入图片描述

总述:

在这里插入图片描述

了解寄存器:SCB_AIRCR NVIC_IPRx NVIC_ISER

编写中断响应函数

在这里插入图片描述
在这里插入图片描述

如何让中断向量表找到自己写的函数:

在.s文件中找到中断响应函数 -> 写一个同名函数覆盖它

e.g.
在这里插入图片描述

在这里插入图片描述

EXTI

**EXTI(External Interrupt/Event Controller) ** : 外部中断/事件控制器

stm32的众多片上外设之一,能够检测外部输入信号的变化边沿并由此产生中断

EXTI的内部结构

在这里插入图片描述

在这里插入图片描述

中断&事件
  • 中断:要进入NVIC,有相应的中断服务函数,需要CPU处理

  • 事件:不进入NVIC,仅用于内部硬件自动控制的。事件指突发事件本身,一般是一个脉冲信号,事件的处理过程不需要CPU介入。 (如:TIM、DMA、ADC)

在这里插入图片描述

EXTI通道

EXTI通道的功能

作用一.让所有IO具备触发中断的能力

在这里插入图片描述

作用二.其他功能

在这里插入图片描述

EXTI的寄存器组

在这里插入图片描述

  • 30
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值