STM32学习笔记6——EXTI
本文最后更新于:2024年11月6日 晚上
0x00 Reference
0x05 EXTI
EXIT是外部中断事件控制器,包含20个产生事件/中断请求的边沿检测器,即总共:20条EXTI线(F1)
中断和事件的区别:
中断:要进入NVIC,有相应的中断服务函数,需要CPU处理
事件:不进入NVIC,仅用于内部硬件自动控制的,如:TIM、DMA、ADC
-1- EXTI工作原理

-2- EXTI寄存器
2-1 EXTI_RTSR

2-2 EXTI_FTSR

2-3 EXTI_IMR

2-4 EXTI_PR

-3- EXTI和IO映射关系
4.1 AFIO简介
Alternate Function IO,即复用功能IO,主要用于重映射和外部中断映射配置
调试IO配置
AFIO_MAPR[26:24],配置JTAG/SWD的开关状态重映射配置
AFIO_MAPR,部分外设IO重映射配置外部中断配置
AFIO_EXTICR14,配置EXTI中断线015对应具体哪个IO口
特别注意:配置AFIO寄存器之前要使能AFIO时钟,方法如下:__HAL_RCC_AFIO_CLK_ENABLE();
对应RCC_APB2ENR寄存器 位0
4.2 EXTI 与 IO对应关系
AFIO_EXTICR1的 EXTI0[3:0]位控制(F1)

Px0映射到EXTI0
Px1映射到EXTI1
…
Px14映射到EXTI14
Px15映射到EXTI15
例如

五、 如何使用中断

5.1 STM32 EXTI的配置步骤(GPIO外部中断)
使能GPIO时钟
设置GPIO输入模式
上/下拉/浮空输入使能AFIO/SYSCFG时钟
设置AFIO/SYSCFG时钟开启寄存器设置EXTI和IO对应关系
选择PA~PK到底哪组IO对应EXTI输入线,AFIO_EXTICR/ SYSCFG_EXTICR设置EXTI屏蔽,上/下沿
选择PA~PK到底哪组IO对应EXTI输入线,AFIO_EXTICR/ SYSCFG_EXTICR设置NVIC
分3步,见前面内容,即:设置优先级分组、设置优先级、使能中断设计中断服务函数 编写对应中断的中断服务函数!清中断标志!
注意:步骤2 - 5使用HAL_GPIO_Init一步到位
5.2 STM32 EXTI的HAL库设置步骤(外部中断)
使能GPIO时钟
__HAL_RCC_GPIOx_CLK_ENABLE
GPIO/AFIO(SYSCFG)/EXTI
HAL_GPIO_Init
,一步到位设置中断分组
HAL_NVIC_SetPriorityGrouping
,此函数仅需设置一次!设置中断优先级
HAL_NVIC_SetPriority
使能中断
HAL_NVIC_EnableIRQ
设计中断服务函数
EXTIx_IRQHandler
,中断服务函数,清中断标志!
STM32仅有:EXTI0~4、EXTI9_5、EXTI15_10,7个外部中断服务函数
六、 通用外设驱动模型(四步法)
初始化 时钟设置、参数设置、IO设置、中断设置(开中断、设NVIC)(可选)
读函数(可选) 从外设读取数据(可选)
写函数(可选) 往外设写入数据(可选)
中断服务函数(可选) 往外设写入数据(可选)
七、 HAL库中断回调处理机制介绍
HAL库的中断回调处理异常复杂,大家知道大概原理即可,看你需要的部分即可!
