一、前言
STM32 系列 MCU 提供丰富的 EXTI(External Interrupt)功能,使得我们可以通过外部引脚(如按键)触发中断事件,适用于:
- 按键检测
- 外部信号响应
- 外设事件输入(如红外信号、霍尔传感器等)
本篇将围绕 STM32F103C8T6,使用 按键输入触发中断 控制 LED 灯翻转,完成 EXTI 的配置与验证。
二、EXTI 工作原理概述
EXTI 的本质是将 GPIO 口输入信号 连接到 中断控制器(NVIC),从而实现软件响应硬件事件。
EXTI 中断触发模式:
- 上升沿触发(上0变1)
- 下降沿触发(下1变0)
- 上升+下降沿触发
EXTI 通道对应关系:
EXTI Line | 可映射 GPIO 引脚 |
---|---|
EXTI0 | PA0 ~ PG0 |
EXTI1 | PA1 ~ PG1 |
… | … |
EXTI15 | PA15 ~ PG15 |
三、应用场景简述
目标:使用按键(接到 PA0),通过下降沿触发 EXTI0 中断,实现 LED(接到 PC13)翻转。
四、硬件连接示意图
STM32F103C8T6 按键
PA0 ----------------> 按键一端
按键另一端接 GND
STM32F103C8T6 LED
PC13 ----------------> LED 正极(串电阻)-> GND
五、软件实现步骤(基于标准库)
1. 初始化 GPIO
void EXTI_GPIO_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
// PA0 -> EXTI0 输入,浮空输入或上拉输入
GPIO_InitStructure.GPIO_Pin = G