STM32学习笔记(2) —— 中断

中断是指在cpu在执行程序的过程中,由于某些内部或者外部的事件的发生,cpu停下正在执行的进程,转向去为这些事件服务,并且在服务完成后回到被打断的地方继续执行的机制。

在这里插入图片描述

嵌套向量控制器(NVIC)和外部中断/事件控制器(EXTI)

中断的类型可以分为内部中断和外部中断,内部中断只要和cpu运行时产生的一些错误和异常有关,我们一般进行配置的是外部中断。STM32对中断的管理是通过NVIC和EXTI两个外设来进行的。

NVIC

NVIC居于M4的内核之中,主要是对中断优先级和中断嵌套进行管理。

中断优先级

在STM32F4中,中断优先级由中断优先级寄存器(IPR)的高四位来控制。并且通过优先级分组将这四位又分为抢占优先级和子优先级,以便管理STM32中的大量中断。简单来说,优先级分组就是来规定IPR高四位的分配情况(如优先级分组为1,则表示抢占优先级占一位,子优先级占三位)。
优先级分组
在进行中断优先级的比较时,首先比较抢占优先级,当抢占优先级相同时比较子优先级。STM32里都是规定优先级的数值越小,对应中断的优先级越高。

中断嵌套

中断嵌套考虑到在执行中断的过程中,接收到其他中断的请求是否执行的问题。STM32中的嵌套原则是高抢占优先级的事件可以打断低抢占优先级的事件;但若抢占优先级相同,高子优先级事件并不能打断低子优先级事件。

EXTI

EXTI主要是对外部中断进行单独的配置,可以配置中断的触发方式,以及中断屏蔽寄存器等等。下图清除的解释了EXTI的功能。
在这里插入图片描述
值得注意的是,EXTI有23根线作为中断源,其中EXTI0 - EXTI15管理外部GPIO端口的中断源,因此会涉及端口复用的问题,同一个EXTI端口只能同时响应一个中断。
在这里插入图片描述

cubeMX配置中断

以GPIO的外部中断为例,首先要配置GPIO端口,端口模式设置为GPIO_EXTIx。下图中我将PE3和PE4作为中断源。
在这里插入图片描述
点开GPIO选项卡,并在GPIO mode一栏可以配置中断的触发方式
在这里插入图片描述
点开NVIC一栏来配置中断优先级
在这里插入图片描述
此项同样可以通过右侧NVIC选项卡来配置

中断服务

用HAL库进行编程,编写中断服务程序有两种方式,第一是直接改写中断服务函数,第二是编写中断回调函数。
当配置好后,cubeMX会自动生成中断服务函数,函数定义在stm32f4xx_it.c下。可以改写函数的函数体来实现中断服务。
在这里插入图片描述
采用HAL库的回调函数的机制来编写中断服务程序。HAL库实现了一个weak版本的回调函数,可以在工程的任意处重写来实现中断功能。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43354913/article/details/112767181