微控制器中的EXTI0(External Interrupt 0)中断是什么?
微控制器中的EXTI0(External Interrupt 0)中断是什么?
EXTI0(External Interrupt 0) 是微控制器(如STM32等ARM Cortex-M系列芯片)中的一个外部中断线,专门用于处理来自特定GPIO引脚的外部信号触发中断。以下是详细说明:
1. 基本概念
- EXTI(External Interrupt/Event Controller):
是微控制器的一个外设,用于检测GPIO引脚上的边沿信号(上升沿、下降沿或双边沿),并触发中断或事件。 - EXTI0:
特指外部中断线0,通常与微控制器的GPIO引脚0关联(例如PA0、PB0等,具体取决于芯片设计)。
2. 触发方式
EXTI0可通过以下方式触发中断:
- 上升沿(Rising Edge):信号从低电平跳变到高电平。
- 下降沿(Falling Edge):信号从高电平跳变到低电平。
- 双边沿(Both Edges):上升沿和下降沿均可触发。
3. 关联引脚
- 在STM32中,EXTI0通常与所有GPIO端口的Pin 0复用,例如:
- PA0、PB0、PC0等(具体可通过寄存器配置选择)。
- 注意:同一时间只能有一个GPIO引脚连接到EXTI0(例如PA0或PB0,不能同时使用)。
4. 典型应用场景
- 按键检测(按键按下/释放触发中断)。
- 外部传感器信号(如光电开关、霍尔传感器等)。
- 低功耗模式下唤醒MCU(通过外部信号唤醒)。
5. 配置步骤(以STM32为例)
// 示例代码:配置PA0为EXTI0中断,下降沿触发
#include "stm32f4xx.h"void EXTI0_Init(void) {// 1. 使能GPIOA时钟RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;// 2. 配置PA0为输入模式(上拉/下拉可选)GPIOA->MODER &= ~GPIO_MODER_MODER0; // 输入模式GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_0; // 上拉// 3. 选择PA0作为EXTI0的输入源SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA;// 4. 配置EXTI0为下降沿触发EXTI->FTSR |= EXTI_FTSR_TR0;// 5. 使能EXTI0中断EXTI->IMR |= EXTI_IMR_MR0;// 6. 设置NVIC优先级并启用中断NVIC_SetPriority(EXTI0_IRQn, 0);NVIC_EnableIRQ(EXTI0_IRQn);
}// 中断服务函数
void EXTI0_IRQHandler(void) {if (EXTI->PR & EXTI_PR_PR0) {EXTI->PR |= EXTI_PR_PR0; // 清除中断标志// 处理中断逻辑(例如翻转LED)}
}
6. 注意事项
- 中断标志清除:必须在中断服务函数中清除EXTI的中断挂起位(
EXTI_PR
),否则会持续触发中断。 - 引脚冲突:避免多个GPIO引脚同时映射到同一EXTI线。
- 消抖处理:若用于按键检测,建议在硬件(电容)或软件(延时去抖)上处理信号抖动。