GPIO中断EXTI
一、 基础概念
EXTI框图
外部中断通用I/O映像
EXTI 中断/事件线
∴
1.输入线总共有20条,EXTI0~EXTI19
2.通过配置AFIO_EXTICRx寄存器相应位段进行设置:
以框图为配置步骤参考,上升沿与下降沿触发选择寄存器(EXTI_RTSR 、EXTI_FTSR )配置后GPIO触发则边沿检测电路输出1与软件中断事件寄存器(EXTI_SWIER )相或;
上端(中断):输出至请求挂起寄存器(EXTI_PR)置1并同中断屏蔽寄存器(EXTI-IMR)相与输出至NVIC中断控制器(中断服务函数)
下端(事件):输出至与门跟事件屏蔽寄存器(EXTI_EMR )相与输出至脉冲发生器(常常与ADC关联)
上升沿与下降沿触发选择寄存器(EXTI_RTSR 、EXTI_FTSR )
以GPIO上升沿触发选择寄存器(EXTI_RTSR)为例,配置上升沿触发选择寄存器相应位为1
软件中断事件寄存器(EXTI_SWIER )
挂起寄存器(EXTI-PR)
中断屏蔽寄存器(EXTI-IMR)
事件屏蔽寄存器(EXTI_EMR)
二、中断步骤:
-
GPIO触发
-
EXTI配置
-
NVIC配置
-
NVIC中断服务
三、 中断编程:
两个文件: bsp_exti.c 和 bsp_exti.h 文件用来存放 EXTI 驱动程序及相关宏定义,中断服务函数放在 stm32f10x_it.h 文件中。
思路:
- 初始化用来产生中断的 GPIO;
- 初始化 EXTI;
- 配置 NVIC;
- 编写中断服务函数;
EXTI_InitTypeDef结构体
typedef struct {
uint32_t EXTI_Line; // 中断/事件线
EXTIMode_TypeDef EXTI_Mode; // EXTI 模式
EXTITrigger_TypeDef EXTI_Trigger; // 触发类型
FunctionalState EXTI_LineCmd; // EXTI 使