🔬 实验10:中断优先级
📌 实验目标
- 理解 NVIC 优先级分组的概念
- 掌握抢占优先级与响应优先级的区别
- 学会配置多个中断的优先级
- 理解 volatile 关键字在中断中的重要性
一、实验内容
- 配置两个外部中断(EXTI0 和 EXTI1)
- 设置不同的抢占优先级和子优先级
- 验证高优先级中断可以打断低优先级中断
- 理解中断嵌套的执行流程
二、优先级分组
STM32F103 使用 NVIC_PriorityGroupConfig() 设置优先级分组。课程中通常使用:
优先级分组配置
// 在主函数最前面调用
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// 分组2: 2位抢占优先级 (0-3) + 2位子优先级 (0-3)
// 例如:
// NVIC_IRQChannelPreemptionPriority = 0; // 高抢占
// NVIC_IRQChannelSubPriority = 0;
// 设置中断优先级时:
// 抢占优先级高的可以打断抢占优先级低的
// 相同抢占优先级下,子优先级高的先响应,但不打断💡 这段代码怎么用?
- 优先级分组整个系统只调用一次,且必须在所有
NVIC_Init()之前执行——通常放main()开头 - 分组 2 = 2 位抢占(0~3) + 2 位子优先级(0~3):抢占可嵌套打断,子优先级只在同时到达时排队
- 实验任务:给不同按键配不同抢占优先级,观察「高优先级能否打断低优先级」来验证嵌套行为
三、参考资料
| 资料 | 文件 |
|---|---|
| 中断优先级 PPT | 实验4 外部中断—优先级.pptx |
| 中断优先级代码 | 10.exit_volatil.rar |