第八章 外部中断实验
8.1 实验目的
本实验旨在学习STM32的外部输入中断的使用方法,上一章中的4个按键输入,其实都可以配置成中断输入的方式,下面我们来学习此功能。
8.2 实验简介
8.2.1什么是中断?
本来处于正常状态(比如我现在处于写程序状态),突然有个外部因素干扰(比如快递员打电话叫我去拿快递),然后马上处理干扰事项(跑下楼去签收快递),解决好后又回到原来正常状态(拿好快递后又开始写程序)。在中断产生后一般会去执行中断服务函数,实现特定任务(这里跑下来去签收快递就是中断服务函数内容)。STM32的中断是如何管理的呢--NVIC。
8.2.2 NVIC--嵌套向量中断控制器
NVIC 即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。 STM32的中有一个强大而方便的NVIC,它是属于CM4内核的器件。 NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对CM4内核里面的 NVIC进行裁剪,把不需要的部分去掉,所以说STM32的NVIC是CM4的NVIC的一个子集。CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM4内核的全部东西,而是只用了它的一部分。 STM32F407芯片有70个中断,包括10个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级,我们常用的就是这 60个可屏蔽中断。关于NVIC寄存器位的具体定义可以参考。同时推荐阅读《 CortexM4内核编程手册》。
8.2.3 中断优先级
STM32 中有两个优先级的概念:抢占式优先级和响应优先级,响应优先级也 称子优先级,每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响
8.2.4 优先级分组
优先级的分组由内核外设SCB的应用程序中断及复位控制寄存器AIRCR的PRIGROUP[10:8]位决定,有5个可选分组, 如下图。
图8.2.4.1
我们就可以清楚的看到组0--4对应的配置关系,例如组设置为2,那么此时所有的60个中断,每个中断的中断优先寄存器的高四位中的最高2位是抢占优先级,低2位是响应优先级。每个中断,你可以设置抢占优先级为0~4,响应优先级也可设置为 0~4。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
8.2.5 EXTI--外部中断/事件控制器
STM32的每个IO都可以作为外部中断的中断输入口,这点也是STM32的强大之处。 STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
STM32F407的22个外部中断为:
EXTI线 0~15:对应外部IO口的输入中断。
EXTI线 16:连接到 PVD 输出。
EXTI线 17:连接到 RTC 闹钟事件。
EXTI线 18:连接到 USB 唤醒事件。
EXTI 线 19:连接到以太网唤醒事件。
EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。
EXTI 线 21:连接到 RTC 入侵和时间戳事件。
EXTI 线 22:连接到 RTC 唤醒事件。
STM32使用的IO中断只有16个,那STM32的所有IO是怎么连接到这16个中断上的呢,它们间有如下映射关系,如图8.2.5.1所示:
图8.2.5.1
8.3 电路设计
电路同上一章中的用户按键电路,电路图请参看上一章,这里略过。
8.4 软件设计
打开光盘目录下的3、程序源码->1、基础实验->下的实验5 外部中断实验工程,打开左侧目录树BSP下的Exti.c文件,此为外部输入中断的驱动程序文件,工程目录如下图所示:
图8.4.1
打开Exti.c文件,代码如下:
打开main.c文件,代码如下,将按键KEY1和KEY2配置成外部中断输入
此内容由EEWORLD论坛网友hejecu原创,如需转载或用于商业用途需征得作者同意并注明出处
8.5 下载验证
用MINI USB线通过CN3的USB口连接电脑和开发板,拨动电源开关给开发板上电,D3电源指示灯点亮,连接好JLINK/ST-LINK下载调试器,打开“实验5 外部中断实验”工程代码,编译下载,按下KEY1按键LED灯D4、D5点亮,按下KEY2按键LED灯D4、D5熄灭。