[STM32]TIM溢出中断标志位无法快速清除导致连续多次进入中断的问题

1. 结论

STM32部分定时器存在SR标志位清理不及时的问题,如果将清除标志位放在中断函数的某位,则可能存在标志位未及时清理生效而再次进入中断。
20230811更新: 多次调试,猜测还是和国产芯片有关系。通过软件设置标志位来规避了。

2. 解决方法

将清理中断标志位的动作放在中断函数最前部。

3.举例

以一段编码器方向判断的函数为例:
通过调试发现不同的定时器现象不一致,STM32的TIM2/3都具有编码器的外设功能,而TIM3的清理动作无法及时生效,如果放在函数末尾实测会导致连续进入5~25次中断。

void TIM2_IRQHandler(void)   //TIM2中断
{
     if(TIM2->SR&0x0001)//溢出中断
     {
			 if(TIM2->CNT<1024)position_high++;
			 else if(TIM2->CNT>64511)position_high--;
     }   
    **TIM2->SR&=~(1<<0);//清除标志位** 
} 
//建议使用下面的中断函数形式
{
     TIM2->SR&=~(1<<0);//清除标志位
	 if(TIM2->CNT<1024)position_high++;
		else if(TIM2->CNT>64511)position_high--;
  }   
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值