打印
[应用相关]

定时器回调函数只能执行一次

[复制链接]
1155|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2024-5-29 15:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

定时器做PWM输出时,初始化定时器时执行HAL_TIM_PWM_Init(&TIM1_Handler);时进入回调函数里初始化GPIO引脚;如果需要再重新初始化一次定时器时,在执行上面这行初始化时,程序并不再进入回调函数里执行,请问有没有大神知道是什么原因?谢谢!

使用特权

评论回复
沙发
lzmm| | 2024-6-4 10:40 | 只看该作者
通常与所使用的定时器实现有关。              

使用特权

评论回复
板凳
laocuo1142| | 2024-6-4 16:37 | 只看该作者
检查HAL库文档

使用特权

评论回复
地板
powerantone| | 2024-6-4 16:38 | 只看该作者
重置定时器状态

使用特权

评论回复
5
stormwind123| | 2024-6-4 20:00 | 只看该作者
检查代码逻辑

使用特权

评论回复
6
benjaminka| | 2024-6-5 12:41 | 只看该作者
void TIM1_UP_TIM10_IRQHandler(void) {
    HAL_TIM_IRQHandler(&htim1);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim == &htim1) {
        // 在这里处理定时器回调事件
    }
}

使用特权

评论回复
7
nomomy| | 2024-6-5 15:47 | 只看该作者
在中断处理函数中(中断服务例程ISR),除了执行你需要的代码逻辑外,还必须清除中断标志,通常是通过写1到相应的中断标志位(例如TIMx->SR = ~TIM_SR_UIF; 或使用 __HAL_TIM_CLEAR_IT(&htimx, TIM_IT_UPDATE);

使用特权

评论回复
8
pl202| | 2024-6-5 22:22 | 只看该作者
检查你的代码以确保没有其他软件错误(如数组越界、指针错误等)导致定时器中断系统崩溃。

使用特权

评论回复
9
chenjun89| | 2024-6-5 22:27 | 只看该作者
不会啊,只要你再次调用了初始化函数,又会运行回调函数吧。

使用特权

评论回复
10
claretttt| | 2024-6-7 14:29 | 只看该作者
定时器只能触发一次,除非显式地重新设置或重置定时器。

使用特权

评论回复
11
sanfuzi| | 2024-6-8 21:30 | 只看该作者
中断处理函数正确实现,并且在处理完中断事件后,正确地清除中断标志。

使用特权

评论回复
12
maudlu| | 2024-6-9 10:29 | 只看该作者
检查是否有可能其他的代码在运行期间无意中禁用了定时器中断

使用特权

评论回复
13
sdlls| | 2024-6-9 13:55 | 只看该作者
可以让定时器在每次触发后自动重载。

使用特权

评论回复
14
xuanhuanzi| | 2024-6-9 18:11 | 只看该作者
没有清理标志位?

使用特权

评论回复
15
xuanhuanzi| | 2024-6-9 18:11 | 只看该作者
看一下HAL库自带的,是怎么处理的,应该的没有重启或者清理标志位吧

使用特权

评论回复
16
janewood| | 2024-6-10 17:51 | 只看该作者
可能存在软件逻辑错误,导致定时器在第一次触发后被错误地重置或配置。

使用特权

评论回复
17
uptown| | 2024-6-11 15:18 | 只看该作者
如果回调函数中发生了异常或错误,且没有被正确处理,可能会导致它无法再次执行。

使用特权

评论回复
18
earlmax| | 2024-6-11 19:05 | 只看该作者
定时器外设被正确初始化,包括中断优先级、中断服务函数等。

使用特权

评论回复
19
zerorobert| | 2024-6-11 22:24 | 只看该作者
可能在回调函数执行完毕后没有重新设置定时器

使用特权

评论回复
20
jimmhu| | 2024-6-12 15:57 | 只看该作者
可能是由于定时器配置或中断处理不正确导致的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

290

主题

1387

帖子

3

粉丝