[STM32H5] 中断服务程序 (ISR) 配置问题

[复制链接]
 楼主| 结合国际经验 发表于 2024-7-27 09:28 | 显示全部楼层 |阅读模式
中断服务程序 (ISR) 是否正确配置,并且定时器中断是否使能。

解决方法:

确保中断服务程序正确编写,并在 NVIC 中正确使能中断。
c

void TIMx_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TimHandle);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIMx)
    {
        // Toggle LED or do something
    }
}


kzlzqi 发表于 2024-7-29 15:14 | 显示全部楼层
你提供的代码段涉及定时器中断处理的两个主要部分:中断服务程序(ISR)和回调函数
kzlzqi 发表于 2024-7-29 15:14 | 显示全部楼层
在配置NVIC时,确保中断优先级和中断使能是正确设置的。如果优先级或使能配置不正确,可能导致中断无法触发或处理不如预期。
范德萨发额 发表于 2024-7-29 15:45 | 显示全部楼层
确认定时器中断标志位在中断服务程序中正确清除。如果不清除中断标志位,可能会导致ISR被不断触发。
申小林一号 发表于 2024-7-29 22:37 | 显示全部楼层
感谢分享
喂什么玩意 发表于 2024-7-31 11:41 | 显示全部楼层
你的代码中ISR和回调函数的配置基本正确。但确保你的定时器初始化代码中,定时器中断被使能,并且在NVIC中正确设置了优先级并使能了中断。
AdaMaYun 发表于 2024-7-31 14:22 | 显示全部楼层
首先应该是先进行配置才开始相关的设置
gaonaiweng 发表于 2024-8-29 12:10 | 显示全部楼层
确保在NVIC(嵌套向量中断控制器)中使能定时器中断,并设置了适当的优先级。
Wordsworth 发表于 2025-3-17 09:23 | 显示全部楼层
STM32H5 里有 TrustZone,你的中断是不是跑在安全区或者非安全区?权限问题可能导致 ISR 失效。
Bblythe 发表于 2025-3-17 09:24 | 显示全部楼层
你是用 HAL 库还是裸机写的?HAL 方式下 MX_TIMx_Init() 里有没有正确开启中断?
Pulitzer 发表于 2025-3-17 09:25 | 显示全部楼层
htim->Instance == TIMx 这个判断加了 volatile 关键字吗?有时候优化可能会导致这个判断失效。
Uriah 发表于 2025-3-17 09:26 | 显示全部楼层
试试在 TIMx_IRQHandler 里手动清 TIMx->SR &= ~TIM_SR_UIF; 看看能不能解决问题。
Clyde011 发表于 2025-3-17 09:27 | 显示全部楼层
你的 TIMx 是低功耗模式下的 LPTIM 吗?某些模式下,定时器中断可能不会正常触发。
公羊子丹 发表于 2025-3-17 09:28 | 显示全部楼层
你在 NVIC 里确认中断优先级了吗?有时候优先级配置不当也可能导致 ISR 不触发。
周半梅 发表于 2025-3-17 09:29 | 显示全部楼层
你的 TIMx_IRQHandler 里有进来吗?可以在里面加个 printf 或者点亮 LED 试试。
帛灿灿 发表于 2025-3-17 09:30 | 显示全部楼层
HAL_TIM_IRQHandler 里会自动清除中断标志位吗?如果没清除,中断可能只触发一次就不再进了。
童雨竹 发表于 2025-3-17 09:32 | 显示全部楼层
HAL_TIM_PeriodElapsedCallback 这个回调函数确定被调用了吗?可以加个 while(1); 测试一下。
万图 发表于 2025-3-17 09:33 | 显示全部楼层
定时器中断是否真的开启了?可以手动检查 TIMx->DIER 里面的 UIE 位是否为 1。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

773

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部