news 2026/4/23 12:47:22

STM32F407中断优先级设置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32F407中断优先级设置指南

一、什么是中断优先级?

想象一下你在看书,同时手机响了,水也烧开了——你需要决定先处理哪件事。中断优先级就是帮单片机做这个决定的规则。

在STM32F407中,有:

  • 抢占优先级:就像插队权限,高抢占可以打断低抢占

  • 子优先级:当抢占相同时,谁先执行

二、优先级分组(最重要的一步!)

STM32F407把4位优先级分成两部分,有5种分法:

分组抢占位数子优先级位数抢占级数子优先数
00位4位1个级别16个级别
11位3位2个级别8个级别
22位2位4个级别4个级别
33位1位8个级别2个级别
44位0位16个级别1个级别

记住:先选分组,再设优先级!

三、设置三步曲

第1步:选择分组(整个程序只设一次)

// 常用分组2:4个抢占级别,每个抢占内有4个子优先级 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

第2步:配置具体外设的中断

// 以串口1中断为例 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // 中断源 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能 NVIC_Init(&NVIC_InitStructure);

第3步:编写中断服务函数

void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { // 处理接收数据 USART_ClearITPendingBit(USART1, USART_IT_RXNE); } }

四、实用规则(记住这些就够用了)

规则1:先选固定分组

推荐新手用分组2

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 这样有:抢占优先级0-3,子优先级0-3 // 数字越小,优先级越高

规则2:重要中断设高抢占

// 紧急的(如看门狗):抢占优先级设小数字 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 普通的(如串口):抢占优先级设大数字 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

规则3:同类型中断用子优先级区分

// 两个串口,抢占相同,用子优先级区分 串口1:抢占=2,子优先级=0 // 优先处理 串口2:抢占=2,子优先级=1 // 稍后处理

规则4:系统中断的固定优先级

  • 复位:优先级-3(最高)

  • 硬件错误:优先级-2

  • 不可屏蔽中断:优先级-1

五、完整示例:按键和串口中断

#include "stm32f4xx.h" int main(void) { // 第1步:设置分组(整个程序只调用一次!) NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 第2步:配置按键中断(外部中断0) NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 高抢占 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 第3步:配置串口1中断 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 低抢占 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 其他初始化... while(1) { // 主循环 } } // 按键中断服务函数 void EXTI0_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line0) != RESET) { // 处理按键 EXTI_ClearITPendingBit(EXTI_Line0); } } // 串口中断服务函数 void USART1_IRQHandler(void) { // 处理串口 }

六、常见问题

Q1:为什么我的中断不执行?

  • 忘记使能总中断:__enable_irq();

  • 忘记使能具体外设的中断

  • 优先级设置冲突

Q2:怎么选择分组?

  • 简单应用:分组2(4×4组合够用了)

  • 需要很多打断:分组4(16个抢占级),比如FreeRTOS

  • 需要精细排序:分组0(16个子优先级)

Q3:优先级数字能随便写吗?

不能!如果分组2,抢占只能0-3,子优先只能0-3

七、简单记忆口诀

先设分组定规矩,整个程序只一次。

抢占决定谁插队,子优决定同队序。

数字越小越优先,紧急中断抢占高。

分组推荐用2号,四种抢占足够用。

总结

  1. 先调用NVIC_PriorityGroupConfig()设分组(推荐Group2)

  2. 再配置每个中断的抢占和子优先级

  3. 数字越小,优先级越高

  4. 高抢占可以打断低抢占

  5. 同抢占时,高子优先先执行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 12:53:07

终极BIM资源宝库:5万+专业Revit族库免费获取全攻略

终极BIM资源宝库:5万专业Revit族库免费获取全攻略 【免费下载链接】BIMRevit族库打包插件2万个免费资源一次性下载 探索BIM设计的无限可能!我们为您精心准备了2万个免费Revit族库资源,涵盖建筑、结构、水暖电、装饰、施工、路桥等多个专业领域…

作者头像 李华
网站建设 2026/4/23 11:26:56

【Matlab】【文件加密】Matlab中.P文件是什么?

目录 Matlab中.P文件是什么? MATLAB中的.P文件详解 1. 基本定义 2. 主要特点 优点: 限制: 3. 创建方法 4. 执行优先级 5. 使用场景 6. 注意事项 版本兼容性 调试限制 7. 工作流程示例 8. 重要提醒 9. 最佳实践 Matlab中.P文件是什么? Matlab中的.P文件是经过…

作者头像 李华
网站建设 2026/4/23 11:29:27

计算机毕业设计springboot在线问诊平台 基于SpringBoot的互联网远程医疗咨询系统 SpringBoot+MySQL实现的线上健康问诊服务平台

计算机毕业设计springboot在线问诊平台kqd4r385 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。移动互联网把“诊室”搬进了口袋,却仍有不少患者因挂号难、路途远、时…

作者头像 李华
网站建设 2026/4/18 7:56:01

ArkAnalyzer深度解析:鸿蒙ArkTS应用的静态程序分析引擎

ArkAnalyzer深度解析:鸿蒙ArkTS应用的静态程序分析引擎 【免费下载链接】arkanalyzer 方舟分析器:面向ArkTS语言的静态程序分析框架 项目地址: https://gitcode.com/openharmony-sig/arkanalyzer 1. 为什么选择ArkAnalyzer?静态分析的…

作者头像 李华
网站建设 2026/4/23 12:14:22

3步快速上手Taro跨端开发:从零构建多平台应用终极指南

3步快速上手Taro跨端开发:从零构建多平台应用终极指南 【免费下载链接】taro 开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/ 项目地址: htt…

作者头像 李华
网站建设 2026/4/23 12:10:27

如何挑选优质可靠的邮件系统供应商

邮件系统作为企业内外沟通的核心枢纽,其稳定性与安全性直接影响业务推进效率。优质的邮件系统供应商不仅能提供基础的收发功能,更能成为企业数据安全的守护者与办公流程的赋能者。挑选过程中,需跳出功能罗列的误区,从企业实际需求…

作者头像 李华