外部中断控制:
STM32的每个IO 都可以作为外部中断的中断输入口,这点也是STM32的强大之处。STM32F103的中断控制器支持19个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19个外部中断为:
线0~15:对应外部IO 口的输入中断。
线16:连接到PVD输出。
线17:连接到RTC闹钟事件。
线18:连接到USB唤醒事件。
STM32供IO 口使用的中断线只有16个,但是STM32的IO 口却远远不止16个,STM32就这样设计,GPIO的管教GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线15~0。这样每个中断线对应了最多7个IO 口,以线0为例:它对应了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而中断线每次只能连接到1个IO 口上,这样就需要通过配置来决定对应的中断线配置到哪个GPIO上了。
AFIO(alternate-function I/O),指GPIO端口的复用功能,GPIO除了用作普通的输入输出(主功能),还可以作为片上外设的复用输入输出,如串口、ADC、这些就是复用功能。大多数GPIO都有一个默认复用功能,有的GPIO还有重映射功能,重映射功能是指把原来属于A引脚的默认复用功能,转移到了B引脚进行使用,前提是B引脚具有这个重映射功能。当把GPIO用作EXTI外部中断或使用重映射功能的时候,必须开启AFIO时钟,而使用默认复用功能的时候,就不必开启AFIO时钟了。
主要步骤:1、使能EXTIx线的时钟和第二功能AFIO时钟
2、配置EXTIx先得中断优先级
3、配置EXTI中断线IO
4、选定要配置为EXTI的IO口线和IO口的工作模式
5、EXTI中短线工作模式配置
另外:NVIC_PriorityGroupConfig()库函数,把NVIC中的中断优先级分组设置;然后再向NVIC初始化结构体写入参数。NVIC_IRQChannel=EXTI9_5_IRQn,表示要配置的为EXTI第5-9线的中断向量。这些写入的参数在stm32f10x.h文件的IRQn类型定义中查到。
中短线0-4每个中断线对应一个中断函数,中断线5-9共用中断函数EXTI9_5_IRQHandler,中断线10-15共用中断函数EXTI15-10-IRQHandler。在编写中断服务函数的时候会经常使用到两个函数,第一个函数是判断某个中断线上的中断是否发生(标志位是否置位):
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
这个函数一般使用在中断服务函数的开头判断中断是否发生。另一个函数是清除某个中断线上的中断标志位:
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
这个函数一般应用在中断服务函数结束之前,清除中断标志位