[其他ST产品] 定时器触发后的回调函数

[复制链接]
49|13
yunfu1117 发表于 2026-1-11 12:35 | 显示全部楼层 |阅读模式

我配置了一个单脉冲模式的定时器,该定时器由一个 GPIO 引脚的脉冲信号触发。
是否可以对其进行设置,使得当接收到该脉冲信号时,也就是定时器启动的瞬间,我的应用代码中也能触发一个回调函数?
这种实现方式是否可行?还是说,我必须把这个信号同时连接到另一个 GPIO 引脚上才能实现?

公羊子丹 发表于 2026-1-19 07:37 | 显示全部楼层
完全可行啊!不用额外接 GPIO,你在 CubeMX 里把定时器配置成外部触发模式后,去 NVIC 里使能定时器的触发中断,然后在 stm32xxx_it.c 里写中断服务函数,里面直接调用你要的回调逻辑就行~
周半梅 发表于 2026-1-19 07:37 | 显示全部楼层
我之前做过类似需求!其实 HAL 库有对应的触发回调,你找找 “HAL_TIM_TriggerCallback” 函数,在里面判断触发源是你配置的定时器,然后执行代码,不用自己折腾中断服务函数,CubeIDE 里直接重写这个回调就行~
帛灿灿 发表于 2026-1-19 07:39 | 显示全部楼层
怀疑你是不是没搞对定时器的触发方式?单脉冲模式下,外部脉冲触发后定时器会启动计数,这时候要开 “触发中断” 而不是更新中断,你去定时器的 NVIC 设置里看看,是不是勾错中断类型了?
童雨竹 发表于 2026-1-19 07:40 | 显示全部楼层
这操作很常规啊!不用额外接线,你可以在定时器的外部触发边沿配置好后,在回调函数里加个标志位,或者直接处理业务逻辑,比如我之前用这个方式做过脉冲信号的实时响应,延迟特别小~
万图 发表于 2026-1-19 07:41 | 显示全部楼层
你检查过定时器的触发极性吗?是上升沿还是下降沿触发?如果极性设反了,可能收不到触发信号,回调自然不生效,先在 CubeMX 里确认触发边沿和实际脉冲信号匹配,再写回调~
Wordsworth 发表于 2026-1-19 07:42 | 显示全部楼层
我建议先做个简单测试!在回调函数里让某个 GPIO 引脚电平翻转,然后用示波器测这个引脚,看看脉冲触发时会不会翻转,这样能快速判断回调有没有被触发,再排查后续逻辑~
Bblythe 发表于 2026-1-19 07:43 | 显示全部楼层
会不会是定时器触发后没开启中断?你在代码里加一句 “HAL_TIM_TriggerConfig (&htimx, TIM_TRIGGERMODE_RISING);”,再使能中断 “HAL_NVIC_EnableIRQ (TIMx_IRQn);”,这样触发后才会进回调~
Pulitzer 发表于 2026-1-19 07:44 | 显示全部楼层
之前踩过坑,是因为回调函数没加__weak 修饰!在 CubeIDE 里重写 HAL 库回调时,要确保函数名和库函数一致,而且不用自己声明 extern,直接在 main.c 里写,加上__weak 就能覆盖默认实现~
Uriah 发表于 2026-1-19 07:45 | 显示全部楼层
怀疑你是不是把定时器模式设错了?单脉冲模式是 “TIM_OPMODE_SINGLEPULSE”,如果设成了其他模式,触发逻辑会变,你再核对下 CubeMX 里的模式配置,确认是单脉冲 + 外部触发~
Clyde011 发表于 2026-1-19 07:46 | 显示全部楼层
你可以试试不用 HAL 库的回调,直接写中断服务函数!在 stm32xxx_it.c 里找到 TIMx_IRQHandler,里面判断 TIM_SR 寄存器的触发标志位,然后执行你的代码,这种方式更直接,适合快速验证需求~
21mengnan 发表于 2026-1-19 18:29 | 显示全部楼层
定时器由一个 GPIO 引脚的脉冲信号触发。
643757107 发表于 2026-1-23 19:23 | 显示全部楼层
在前端 / Node.js 中,最常用的定时器是 setTimeout(一次性触发)和 setInterval(周期性触发),回调函数就是定时器到达指定时间后自动执行的函数
gejigeji521 发表于 2026-1-25 14:23 | 显示全部楼层
定时器回调函数是 “延迟 / 重复执行” 的函数,不会立即运行,由定时器触发后执行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

150

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0