STM32
直播中

史晓明

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

编码器模式下,中断内访问其他定时器cnt值,会导致进入中断次数丢失的原因?

   tim3是编码器模式arr=100,tim2没有开中断,检测的信号2mhz-50khz。在tim3中断内我访问tim2的cnt值,并且更改该值来读取两次进入中断的时间,但是这样的设置会导致少进入中断,并且多数是偶数


回帖(2)

李泓翔

2024-3-14 16:27:24
在中断内有一个判断的条件有问题,引发的蝴蝶效应
举报

郭中

2024-3-15 10:19:31
在编码器模式下,TIM3的中断是由TIM2的计数器值的变化触发的。当你在TIM3中断内访问TIM2的CNT值时,实际上就是在中断内读取TIM2的计数器值。如果在读取CNT值的过程中发生了TIM2的更新,那么这个更新可能会导致TIM3的中断被触发,但是由于你的中断正在被执行,所以这次中断的触发被忽略了。

另外,你在中断内修改了TIM2的CNT值,这可能会导致编码器的计数值发生错误。因为编码器模式下,TIM2的计数器值通过编码器的输入信号来自增或自减,如果在中断内修改了CNT值,那么编码器的计数值可能会被错误地增加或减少。

因此,访问和修改TIM2的CNT值是有风险的,可能会导致中断的触发失效和编码器计数值的错误。建议在中断内避免访问和修改TIM2的CNT值,可以在中断内保存计数器的值,稍后在主程序中读取和处理这个值。同时,确保编码器的输入信号不会在访问和修改CNT值期间发生变化,以避免计数值错误。
举报

更多回帖

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