You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32H745 M4核:能否在HSEM中断服务中响应SysTick中断?

问题解答

1. 是否可配置MCU使SysTick中断在其他中断服务期间运行?

可以实现。STM32H745的M4核中断优先级由抢占优先级和子优先级决定,数值越小优先级越高:

  • SysTick属于内核中断,其优先级可通过SCB->SHPR3寄存器(或HAL库的NVIC_SetPriority(SysTick_IRQn, priority)函数)配置
  • HSEM是外设中断,优先级可通过NVIC的IPR寄存器(或HAL库的HAL_NVIC_SetPriority(HSEM_IRQn, preempt_prio, sub_prio)函数)配置

只需将SysTick的抢占优先级设置得比HSEM中断更高(数值更小),就能让SysTick中断抢占正在运行的HSEM中断服务程序。例如,假设系统采用优先级分组2(抢占优先级占2位),可将SysTick的抢占优先级设为0,HSEM的抢占优先级设为1,这样SysTick就能打断HSEM的ISR。

2. 这种做法是否属于不良实践?

不一定,取决于SysTick中断服务程序(ISR)的复杂度:

  • 如果SysTick的ISR仅做简单的1ms计数,无耗时操作、无共享资源访问冲突,这种配置是安全的,不属于不良实践
  • 但如果SysTick的ISR包含复杂逻辑、耗时操作,或者会访问HSEM ISR中使用的共享资源,那么中断嵌套可能引发以下问题:
    • HSEM中断响应延迟,可能导致核间同步超时(HSEM常用于M4/M7核间资源互斥)
    • 栈溢出风险(中断嵌套会增加栈的使用深度)
    • 共享资源访问的竞态条件(未加保护时)

因此,若要采用这种方案,必须保证SysTick ISR尽可能简洁,且做好栈空间评估和资源冲突防护。

3. 是否必须修改代码让HSEM中断的退出不依赖SysTick?

不是必须,但修改代码会更稳妥。

  • 若不想修改现有代码,调整中断优先级是可行的替代方案,只要满足上述优先级配置和ISR简洁性要求
  • 更优的方案是修改HSEM中断的退出逻辑,摆脱对SysTick的依赖:
    • 使用硬件定时器(如TIM6/TIM7)的比较匹配功能实现毫秒级计时,无需依赖中断
    • 利用内核DWT计数器(DWT->CYCCNT)实现高精度延时,通过读取时钟周期数计算时间,完全无需中断

内容的提问来源于stack exchange,提问作者Alex Jegers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:51:00