STM32
直播中

贾飞小

7年用户 1766经验值
私信 关注
[问答]

STM32F407IG中断标志位为0,却能进入中断,为什么?

用的是STM32F407IG,同时开启tiM1, TIM3, 外部计数,开启更新中断
每个定时器中断函数都做了类似如下处理,各自清除自己的标志位,如TIM3中断中清除TIM3-SR,其他定时器SR    1 是应用需求。
但是在测试中发现,偶然出现 ,进入了中断,但是 if (TIM1->SR) 无法满足的情况,其他定时器也会出现这种情况
程序中没有在其他地方清除SR

void TIM1_UP_TIM10_IRQHandler(void)
{
       if (TIM1->SR)
       {
             // 省略应用程序。
            
            TIM1->SR  = 0;
            TIM3->SR  = 1;
       }
}

void TIM3_IRQHandler(void)
{
       if (TIM3->SR)
       {
             // 省略应用程序。
            
            TIM1->SR   = 1;
            TIM3->SR = 0;
       }
}

回帖(1)

张恒

2024-4-9 15:44:24
楼主可以检查是否还初始化了同一个定时器的其他中断,或者timer10 的中断,它和TIM1共用一个入口。此外还请参考官方例程的方式配置和清除相关标志位的方式,这样更标准更易读。 另外现在主流是cube软件库,可以图形化配置初始化代码,不容易遗漏并且方便移植
举报

更多回帖

发帖
×
20
完善资料,
赚取积分