STM32F407学习记录---外部中断
概述
将 STM32F4 的 IO 口作为外部中断输入,实现通过板载的 4 个按键,控制板载的两个 LED 的亮灭以及蜂鸣器的发声
STM32F4外部中断简介
与外部中断有关的代码分布在stm32f4xx_exti.h和stm32f4xx.c文件中。
STM32F4的每一个IO口都可作为外部中断的中断输入口,其中断控制器支持22个外部中断/事件的请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。
STM32F407的22个爱不中断为:
EXTI线0~15:对应外部IO的输入中断;
EXTI线16:连接到PVD输出;
EXTI线17:连接得到RTC闹钟事件;
EXTI线18:连接到USB OTG FS唤醒事件;
EXTI线19:连接到以太网唤醒事件;
EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件;
EXTI线21;连接到RTC入侵和时间戳事件;
EXTI线22:连接到RTC唤醒事件;
从上面看,STM32F4共IO口使用的中断线只有16个,但STM32F4的IO口却不止16个,那么STM32F4是怎样将16个中断线和IO口一一对应起来的?
答: GPIO管脚GPIOx_0~GPIOx_15(x = A,B,C,D,E,F,G,H,I)分别对应中断线0~15。这样,每个中断线对应了最多9个IO口。以线0为例,它对应了GPIOA_0,GPIOB_0,GPIOC_0,GPIOD_0,GPIOE_0,GPIOF_0,GPIOG_0,GPIOH_0和GPIOI_0。故而每个中断线一次只能连接到一个IO口。所以需要通过配置决定中断线与哪一个IO口联系。下图为中断线与IO口的映射关系:
以下为使用库函数配置外部中断的步骤:
1)使能IO口时钟,初始化IO口为输入模式
此处以板载按键KEY0对应的GPIOE_4为例进行说明:GPIO时钟初始化函数为:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
2)使能外部中断时钟
外部中断时钟使能函数为:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG