1. 单片机中断系统基础概念
在嵌入式系统开发中,中断机制是处理器响应外部事件的核心机制。当我在调试STM32项目时,经常需要处理各种中断事件,理解中断的工作原理对开发稳定可靠的嵌入式系统至关重要。
中断本质上是一种硬件触发的异常机制,它允许处理器暂停当前执行的程序,转去执行特定的中断服务程序(ISR)。与轮询方式相比,中断机制能显著提高CPU效率,实现实时响应。在STM32这类Cortex-M内核单片机中,中断处理涉及几个关键概念:
- 中断源:产生中断请求的硬件模块,如GPIO、定时器、串口等
- 中断向量表:存储各个中断服务程序入口地址的数组
- 中断优先级:决定多个中断同时发生时处理顺序的优先级
- 中断嵌套:高优先级中断可以打断正在执行的低优先级中断
以按键检测为例,使用中断方式相比轮询方式能节省大量CPU资源。当没有按键按下时,CPU可以执行其他任务;当按键按下产生中断时,CPU立即响应并执行按键处理程序。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. NVIC架构深度解析
NVIC(Nested Vectored Interrupt Controller)是Cortex-M内核的中断控制器,它管理着所有中断的优先级和响应。我在多个STM32项目中使用过不同型号的芯片,发现虽然具体中断数量可能不同,但NVIC的工作原理是一致的。
2.1 NVIC寄存器组成
NVIC通过一组寄存器管理中断状态,主要包括:
- 中断使能寄存器(ISER/ICER):
c复制// 使能中断#n
NVIC->ISER[n/32] = (1 << (n%32));
// 禁用中断#n
NVIC->ICER[n/32] = (1 << (n%32));
- 中断挂起寄存器(ISPR/ICPR):
c复制// 手动挂起中断#n
NVIC->ISPR[n/32] = (1 << (n%32));
// 清除挂起状态
NVIC->ICPR[n/32] = (1 << (n%32));
- 中断优先级寄存器(IPR):
c复制// 设置中断#n的优先级
NVIC->IP[n] = priority;
2.2 优先级分组机制
NVIC的优先级分组是初学者最容易混淆的概念。STM32使用了4位优先级字段,通过SCB->AIRCR寄存器
