当前位置: 首页 > news >正文

1.中断的优先级


1.中断优先级分组



2.中断排队

3.中断嵌套



4.例子

5.NVIC



对!你理解得完全正确,CubeMX里只需要把“需要用中断的外设”对应的中断勾选上,不需要中断的就不用勾。


✅ 先给你一个直接结论

  • 定时器2、定时器5:你用了HAL_TIM_Base_Start_IT(),依赖溢出中断执行看门狗和PID,所以它们的全局中断(TIM2、TIM5)必须在CubeMX里勾选,你现在的配置是对的。
  • 定时器3、定时器4:你用的是HAL_TIM_Base_Start(),只是ETR外部时钟计数,不需要溢出中断,所以TIM3、TIM4的中断不勾选是完全正确的,你现在的配置是对的。
  • 定时器1、定时器9(PWM):你用的是HAL_TIM_PWM_Start(),只是输出PWM,不需要中断,所以TIM1、TIM9的中断不勾选是完全正确的,你现在的配置是对的。
  • USART1(DMA+空闲中断):你用了HAL_UARTEx_ReceiveToIdle_DMA(),依赖USART全局中断处理空闲事件,所以USART1的中断必须勾选,你现在的配置是对的。

📌 为什么会这样?

CubeMX里的“中断勾选”,本质是帮你做两件事:

  1. stm32f4xx_it.c里生成对应的中断服务函数(比如TIM2_IRQHandler
  2. 自动配置NVIC优先级,使能外设的中断通道
  • 你用HAL_TIM_Base_Start_IT(),就会依赖中断服务函数来调用HAL_TIM_PeriodElapsedCallback,所以必须勾选。
  • 你用HAL_TIM_Base_Start(),定时器只是在硬件层面计数,不需要CPU响应中断,所以不勾选也能正常工作,还能省CPU资源。

我帮你把这两个图的关系讲透,你一看就懂:


1. 图1:CubeMX里的Priority Group下拉框

这个下拉框里的选项,直接对应了STM32的中断优先级分组

选项分组名称抢占优先级位数子优先级位数
0 bits for prGroup 00 位(1级)4 位(16级)
1 bits for prGroup 11 位(2级)3 位(8级)
2 bits for prGroup 22 位(4级)2 位(4级)
3 bits for prGroup 33 位(8级)1 位(2级)
4 bits for prGroup 44 位(16级)0 位(1级)

你现在选中的4 bits for pr,对应的就是优先级分组4


2. 图2:优先级位分配示意图

这张图就是上面表格的可视化版本:

  • 每一行的蓝色分割线,就对应了上面的分组选项
  • 比如最后一行,蓝色分割线在最右边,就是4位全给抢占优先级,和你选的4 bits for pr完全对应

3. 结合你的工程,我给你推荐一个最合适的分组

你现在有这些带中断的外设:

  • TIM2(看门狗)
  • TIM5(PID控制)
  • USART1(串口DMA+空闲中断)
  • EXTI(故障急停)

最推荐你用2 bits for pr(Group 2),理由:

  • 抢占优先级:4级(足够区分关键中断和普通中断)
  • 子优先级:4级(足够区分同抢占级别的顺序)
  • 配置灵活,是工程里最常用的分组方式

4. 怎么设置?

  1. 在CubeMX里,NVIC → Priority Group → 选择2 bits for pr
  2. 给中断分配优先级:
    • 故障急停(EXTI):抢占优先级 0(最高)
    • PID控制(TIM5):抢占优先级 1
    • 看门狗(TIM2):抢占优先级 2
    • 串口(USART1):抢占优先级 3(最低)

这样设置后,高优先级的中断可以打断低优先级的,保证急停和PID控制的实时性。


需要我帮你把你所有中断的优先级,按这个分组直接配置成一个完整的清单吗?

🧩 对照你的代码和配置,逐行验证

外设启动方式是否需要中断CubeMX中断勾选你的配置是否正确
TIM2HAL_TIM_Base_Start_IT()✅ 是(看门狗中断)✅ 已勾选✅ 正确
TIM5HAL_TIM_Base_Start_IT()✅ 是(PID中断)✅ 已勾选✅ 正确
TIM3HAL_TIM_Base_Start()❌ 否(ETR计数)❌ 未勾选✅ 正确
TIM4HAL_TIM_Base_Start()❌ 否(ETR计数)❌ 未勾选✅ 正确
TIM1HAL_TIM_PWM_Start()❌ 否(LED PWM)❌ 未勾选✅ 正确
TIM9HAL_TIM_PWM_Start()❌ 否(电机PWM)❌ 未勾选✅ 正确
USART1HAL_UARTEx_ReceiveToIdle_DMA()✅ 是(空闲中断)✅ 已勾选✅ 正确

💡 补充一个小细节

你代码里的DMA配置,也和CubeMX的中断勾选是匹配的:

  • __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);这句,是关闭了DMA的“传输半完成中断”,只保留“传输完成中断”,这和你勾选的USART1全局中断是配合的,写法很标准。

总的来说,你现在的CubeMX中断配置和代码里的启动方式完全匹配,没有问题,不需要修改。

需要我帮你把所有定时器的启动方式、中断配置和用途整理成一份核对清单吗?这样后续加外设的时候就不会搞混了。

http://www.jsqmd.com/news/785840/

相关文章:

  • 研发管理工具怎么选?主流工具功能对比、适用场景与选型建议
  • 基于SpringBoot+Vue的求职招聘小程序
  • 有没有能辅助生成论文框架、自动推荐文献的智能写作软件?
  • 实测taotoken在多模型切换时的延迟与稳定性表现
  • 实测Taotoken聚合接口在不同时段的响应延迟表现
  • 【审计专栏】【财务领域】第八十八篇 货币效应和货币沉淀和货币的呼吸吐纳 01
  • 第二十一届全国大学生智能车竞赛---疯狂电路组技术手册
  • 多智能体协作模式:串行、并行与混合编排实战
  • CANN/cannbot-skills torch_npu接口列表
  • 机制驱动合成数据:基于多尺度模拟生成生物医学时间序列数据
  • Day59tofixed方法
  • SETI统计建模:点过程与选择偏差如何修正地外文明搜寻
  • 2025届最火的AI学术助手推荐榜单
  • 车规级芯片缺料怎么办?深智微华润微授权代理提供元器件一站式配单与停产替代
  • ClawShield实战:构建个人数据防护盾的模块化方案
  • Mermaid Live Editor完全指南:如何用代码快速创建专业图表
  • 一分钱不花!2026每月省20小时省300块的录音文件转文字工具,算完不用真亏大了
  • 对比自行搭建代理与使用Taotoken直连服务的稳定性体感
  • 2026年事业单位/公务员备考神器大横评:AI助力“铁饭碗“梦
  • Hunyuan3 NPU推理优化进度
  • MySQL 核心考点全解:ACID、引擎对比、SQL 执行流程
  • 汽车零部件清洁度检测系统:西恩士满足ISO16232/VDA19双标准 - 工业设备研究社
  • 【审计专栏】【社会科学】【管理科学】第一百篇 人的需求来源01
  • React:useState 函数式更新、useContext 全解析、useReducer 深度解析
  • CANN/cann-learning-hub:vLLM-Ascend推理优化
  • 可解释AI在恶意软件分析中的应用:从黑盒到白盒的实战指南
  • AI能否提升企业生产率?英国微观数据实证研究揭示真相
  • CANN/catlass带步长批量矩阵乘法TLA示例
  • 如何高效使用AssetStudio:Unity资源提取与转换的完整指南
  • 智能手表与 App 蓝牙低功耗(BLE)实战指南