STM32中断机制详解及其运用介绍
文章目录
1. 什么是中断
打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断
1.1 中断的作用和意义
实时控制:在确定时间内对相应事件作出响应,如:温度监控
故障处理:检测到故障,需要第一时间处理,如:电梯门夹人了
数据传输:不确定数据何时会来,如:串口数据接收
中断的意义:高效处理紧急程序,不会一直占用CPU资源
1.2 STM32 GPIO外部中断简图
2. NVIC
2.1 NVIC基本概念
NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller,属于内核(M3/4/7)。作用是对STM32中的中断进行管理,因为内核中的中断数量很多,当同时出现多个中断时,应该优先处理哪个中断,哪里后处理,都要靠NVIC 进行控制。M3 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且具有 256 级的可编程中断设置。
NVIC支持:256个中断(16个内核+240个外部);支持256个优先级。
ST公司用不到M3内核中的所有中断以及中断优先级,进而对其进行了一定的裁剪。STM32中共有10个内核中断,60个外部中断,16个中断优先级;
什么是中断向量表?
定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址。中断向量表定义在启动文件 .s里面,当发生中断,CPU会自动执行对应的中断服务函数
具体可参考:STM32F103的中文参考手册,9.1.2中断和异常向量
…
…
2.2 NVIC相关寄存器介绍
NVIC相关的寄存器有很多,但是重要的有以下几个,也是需要进行掌握的:
1、ISER与ICER寄存器共有32*8=256,用于控制240个中断的打开与关闭;
2、AIRCR寄存器,位10、9、8三位用于控制优先级的分组,三位共2的3次方=8种,取其中的5组作为中断优先级的分组情况;
3、IPR寄存器,用于控制中断的优先级,包括抢占优先级与响应优先级,高4位控制,至于哪几位控制抢占,哪几位控制响应,由AIRCR寄存器说了算;
4、NVIC还有:中断挂起,解挂,激活标志等非常用功能
2.3 NVIC工作原理
工作原理:
当外部被出发时,首先进入ICER、ISER寄存器,用于控制是否开对应的中断,打开的中断进入IPR寄存器,进行中断优先级的判断,IPR寄存器受AIRCR寄存器控制,最后按照中断优先级依次进入CPU被执行。
内核中断由SHPR寄存器控制,SHPR与IPR寄存器属于同一级别;
2.4 STM32中断优先级基本概念
- 抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断
- 响应优先级(sub):当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断
- 抢占和响应都相同的情况下,自然优先级越高的,先执行
- 自然优先级:中断向量表的优先级
- 数值越小,表示优先级越高
2.5 STM32中断优先级分组
在前面我们说过AIRCR寄存器,位10、9、8三位用于控制优先级的分组,但是只取其中的五组优先级分组;IPR寄存器,用于控制中断的优先级,包括抢占优先级与响应优先级,高4位控制,如下表所示:
在一个工程中,一般只设置一次中断优先级分组(AIRCR寄存器);
2.6 STM32 NVIC的使用
1、设置中断分组:AIRCR寄存器[10:8]; HAL_NVIC_SetPriorityGrouping();
2、设置中断优先级:IPR寄存器[7:4]; HAL_NVIC_SetPriority();
3、使能中断:ISER寄存器; HAL_NVIC_EnableIRQ();
3.EXTI
3.1 EXTI基本概念
全称:外部(扩展)中断事件控,External(Extended) interrupt/event Controller;包含20个产生事件/中断请求的边沿检测器,即20条EXIT线;
EXIT线说明:
0-15:对应GPIO_PIN 0-15中断;
16:PVD输出;
17:RTC闹钟事件;
18:USB唤醒事件;
19:连接到以太网唤醒事件(只适用于互联型产品)
中断和事件的理解 :
中断:要进入NVIC,有相应的中断服务函数,需要CPU处理;
事件:不进入NVIC,仅用内部硬件自动控制,TIM,DMA,ADC等
3.2 EXTI主要特性
F1/F4/F7系列:
每条EXTI线都可以单独配置:选择类型(中断或者事件)、触发方式(上升沿,下降沿或者双边沿触发)、支持软件触发、开启/屏蔽、有挂起状态位。
H7系列:
由其它外设对 EXTI 产生的事件分为可配置事件和直接事件。
可配置事件:简单概括,基本和F1/F4/F7系列类似
直接事件:固定上升沿触发、不支持软件触发、无挂起状态位(由其它外设提供)
3.3 EXTI工作原理(F1/F4/F7)
具体请看正点原子:https://www.bilibili.com/video/BV1bv4y1R7dp?p=58&vd_source=cb8a23293b3fea6c0995c109c4c109fc
3.4 EXIT相关寄存器
对于外部中断来说,我们只需要掌握其中四个寄存器:上升沿触发选择寄存器(EXTI_RTSR)、下降沿触发选择寄存器(EXTI_FTSR)、挂起寄存器(EXTI_PR)与中断屏蔽寄存器(EXTI_IMR)。
3.4.1 上升沿触发选择寄存器(EXTI_RTSR)
该寄存器主要用于控制输入线进来的输入信号,上升沿时是否在边沿检测电路被检测出,20位共控制20条EXIT线;
3.4.2 上升沿触发选择寄存器(EXTI_RTSR)
该寄存器主要用于控制输入线进来的输入信号,下升沿时是否在边沿检测电路被检测出,20位共控制20条EXIT线;
3.4.3 挂起寄存器(EXTI_PR)
该寄存器的作用主要有两个:
1.检测外部中断线上是否发生了选择的边沿事件,如果发生了,该位置1,并将信号传递给 与门电路,进而进入NVIC中;
2.在该位手动(软件)写入1,可以清除之前中断信号的1,主要作用是进入中断后,清除中断位,防止多次进入中断;
3.4.4 中断屏蔽寄存器(EXTI_IMR)
该寄存器的主要作用只有一个,就是是否允许来自中断线上的中断信号进入NVIC中断控制器。
4.EXTI和IO映射关系
4.1 AFIO简介(F1)
Alternate Function IO,即复用功能IO,主要用于重映射和外部中断映射配置
eg:SYSCFG_EXTICR1~4,配置EXTI中断线0-15对应具体哪个IO口
4.2 SYSCFG简介(F4/F7/H7)
System configuration controller,即系统配置控制器,用于外部中断映射配置。
4.3 EXTI与IO对应关系
EXTI 线 0~15:对应外部 IO 口的输入中断,中断线每次只能连接到 1 个 IO 口上, 这样就需要通过配置决定对应的中断线配置到哪个 GPIO 上了。
GPIO 和中断线映射关系是在寄存器 AFIO_EXTICR1 ~ AFIO_EXTICR4 中配置的
5.如何使用中断
5.1 中断的使用步骤
上述中断步骤共有两条线路,一条为GPIO外部中断的工作流程,即EXIT线(0-15)的工作流程,另外一条为其他外设中断的工作流程,即EXIT线(16-19)的工作流程。
5.1 中断的使用步骤
中断线 0-4,每个中断线对应一个中断函数,中断线 5-9 共用中断函数EXTI9_5_IRQHandler, 中断线 10-15共用中断函数 EXTI15_10_IRQHandler。
6.通过外设驱动模型(四步法)
7.HAL库中断回调处理机制介绍
作者:XxxMyGoddess