带你了解STM32中断系统

4.3 中断

中断是指计算机运行过程中,出现某些意外情况需要计算机处理时,技能能自动暂停正在运行的程序并转入处理新情况的程序,处理完毕后又返回原先被暂停的程序继续运行的功能。

举一个生活例子来说明:小明在厨房干活,流程是烧水——洗菜——切菜——煮饭——煮汤。烧水需要10分钟,当小明加完水点火后,需要等10分钟才能烧完水。此时小明为了提高效率,不应该白白地10分钟,于是小明继续洗菜。洗菜的过程中,水开了,烧水壶发出了声音,小明停止手里正在洗菜的工作,把烧水的火关了,防止烧干,然后回来继续洗菜。

这个过程中,小明在洗菜等同于计算机正在处理当前程序。水开了等同于中断发生了;小明停止洗菜,去把火关了,等同于计算机开始处理新程序。之后小明继续回来洗菜等同于计算机返回原先被暂停的程序继续运行。

通过这个例子,我们可以知道中断有3个重要的因素:

(1)中断源。引发中断发生的原因,例如水开了就是一个中断源。

(2)中断处理函数。当中断发生时,我们必须为计算机指定该中断对应的处理函数,否则计算机不知道如何处理这个中断。例如小明把火关了这个动作就是中断处理函数。

3. 可返回。中断处理完后必须返回到原先程序。

中断是计算机系统的关键技术之一,可以有效提高计算机的效率,满足实时性的要求。

4.3.1 STM32中断向量表

STM32具有非常强大的中断系统,将中断分为两种类型:内核中断和外部中断,并将所有中断编排起来,形成一个表,我们称之为中断向量表。需要注意的是,STM32系列芯片有很多型号,每种型号的中断向量表都不一样,读者需要根据自己的芯片型号去ST官网下载对应的芯片手册查看。本书这里只列出STM32F407系列芯片的中断向量表。如图4.29所示。

其中,-3 ~ 6 被标黑的这几列属于内核中断。从7开始属于外部中断。

内核中断是不能被打断的,也不能设置优先级的,凌驾于外部中断之上。常见的内核中断有:复位(Reset)、不可屏蔽中断(NMI)、硬中断(HardFault)等

外部中断是我们学习的重点,可配置优先级。优先级分为两种:抢占优先级和响应优先级。

1. 抢占优先级

抢占优先级高的中断能打断抢占优先级低的中断,等优先级高的任务处理完后,再回来继续处理之前低优先级的中断任务。所有当存在多个抢占优先级不同的任务时,可能会出现

2. 响应优先级

响应优先级又被称为次优先级,若两个任务的抢占式优先级一样,那么响应优先级较高的任务则先执行,且在执行的同时不能被下一个响应优先级更高的任务打断。

STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道,16 个可编程优先级(使用了 4 位中断优先级)。

图4.29 STM32F407中断向量表

 

4.3.2 中断控制器

由于STM32的中断系统比较复杂,所以内核中有一个专门管理中断的控制器:NVIC。

STM32标准库提供了一套通过NVIC来控制中断的API。我们首先来看NVIC_Init()函数,这套函数首先要定义并填充一个结构体:NVIC_InitTypeDef 该结构体的定义如下:

NVIC_IRQChannel :需要配置的中断向量。

NVIC_IRQChannelCmd :使能或者关闭相应中断向量的中断响应。

NVIC_IRQChannelPreemptionPriority :配置相应中断向量的抢占优先级。

NVIC_IRQChannelSubPriority :配置相应中断的响应优先级。

不过要注意一点的是,NVIC只可以配置16种中断向量的优先级,其抢占优先级和响应优先级都用一个4位的数字来决定。在库函数中,将其分为了5中不同的分配方式:

第0组:所有的4位都有来表示响应优先级,能够配置16种不同的响应优先级。中断优先级则都相同。

第1组:最高一位用来配置抢占优先级,剩余三位用来表示响应优先级。那么就有两种不同的抢占优先级(0和1)和8种不同的响应优先级(0~7)。

第2组:高两位用来配置抢占优先级,低位用来配置响应优先级。那么两种优先级就各有4种。

第3组:高三位用来配置抢占优先级,低位用来配置响应优先级。有8种抢占优先级和2种相应优先级。

第4组:所有位都用来配置抢占优先级,即有16种抢占优先级,没有响应属性。

这5种不同的分配方式,根据项目的实际需求来配置。

配置的API如下:

NVIC_PriorityGroupConfig();

其中括号内可以输入以下一个参数,代表不同的分配方式:

NVIC_PriorityGroup_0

NVIC_PriorityGroup_1

NVIC_PriorityGroup_2

NVIC_PriorityGroup_3

NVIC_PriorityGroup_4

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值