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 */}
检查在调用osTimerStart之前,定时器是否已通过osTimerNew创建。 如果回调函数中执行了耗时操作,可能导致定时器无法按预期触发。 用osTimerIsRunning检查定时器是否已启动。 检查RTOS内核初始化和tick配置。 在osTimerNew中必须正确注册回调函数。 RTOS内核未初始化或未启动,定时器功能将无法工作。 如果StartDefaultTask的优先级过低,可能无法及时调度定时器操作。 RTOS的tick频率配置是否错误。 打印调试信息看。
页:
[1]