一、EXTI
STM32F10x外部中断/事件控制器(EXTI)包含多达20个用于产生事件/中断请求的边沿检测器。EXTI的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或双边沿触发),还可独立的被屏蔽。总结一句话就是:STM32F10x外部中断/事件控制器(EXTI)一共有20个通道,其中16个通道映射到了GPIO口上。
在stm32中文参考手册中我们可以找到如下图:
框图:
图解:从输入线开始,进入到边沿检测电路,边沿检测电路中可以设置为检测上升沿、下降沿或者双边沿触发,假设是上升沿触发,此时会经过一个或门(或门特点:有1则1),经过或门后可以通过一个与门,然后直接经过脉冲发生器产生事件,或者经过请求挂起寄存器,如果此时已经有一个中断存在,则较低优先级的中断会被挂起,较高优先级的中断会经过与门至NVIC中断控制器。
二、外部中断配置步骤
要使用外部中断我们就需要先配置它,通常经过这几步:
(1)使能IO口时钟,配置IO口模式为输入
(2)开启AFIO时钟,设置IO口与中断线的映射关系,
RCC_APB2PeriphClockCmd(RCC_APB2periph_AFIO,ENABLE);
GPIO_EXTILineConfig();
(3)配置中断分组(NVIC),使能中断
(4)初始化EXTI,选择触发方式
void EXTI_Init();
EXTI_InitStruct.EXTI_Line //中断/事件如PA0我们会映射到EXTI0
EXTI_InitStruct.EXTI_Mode //EXTI 模式,有两种,一个是中断,一个是事件
EXTI_InitStruct.EXTI_Trigger //EXTI触发方式,如:上升沿触发,下降沿触发,双边沿触发
EXTI_InitStruct.EXTI_LineCmd //中断使能
EXTI_Init(&EXTI_InitStruct);
(5)编写中断服务函数
其中5-9是共用一个函数