yunfu1117 发表于 2025-6-10 22:44

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

在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

打印调试信息看。
页: [1]
查看完整版本: RTOS创建的定时器回调函数不工作。