1. STM32中断系统概述
中断是嵌入式系统中最核心的机制之一,它允许处理器在执行主程序时,能够及时响应外部或内部发生的紧急事件。在STM32微控制器中,中断系统设计得尤为完善,几乎所有的外设都可以产生中断请求。
我第一次接触STM32中断是在做一个工业传感器项目时,当时需要实时响应多个传感器的信号变化。通过配置中断,成功实现了微秒级的响应速度,这让我深刻认识到中断在实时系统中的重要性。
STM32的中断系统基于ARM Cortex-M内核的NVIC(Nested Vectored Interrupt Controller)实现,具有以下关键特性:
- 支持多达240个中断源(具体数量取决于型号)
- 可编程的优先级管理
- 低延迟的中断响应
- 自动保存和恢复上下文
- 支持中断嵌套
提示:STM32F1系列的中断优先级配置与F4/F7/H7系列有所不同,在移植代码时需要特别注意这一点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中断相关寄存器详解
2.1 中断使能寄存器
STM32的中断控制主要通过以下几组寄存器实现:
- ISER(Interrupt Set Enable Register):用于使能中断
- ICER(Interrupt Clear Enable Register):用于禁用中断
- ISPR(Interrupt Set Pending Register):手动触发中断
- ICPR(Interrupt Clear Pending Register):清除挂起状态
以USART1接收中断为例,其配置代码如下:
c复制// 使能USART1全局中断
NVIC_EnableIRQ(USART1_IRQn);
// 禁用USART1全局中断
NVIC_DisableIRQ(USART1_IRQn);
2.2 优先级配置寄存器
STM32的中断优先级通过NVIC_IPRx寄存器配置,每个中断占用8位,但实际使用的位数取决于优先级分组设置。
优先级分组通过SCB->AIRCR寄存器配置,共有5种分组方式:
| 分组 | 抢占优先级位数 | 子优先级位数 | 说明 |
|---|---|---|---|
| 0 |
