欢迎来到天天文库
浏览记录
ID:42389352
大小:528.50 KB
页数:7页
时间:2019-09-14
《SDLu的STM32学习笔记(7)外部中断实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、S.D.Lu的STM32学习笔记(7)外部中断实验概述:中断的应用是单片机初学者遇到的第一道最难的障碍。个人认为,是否掌握中断的使用方法也可以作为是否已经入门的判断依据。ARMCoetex-M3内核的中断系统很庞大,支持多达240个中断通道(不包含16个CM3的中断线)。但是STM32并没有使用CM3核的所有资源,目前STM32(非互联型)可支持60个中断通道,互联型支持68个。本篇笔记将从较容易学习的外部中断入手,详细描述STM32的中断编程方法及步骤。由于STM32外部中断的设置相对于51、AVR等单片机来说要复杂,所以在实验之前先沿着信号路径对相关寄存器
2、进行介绍和分析。STM32外部中断:STM32有20个外部中断源,如下:16个GPIO输入中断;PVD输出;RTC闹钟事件;USB唤醒事件;以太网唤醒事件(只适用于互联型产品)。(本篇讨论的是16个GPIO输入中断。)GPIO输入中断虽然有16个输入通道,但是只占用了7个中断向量。EXTI0~EXTI4各占用一个中断向量,EXTI5~9共用一个,EXTI10~15共用一个。所以在编程的时候EXTI5~9将共用一个中断函数,EXTI10~15共用一个中断函数。这16个外部中断和GPIO的映射图如下。-7-由上图可以看出,这16个中断的输入引脚是可以由用户自己重新
3、定义的。当然是有限制的,例如:EXTI0通道,只能选择PA0,PB0,PC0,PD0,PE0,PF0,PG0这7个引脚中的一个;而EXTI1只能选择名称为Px1的7个引脚中的一个(x可取A~G中的一个);依次类推,EXTI2只能选择Px2引脚;……。具体选择那个引脚,可由寄存器AFIO_EXTICRx(x可取1~4)的相应位设置。具体操作可参考本文后面的程序。上图说明了EXTIx的输入通道选择方法,下面将介绍相关内部寄存器的作用及配置。上图是外部中断/事件控制器的框图。该框图涉及6个寄存器,(按信号路径)分别是:下降沿触发选择寄存器(EXTI_FTSR);上升
4、沿触发选择寄存器(EXTI_RTSR);软件中断事件寄存器(EXTI_SWIER);挂起寄存器(EXTI_PR);中断屏蔽寄存器(EXTI_IMR);事件屏蔽寄存器(EXTI_EMR)。为了便于理解,我们先将上图简化。首先,左下角的“脉冲发生器”和“事件屏蔽寄存器”是用于产生事件脉冲信号的,为其它外设模块提供触发信号。在本篇笔记我们不涉及该内容,可将这部分模块忽略。欲了解中断和事件的区别,看参考《STM32中外部中断与外部事件》一文。其次,中间的“软件中断事件寄存器”的作用是,为用户提供一个通过软件产生中断的途径,在此也可暂时忽略。“请求挂起寄存器”其实就是中
5、断标志寄存器。简化后得到下图:-7-所以,在外部中断控制器部分我们只需要操作4个寄存器即可:下降沿触发选择寄存器(EXTI_FTSR);上升沿触发选择寄存器(EXTI_RTSR);挂起寄存器(EXTI_PR);中断屏蔽寄存器(EXTI_IMR)。简化框图中,最左边的箭头“至NVIC中断控制器”,指向下一个中断处理模块。NVIC的全称是嵌套向量中断控制器。这是STM32外部中断设置最难理解的部分。NVIC对CM3核支持的所有240个通道的中断嵌套进行控制。我们先了解NVIC的相关寄存器。打开固件库的头文件core_cm3.h,查找“NVIC”,找到如下结构体定义
6、:由NVIC的结构体定义可以知道,其中有7个可用的寄存器组:__IOuint32_tISER[8]:中断使能设置寄存器组;__IOuint32_tICER[8]:中断使能清除寄存器组;__IOuint32_tISPR[8]:中断挂起设置寄存器组;__IOuint32_tICPR[8]:中断挂起清除寄存器组;__IOuint32_tIABR[8]:中断激活位寄存器组;__IOuint8_tIP[240]:中断优先级寄存器组,8bit宽度;__Ouint32_tSTIR:软件触发中断寄存器组。这些寄存器的功能描述可参考《Cortex-M3技术参考手册》(广州周立功
7、公司)第8章。STM32最多只有68个中断通道,所以没有使用上述的全部寄存器。对各个中断的优先级设置就是通过写这些寄存器组完成的。需要说明一点,STM32的中断优先级寄存器只用了8位宽度的高4位,而这4位的意义则由寄存器AIRCR的[10:8]这3个位的设置决定。AIRCR寄存器的说明请参考《Cortex-M3技术参考手册》正文第83~84页。AIRCR被定义在SCB_Type结构体中,在core_cm3.h第160行。关于中断优先级设置和中断过程的更多详细说明,可参考《STM32中断优先级相关概念与使用笔记》(华东师大)和《Cortex-M3权威指南》(宋岩
8、译)第八章的“中断建立全过程的演示”一
此文档下载收益归作者所有