STM32
直播中

张燕

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

求助,使用STM32F407的定时器问题求解

最近在使用STM32F407的定时器,遇到一个诡异的问题。
我用tiM2做PWM波形输出,用了一个OC脚。中断的配置是只有更新事件产生中断。
在每个更新事件产生时,UIF位由硬件置位,系统进入中断例程。那么问题来了,在UIF没有置位的时候
也能进中断例程吗?这个现象是偶尔产生,而且这个中断是紧跟在正常更新中断例程之后产生的!
在中断使能寄存器里,我只使能了UIE位!而这个莫名其秒的中断,是怎么回事呢?!

回帖(1)

王璐

2024-5-17 18:17:26
根据您的描述,您在使用STM32F407的定时器TIM2进行PWM波形输出时遇到了一个问题。您配置了更新事件产生中断,并且只在UIF位被硬件置位时进入中断例程。然而,您发现在UIF位没有置位的情况下,系统仍然进入了中断例程,并且这个异常中断紧跟在正常更新中断例程之后产生。

为了解决这个问题,我们可以按照以下步骤进行排查:

1. 检查定时器配置:首先,请确保您的定时器配置是正确的。这包括定时器时钟源、预分频器、自动重载寄存器等。错误的配置可能导致定时器行为异常。

2. 检查中断使能寄存器:您提到已经在中断使能寄存器中使能了UIE位。请确保没有其他位被错误地使能,这可能导致意外的中断。

3. 检查中断优先级:请检查您的中断优先级配置,确保TIM2中断的优先级是正确的。错误的优先级设置可能导致中断处理不当。

4. 检查中断服务例程:请检查您的中断服务例程(ISR)代码,确保在进入中断时,UIF位确实被检查,并且只有在UIF位被置位时才执行中断处理代码。

5. 软件滤波:如果硬件配置和代码都没有问题,您可以尝试在软件层面添加一个简单的滤波器,以忽略连续的中断请求。例如,您可以设置一个标志位,当UIF位被置位时将其置为1,然后在中断服务例程中检查这个标志位。如果标志位为1,则执行中断处理代码,并将标志位置为0。这样,即使UIF位没有被置位,中断服务例程也不会执行处理代码。

6. 硬件问题:如果以上步骤都无法解决问题,那么可能是硬件本身存在问题。您可以尝试使用另一个STM32F407芯片进行测试,以排除硬件故障的可能性。

通过以上步骤,您应该能够找到导致异常中断的原因,并采取相应的措施解决问题。
举报

更多回帖

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