中断(Interrupt)和外部中断(External Interrupt)是"包含关系":
- 中断:CPU 被"打断",去处理一个紧急事件,然后再回来继续原来的代码。
- 外部中断 :中断的一种,事件来自芯片外部引脚(比如按键、传感器输出、电平变化)。
1) 中断是什么
平时写的 while(1) 是"轮询模式":CPU 一直自己跑代码、自己判断条件。
中断相当于 CPU 的"电话铃":
- 平时 CPU 正在执行主程序(main/while)
- 某个事件发生(比如定时器到点、串口收到字节、按键触发)
- CPU 暂停当前执行位置 ,跳去执行对应的 中断服务函数 ISR(也叫中断处理函数)
- ISR 执行完后,CPU 回到原来暂停的位置继续跑
在举一个工程中断例子:USART1_IRQHandler(),串口接收中断来了就进这个函数处理数据。
2) 外部中断是什么
外部中断(EXTI) 特指:由某个 GPIO 引脚电平变化触发的中断,例如:
- 按键按下(电平从 1→0 或 0→1)
- 传感器输出一个脉冲
- 外部模块给一个"事件信号"
STM32F1 的外部中断是 EXTI(External Interrupt/Event Controller):
- 每个 GPIO 引脚(Px0~Px15)可以映射到 EXTI0~EXTI15
- 可以配置触发方式:上升沿/下降沿/双沿
- 触发后 CPU 跳到对应的 IRQHandler(例如 EXTI0_IRQHandler、EXTI15_10_IRQHandler 等)
3) 中断 vs 外部中断:一张对比表
-
来源
- 中断:来自很多地方(定时器、串口、DMA、SysTick、外部引脚...)
- 外部中断:只来自 GPIO 引脚(EXTI)
-
典型用途
- 中断:定时任务、串口收发、DMA完成、系统滴答等
- 外部中断:按键、外部信号触发、急停、传感器边沿
-
工程里的例子
- 串口接收中断:
USART1_IRQHandler() - delay 用的 SysTick 属于"系统定时中断":delay.c 是用 SysTick 计数做延时
- 串口接收中断: