STM32
直播中

王波

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

stm8外部中断用来脉冲计数,外部中断开始计数,LED灯就不正常了的原因?

外部中断用来脉冲计数。不计数时,定时器正常,每秒翻转一次LED灯。外部中断开始计数,LED灯就不正常了,有时两三秒,有时五六秒才翻转。一开始以为是优先级,可是配置软件优先级后还是一样啊。。。大神们指点一下

回帖(2)

李泽坚

2024-4-22 15:24:08
应该是外部中断将定时器的CNT寄存器的值破坏了。
举报

xiangwangzihui

2024-5-13 18:25:25
在STM8微控制器中,外部中断用于脉冲计数可能会导致LED灯不正常工作的原因可能有以下几点:

1. 中断优先级:虽然您已经尝试调整了优先级,但仍然需要确保外部中断的优先级低于定时器中断的优先级。这样,当定时器中断发生时,它不会被外部中断抢占。

2. 中断服务例程(ISR)执行时间过长:如果外部中断的ISR执行时间过长,它可能会影响定时器中断的响应时间。请检查您的代码,确保ISR尽可能简洁,以减少执行时间。

3. 中断触发条件:请检查外部中断的触发条件是否正确设置。例如,确保它是在脉冲的上升沿或下降沿触发,而不是在两个边沿都触发。

4. 中断标志位:在ISR中,确保清除相应的中断标志位,以避免重复触发中断。

5. 定时器配置:请检查定时器的配置,确保它在外部中断计数时仍然正常工作。这可能包括定时器的预分频器、自动重载寄存器等设置。

6. CPU负载:如果系统中有其他任务或中断服务例程,它们可能会影响CPU的负载,从而影响定时器中断和外部中断的响应时间。请检查系统中的其他任务,确保它们不会影响LED灯的正常工作。

7. 硬件问题:虽然不太可能,但硬件问题(如电源波动、电磁干扰等)也可能导致LED灯不正常工作。请检查硬件连接,确保一切正常。

为了解决这个问题,您可以尝试以下步骤:

1. 确保外部中断的优先级低于定时器中断的优先级。
2. 优化ISR,使其尽可能简洁。
3. 检查外部中断的触发条件和配置。
4. 在ISR中清除相应的中断标志位。
5. 检查定时器的配置,确保它在外部中断计数时仍然正常工作。
6. 检查系统中的其他任务,确保它们不会影响LED灯的正常工作。
7. 检查硬件连接,确保一切正常。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。
举报

更多回帖

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