STM32
直播中

摩托罗拉

8年用户 926经验值
私信 关注
[问答]

STM8S103K3的定时器1中断会连进两次,为什么?

最近小弟用STM8S103K3又发现一个很奇怪的问题,求FAE和大神们指教//第一种中断格式
INTERRUPT_HANDLER(tiM1_UPD_OVF_TRG_BRK_IRQHandler, 11)  //250ms 中断
{
  disableInterrupts();


   用户程序

    TIM1->SR1  = 0xfe;
  enableInterrupts();  //开中断



//第二种中断格式

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)  //250ms 中断
{
    TIM1->SR1  = 0xfe;

  disableInterrupts();


   用户程序

  enableInterrupts();  //开中断


//第三种中断格式

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)  //250ms 中断
{
    TIM1->SR1  = 0xfe;


   用户程序




由于个人写程序的习惯,以前中断一直用第一种写法。在STM8S103k3上面,他它竟然会连进两次中断,但是第二种和第三种会正常。个人也是刚工作不久,好多问题不明白,群里的大神指导。我以前一直用飞思卡尔的单片机,中断程序用第一种、第二种、第三种都没有问题,从来也没在意,最近调程序出现了问题,才找到了这个原因。
用ST_LINK仿真可以看到,对于第一种写法,第二次进中断是在标志位为0的情况下。小弟刚用STM8S几天,出现了很多问题,求大神们指导下,坛主关心一下小弟。




回帖(2)

林霆景

2024-5-14 16:19:54
没清中断标志
举报

杨静

2024-5-14 17:02:16
STM8S103K3的定时器1中断会连进两次的原因可能有以下几点:

1. 中断优先级设置问题:在STM8S103K3中,定时器1的中断优先级可能与其他中断优先级冲突,导致中断服务程序重复执行。请检查您的中断优先级设置,确保定时器1的中断优先级是正确的。

2. 中断标志位未清除:在中断服务程序中,您需要确保在执行完中断处理后,清除定时器1的中断标志位。在您的代码中,您已经使用了`TIM1->SR1 = 0xfe;`来清除中断标志位,但是如果这个操作没有正确执行,可能会导致中断再次触发。请确保这个操作在每次中断服务程序执行时都能正确执行。

3. 中断使能位未正确设置:请检查您的代码中是否正确设置了定时器1的中断使能位。在STM8S103K3中,定时器1的中断使能位是TIM1_IER_UIE(更新中断使能位)。请确保在初始化定时器1时,正确设置了这个位。

4. 硬件问题:如果以上几点都检查过并确认无误,那么可能是硬件本身存在问题。这种情况下,建议您更换STM8S103K3芯片,或者尝试使用其他型号的芯片进行测试。

5. 软件问题:如果硬件没有问题,那么可能是软件方面的问题。请检查您的代码逻辑,确保没有其他地方错误地触发了定时器1的中断。

综上所述,要解决STM8S103K3定时器1中断连进两次的问题,您需要从中断优先级设置、中断标志位清除、中断使能位设置、硬件和软件等方面进行排查。希望这些建议能对您有所帮助。
举报

更多回帖

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