你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

两个TIM调用HAL_TIM_PeriodElapsedCallback发生冲突

[复制链接]
电子烂人 提问时间:2025-3-11 23:42 / 已解决

Sys里用到了TIM17取代作为systick,用TIM2作为定时采样的计时器

但是HAL_TIM_PeriodElapsedCallback函数被占用,没法正常使用,换用别的TIM定时器也是一样的效果,工程要求不能用自带的SYSTICK

image.png

尝试过在这个函数里加标志位,但是无济于事,两个TIM调用的是同一个函数,非常混乱。

有没有更好的解决这个的办法?

收藏 评论4 发布时间:2025-3-11 23:42

举报

4个回答
xmshao 最优答案 回答时间:2025-3-13 11:31:04

电子烂人 发表于 2025-3-13 10:13
就是TIM17做滴答,滴答正好要用这个回调函数,同时我要用定时器中断,两个定时器的回调函数都是HAL_T ...

[md]我觉得你可能有所误会。

没错,如果基于库架构组织中断响应代码,各个TIMER的更新中断都会共用

HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函数,这个没关系的。

进来后我们可以进一步查询到底来自哪个TIMER的更新或溢出中断的。

比方:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef htim) { / USER CODE BEGIN Callback 0 */

/ USER CODE END Callback 0 / if (htim->Instance == TIM4) { HAL_IncTick(); }*

if (htim->Instance == TIM1) { aaa++; }

if (htim->Instance == TIM2) { xxx++; } / USER CODE BEGIN Callback 1 /

/ USER CODE END Callback 1 / }

还有个办法,就是无视库里准备的回调函数,自己针对不同TIMER的

更新中断准备各自的处理函数,彼此互不相干。

xmshao 回答时间:2025-3-12 16:31:13

不太明白你的意思。

你要交代下在使用什么芯片?

你工程里用到RTOS? TIM17用作OS滴答,是这个意思吗?

HAL_TIM_PeriodElapsedCallback函数被占用是什么意思?

具体用到哪几个中断? 努力把问题描述清楚。

电子烂人 回答时间:2025-3-13 10:13:51

xmshao 发表于 2025-3-12 16:31
不太明白你的意思。</p>
<p>你要交代下在使用什么芯片?

[md]就是TIM17做滴答,滴答正好要用这个回调函数,同时我要用定时器中断,两个定时器的回调函数都是HAL_TIM_PeriodElapsedCallback这一个,正好冲突了

现在在试着重定义这个回调

电子烂人 回答时间:2025-3-13 17:33:58

xmshao 发表于 2025-3-13 11:31</p>
<p>[md]我觉得你可能有所误会。

[md]感谢,我试着自己重写这部分的回调函数

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版