EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都有一个边缘检测器,可以实现对输入信号的上升沿或下降沿检测。EXTI可以实现对每个中断/事件线进行单独的配置,可以单独配置为中断或者事件,以及触发事件的属性。
如下图所示,为EXTI的功能框图。EXTI有两个功能,一个是产生中断,一个是产生事件,下面我们将对这两个功能进行讲解。
1.中断产生
如上图所示,红色虚线指示的是一个产生中断的线路,最终流入到NVIC中断控制器内。
编号1是输入线,可以指定到任意的GPIO,也可以是一些外设事件,输入线一般是存在电平变化的信号。
编号2是边缘检测电路,用来检测输入线的信号是否存在指定的电平变化,如上升沿、下降沿或任意两者都可,由EXTI_RTSR 和 EXTI_FTSR两个寄存器设置检测哪些电平变化过程。
编号3是一个或门,输入信号来自边沿检测电路,另外一个信号来自软件中断事件寄存器(EXTI_SWIER)。我们可以从软件或硬件产生中断/事件。
编号4是一个与门,编号3电路产生信号且中断屏蔽寄存器(EXTI_IMR)开启后,出书信号到NVIC中
2.事件产生
编号7是脉冲发生器电路,线路6产生信号1时本线路产生一个脉冲信号,该脉冲信号可以给其他外设电路使用,比如定时器TIM、ADC等等。
产生中断线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,属于软件级别的;而产生事件目的就是传输一个脉冲信号给其他外设使用,属于电路级的传输,属于硬件级的。
中断事件线
EXTI有20个中断/事件线,每个GPIO都可以被设置成输入线
EXTI初始化
HAL库函数的EXTI初始化非常简单,配置好IO口的模式,然后配置中断源、中断优先级、使能中断
1) HAL_NVIC_SetPriority:该函数负责 EXTI 中断/事件线选择,可选 EXTI0 至 EXTI25,配置优先级。
2) HAL_NVIC_EnableIRQ:该函数负责控制使能中断。
编程要点
1) 初始化用来产生中断的 GPIO;
#define KEY1_INT_GPIO_PORT GPIOA
#define KEY1_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE();
#define KEY1_INT_GPIO_PIN GPIO_PIN_0
#define KEY1_INT_EXTI_IRQ EXTI0_IRQn
#define KEY1_IRQHandler EXTI0_IRQHandler
2) 初始化 EXTI,配置 NVIC;
/**
* @brief 配置 PA0 为线中断口,并设置中断优先级
* @param 无
* @retval 无
*/
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启按键GPIO口的时钟*/
KEY1_INT_GPIO_CLK_ENABLE();
KEY2_INT_GPIO_CLK_ENABLE();
/* 选择按键1的引脚 */
GPIO_InitStructure.Pin = KEY1_INT_GPIO_PIN;
/* 设置引脚为输入模式 */
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
/* 设置引脚不上拉也不下拉 */
GPIO_InitStructure.Pull = GPIO_NOPULL;
/* 使用上面的结构体初始化按键 */
HAL_GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
/* 配置 EXTI 中断源 到key1 引脚、配置中断优先级*/
HAL_NVIC_SetPriority(KEY1_INT_EXTI_IRQ, 0, 0);
/* 使能中断 */
HAL_NVIC_EnableIRQ(KEY1_INT_EXTI_IRQ);
}
3) 编写中断服务函数;
void KEY1_IRQHandler(void)
{
//确保是否产生了EXTI Line中断
if(__HAL_GPIO_EXTI_GET_IT(KEY1_INT_GPIO_PIN) != RESET)
{
// LED1 取反
LED1_TOGGLE;
//清除中断标志位
__HAL_GPIO_EXTI_CLEAR_IT(KEY1_INT_GPIO_PIN);
}
}
上一篇:GPIO功能框图--以STM32F429为例
下一篇:STM32基本定时器 HAL库
推荐阅读最新更新时间:2023-09-21 00:04






推荐帖子
- 从51到ARM. 32位嵌入式系统入门
- 谢谢大家,祝大家学习愉快!从51到ARM.32位嵌入式系统入门
-
zhuizhu12345
ARM技术
- 【家中宝】 esp32s2 lvgl跑起来之lcd io配置
- 【家中宝】esp32s2lvgl跑起来之lcdio配置1,具体参考:D:\2022dk\esp32-s2-kaluga-1\components\board\include\board_kaluga_v1_3.h2,背面的SW3SW4全部ON也可以SW3T1-T5OFF其他ON具体看原理图:3,idf.pymenuconfig配置。4,flash改为4m。5,保存编译下载。6,谢谢鼓励。 【家中宝】esp32s2lvgl跑起
-
damiaa
DigiKey得捷电子技术专区
- 集成电路原装、散新和翻新的区别
-
dongnengshiji
Microchip MCU
- 【sensorTile评测】之六----BlueMicrosystem2评测
- 之前评测中已经下载了评测要用到的所有软件开发包。这次要用到的就是其中的 en.Bluemicrosystem2_firmware.zip 把它解压缩至IAR的安装目录下(你也可以把它解压缩至其他目录下) 到相应路径下打开项目文件,重新编译。 编译后发现16个错误,都是因为缺少bluenrg_gatt_aci.h造成的 图一 实际上这个文件在下面路径下是存在的: 安装目录\en.Bluemicrosyst
-
yang_alex
意法半导体-低功耗射频
- 开关稳压器和LDO稳压器对电源的效率了解
- 在降压转换过程中最常利用的是开关稳压器和LDO稳压器,但缺点在于尺寸太大,LDO如电压偏离值很大时,转换效率就骤降,开关电容稳压器为新兴技术,结合开关电容器和LDO优点,可整合至可携式应用中。设法降低核心处理器的供电电压是手持式装置的全新技术趋势之一,而在降压的同时,也必须兼顾以更高效率延长电池寿命的需求。目前这些装置裡有多种新功能都有降压转换需求,如应用处理器、记忆体和射频(RF)设计等,从负载和空间参数两项考量来看,目前在此类应用上最流行的解决方案,即採开关稳压器和低压降(LDO
-
qwqwqw2088
模拟与混合信号
- 汽车线束和快速样件
- 有定制汽车测试线束或者快速样件的可以找我哦 汽车线束和快速样件
-
买线束找阿琛
汽车电子
设计资源 培训 开发板 精华推荐
最新视频课程更多
- 免费申请评测:1.3元起的国产USB和Touchkey单片机CH554评估板
- 【EE团】TI M4开发板超低价尝鲜体验,分享心得赢百元返现!
- 艾睿电子直播:聚焦“TI FPD-Link III 汽车芯片组” ,汽车视频传输理想解决方案
- 手印签到,共同见证 TI 中国大学计划20周年
- TE 最新趋势报告|《温度监测对发电机市场有何影响》
- 25美分实现25种功能的TI MSP430铁电超值微控制器方案即将直播!快来报名围观!
- 【已结束】TE 直播|如何有效应对当下测试测量领域的挑战
- Microchip直播|如何在ADAS系统中解决精密授时挑战
- 【摸黑抢楼】赢大礼,关于示波器的狂想曲!正式开抢!!!