STM32单片机中断机制剖析:揭秘中断向量表、优先级和嵌套的秘密
发布时间: 2024-07-06 00:47:27 阅读量: 162 订阅数: 40
![STM32单片机中断机制剖析:揭秘中断向量表、优先级和嵌套的秘密](https://static.mianbaoban-assets.eet-china.com/xinyu-images/MBXY-CR-49c8fcbbf1da074b4f39f4f87b814bee.png)
# 1. STM32中断机制概述**
STM32单片机中,中断是一种硬件机制,允许外部事件或内部事件暂停正在执行的代码,并执行一个称为中断服务程序(ISR)的特殊函数。中断机制对于实时系统和处理突发事件至关重要。
中断机制的关键组件包括:
- **中断向量表:**存储ISR地址的内存区域。
- **优先级:**每个中断都分配一个优先级,用于确定中断处理顺序。
- **中断控制器:**管理中断请求,使能和屏蔽中断,以及挂起和恢复中断。
# 2. 中断向量表与优先级
### 2.1 中断向量表结构
STM32单片机的中断向量表位于系统存储器的起始地址(0x0000 0000),由一系列中断向量组成。每个中断向量对应一个特定的中断源,指向中断服务程序(ISR)的入口地址。
中断向量表的结构如下:
| 地址 | 中断源 |
|---|---|
| 0x0000 0000 | 复位向量 |
| 0x0000 0004 | 非屏蔽中断向量 |
| 0x0000 0008 | 硬故障向量 |
| ... | ... |
### 2.2 中断优先级机制
STM32单片机支持中断优先级机制,允许系统根据中断的重要性分配优先级。中断优先级分为0-15,其中0为最高优先级,15为最低优先级。
当多个中断同时发生时,系统会根据优先级选择执行哪个中断服务程序。优先级较高的中断会优先执行,而优先级较低的中断会被挂起。
### 2.3 中断优先级分组
为了进一步细化中断优先级,STM32单片机引入了中断优先级分组机制。优先级分组将中断优先级划分为4个分组,每个分组包含4个优先级。
中断优先级分组的设置可以通过NVIC_IP_GRP寄存器进行配置。该寄存器共有3个位,分别对应3个优先级分组。
### 2.4 中断嵌套机制
STM32单片机支持中断嵌套机制,允许一个中断服务程序在执行过程中被另一个更高优先级的中断打断。
中断嵌套机制通过NVIC_ISPR寄存器进行配置。该寄存器共有16个位,每个位对应一个中断源。当某个中断源被设置位时,表示该中断源允许嵌套。
**代码块:**
```c
// 设置中断优先级分组为组1
NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_1);
// 设置外部中断1的优先级为3,分组为组1
NVIC_SetPriority(EXTI1_IRQn, 3 | (1 << 6));
// 允许外部中断1嵌套
NVIC_EnableIRQ(EXTI1_IRQn);
```
**代码逻辑分析:**
* `NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_1)`:设置中断优先级分组为组1,即4个优先级分组。
* `NVIC_SetPriority(EXTI1_IRQn, 3 | (1 << 6))`:设置外部中断1的优先级为3,分组为组1。`3`表示优先级,`(1 << 6)`表示分组。
* `NVIC_EnableIRQ(EXTI1_IRQn)`:允许外部中断1嵌套。
**参数说明:**
* `NVIC_SetPriori
0
0