[STM32F1] RTOS创建的定时器回调函数不工作。

[复制链接]
 楼主| yunfu1117 发表于 2025-6-10 22:44 | 显示全部楼层 |阅读模式
在STM32 cubeIDE中用rtos调用定时器函数。
但是,在StartDefaultTask()函数中调用了osTimerStart(),也没有跑到计时器回调函数。确认调用了
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN 5 */
osDelay(10);
osTimerStart(myTimer01Handle, 20);
osDelay(10);
osTimerStart(myTimer02Handle, 20);
/* Infinite loop */
for(;;)
{
if(osTimerIsRunning(myTimer01Handle) ) {
printf(" Tmr callback01 is running ....\n\r");
}
else {
printf(" Tmr Callback01 is not working... Re-Start Timer....\n\r");
osTimerStart(DGP_Tx_TMRHandle, 20);
}
osDelay(1000);
if(osTimerIsRunning(myTimer02Handle) ) {
printf(" Tmr is Callback02 running ....\n\r");
}
}
/* USER CODE END 5 */

}

onlycook 发表于 2025-6-11 16:44 | 显示全部楼层
检查在调用osTimerStart之前,定时器是否已通过osTimerNew创建。
classroom 发表于 2025-6-11 16:51 | 显示全部楼层
如果回调函数中执行了耗时操作,可能导致定时器无法按预期触发。
jcky001 发表于 2025-6-11 16:52 | 显示全部楼层
用osTimerIsRunning检查定时器是否已启动。
jcky001 发表于 2025-6-11 16:52 | 显示全部楼层
检查RTOS内核初始化和tick配置。
flycamelaaa 发表于 2025-6-11 18:00 | 显示全部楼层
在osTimerNew中必须正确注册回调函数。
powerantone 发表于 2025-6-11 18:00 | 显示全部楼层
RTOS内核未初始化或未启动,定时器功能将无法工作。
probedog 发表于 2025-6-11 19:00 | 显示全部楼层
如果StartDefaultTask的优先级过低,可能无法及时调度定时器操作。
stormwind123 发表于 2025-6-11 21:00 | 显示全部楼层
RTOS的tick频率配置是否错误。
cr315 发表于 2025-6-11 22:00 | 显示全部楼层
打印调试信息看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

47

帖子

0

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