STM32 Hal库版—NVIC、外部中断(EXTI)

一、中断

1.1.什么是中断

STM32中的中断是指在程序正常运行时,外部事件或内部异常强行打断当前执行流程,转而执行相应处理程序,完成后再返回原流程的机制。在STM32中,中断是指当外设或处理器内部发生某些事件时,处理器暂停当前执行的程序,转而执行预定义的中断服务程序,处理完毕后再返回原程序继续执行的机制。

1.2.中断的意义与作用

中断的意义就是能高效处理紧急程序,不会一直占用CPU资源。
作用:

  • 实时控制:在确定时间内对相应事件做出响应。
  • 故障处理:检测到故障,需要第一时间处理。
  • 数据传输:为了不确定到来的数据提供保障

1.3.中断优先级基本概念

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

1.4.中断优先级分组

以下表格是中断优先级分组,优先级分组为5组,是因为STM32的IPR(中断优先级寄存器)只使用高四位。

优先级分组AIRCR[10:8]IPRx bit[7:4]分配结果
0111None :[7:4]0位抢占优先级,4位响应优先级
1110[7] :[6:4]1位抢占优先级,3位响应优先级
2101[7:6] :[5:4]2位抢占优先级,2位响应优先级
3100[7:5] :[4]3位抢占优先级,1位响应优先级
4011[7:4] :None4位抢占优先级,0位响应优先级

下表为中断优先级举例:(假设分组是2)
首先看抢占优先级,抢占优先级数值越低,越先执行,因此编号3和7排到前二名;再看响应优先级,响应优先级数值越低,越先执行,因此编号7最先执行;再看编号6和-1,它们的抢占优先级和响应优先级都一样,就要看自然优先级,自然优先级数值越低,越先执行,因此编号-1要排到第3个执行,编号6要排到最后执行。总结,先考虑抢占优先级,再考虑响应优先级,最后考虑自然优先级。

编号自然优先级对应外设抢占响应执行顺序
310RTC212
613EXTI0304
714EXTI1201
-16Systick303

PS:如果EXTI0或Systick正在执行,RTC或EXTI1可以打断它;如果EXTI0正在执行,Systick不可以打断它。

二、NVIC

2.1.NVIC的基本概念

NVIC全称:Nested vectored interrupt controller(嵌套向量中断控制器)是STM32中用于管理和控制中断的核心组件,负责中断优先级分配、使能/禁用控制以及中断嵌套处理等功能。NVIC是STM32处理器中负责处理和管理中断的核心组件,它通过配置中断优先级、使能中断源以及处理中断嵌套等功能,确保系统能够高效响应各类中断请求。NVIC支持256个中断(16内核+240外部),支持256个优先级,并允许裁剪,ST公司把256个优先级裁剪为16个。下图是F1和F4型号的中断和中断优先级对比:

型号内核中断外部中断中断优先级
STM32F103xx106016
STM32F407xx108216

图中内核中断为10,意味着有6个中断被保留。无论是内核中断还是外部中断,它都有相应的中断服务函数,也就是中断发生时,CPU需要执行相应的中断程序,中断服务函数就是该中断程序的一个入口。这些中断服务函数被定义在中断向量表里。

2.2.中断向量表

中断向量表是指在一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址,当发生中断时,CPU会自动执行对应的中断服务函数,main函数往往是最后执行的,也就是优先级最低。
下图是内核中断服务函数(10个):
在这里插入图片描述
在这里插入图片描述
下图是外部中断服务函数(60个):
在这里插入图片描述

2.3.NVIC相关寄存器

NVIC相关寄存器位数寄存器个数备注
中断使能寄存器(ISER)32832*8=240个外部中断,每个位控制一个中断置1
中断除能寄存器(ICER)32832*8=240个外部中断,每个位控制一个中断置0
应用程序中断及复位控制寄存器(AIRCR)321位[10:8]只有这三个位控制优先级分组
中断优先级寄存器(IPR)82408个位对应一个,而STM32只使用高4位

2.4.NVIC的工作原理

下图是NVIC的工作原理,假设有4个外部中断来影响程序执行,外部中断进入NVIC后首先经过ISER和ICER寄存器来决定是否给该中断使能,如下图可知只有外部中断2、3、4使能,并进入IPR(中断优先级寄存器),STM32只使用高4位来控制一个优先级,再由AIRCR(应用程序中断及复位控制寄存器)控制优先级分组,最后到CPU来处理,其中内核中断最后一个到来,内核中断不用经过使能或失能,直接来到SHPR(系统异常优先级寄存器),该寄存器与IPR同一级别,最后CPU再处理内核中断。
在这里插入图片描述

2.5.NVIC的使用

  • 设置中断分组:寄存器AIRCR[10:8],HAL_NVIC_SetPriorityGrouping
  • 设置中断优先级:寄存器IPRx bit[7:4],HAL_NVIC_SetPriority
  • 使能中断:寄存器ISERx,HAL_NVIC_EnableIRQ

2.5.1.HAL_NVIC_SetPriorityGrouping

设置中断分组,大概是通过以下流程来操控AIRCR寄存器来设置分组。
在这里插入图片描述
在这里插入图片描述

2.5.2.HAL_NVIC_SetPriority

该函数有三个参数,第一个填入外部中断的位置(该编号可查阅STM32F10xxx参考手册_V10(中文版)第132页);第二个填入抢占优先级;第三个填入响应优先级。主要操作的是IPR(中断优先级寄存器)。
在这里插入图片描述
在这里插入图片描述

2.5.3.HAL_NVIC_EnableIRQ

该函数主要实现请求使能该中断,通过ISER(中断使能寄存器)控制特定位置1使能。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值