stm32中断概览

落花浮王杯 提交于 2020-02-04 22:12:21

STM32 中断非常强大,每个外设都可以产生中断。

异常类型

F429 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。其中系统异常有 10 个,外部中断有 91 个。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。

NVIC

NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。

中断配置

在配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。

中断优先级

在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx(在 F429 中,x=0…90)
在 F429 中,只使用了高 4bit,如下所示

在这里插入图片描述
用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占优先级高的就会 抢占 抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。

优先级分组

优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的PRIGROUP[10:8]位决定,F429 分为了 5 组,具体如下:主优先级=抢占优先级
在这里插入图片描述
设置优先级分组可调用库函数 NVIC_PriorityGroupConfig()实现

抢占优先级与响应优先级

高抢占优先级可以嵌套低抢占优先级的中断。
两者抢占优先级相同,那么无论响应优先级是什么关系,这两者都没有嵌套关系。
假如两者同时发生,且抢占优先级相同,则根据响应优先级顺序执行;加入此时他们的相应优先级也相同,则根据中断清单表排位顺序执行,序号越小,对应优先级越高!

中断编程

在配置每个中断的时候一般有 3 个编程要点:

1、使能外设某个中断,这个具体由每个外设的相关中断使能位控制。比如串口有发送,完成中断,接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。

2、初始化 NVIC_InitTypeDef 结构体,配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求。

3、编写中断服务函数

注意:配置中断优先级分组一次后就不需要重复配置了,除非需要更改

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!