🔬 实验10:中断优先级

📌 实验目标
  • 理解 NVIC 优先级分组的概念
  • 掌握抢占优先级与响应优先级的区别
  • 学会配置多个中断的优先级
  • 理解 volatile 关键字在中断中的重要性

一、实验内容

  1. 配置两个外部中断(EXTI0 和 EXTI1)
  2. 设置不同的抢占优先级和子优先级
  3. 验证高优先级中断可以打断低优先级中断
  4. 理解中断嵌套的执行流程

二、优先级分组

STM32F103 使用 NVIC_PriorityGroupConfig() 设置优先级分组。课程中通常使用:

优先级分组配置
// 在主函数最前面调用
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
// 分组2: 2位抢占优先级 (0-3) + 2位子优先级 (0-3)
// 例如:
// NVIC_IRQChannelPreemptionPriority = 0;  // 高抢占
// NVIC_IRQChannelSubPriority = 0;

// 设置中断优先级时:
// 抢占优先级高的可以打断抢占优先级低的
// 相同抢占优先级下,子优先级高的先响应,但不打断
💡 这段代码怎么用?
  1. 优先级分组整个系统只调用一次,且必须在所有 NVIC_Init() 之前执行——通常放 main() 开头
  2. 分组 2 = 2 位抢占(0~3) + 2 位子优先级(0~3):抢占可嵌套打断,子优先级只在同时到达时排队
  3. 实验任务:给不同按键配不同抢占优先级,观察「高优先级能否打断低优先级」来验证嵌套行为

三、参考资料

资料文件
中断优先级 PPT实验4 外部中断—优先级.pptx
中断优先级代码10.exit_volatil.rar