STM32 RTOS 系列教學 - 第四篇:RTOS 計時器與非阻塞處理技巧

STM32 RTOS 系列教學 - 第四篇:RTOS 計時器與非阻塞處理技巧

🎯 教學目標


⏰ RTOS Software Timer 簡介

RTOS 中的軟體計時器是一種非阻塞機制,讓你可以在不延遲任務執行的情況下,定時觸發事件。

📌 特色


🛠 STM32CubeMX 設定 Timer

Step 1:新增 Timer

Step 2:啟用計時器

osTimerStart(myTimer01Handle, 0);

Step 3:撰寫回呼函式

void TimerCallback01(void *argument)
{
  HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
}

🧠 非阻塞式執行技巧

傳統的 osDelay() 會讓任務進入 Blocked 狀態,若任務需同時處理多事件,建議改用計時器或時間差比較。

方法一:以 millis 判斷是否超時(需 HAL_GetTick)

uint32_t last_tick = 0;
for(;;)
{
  if(HAL_GetTick() - last_tick >= 1000)
  {
    last_tick = HAL_GetTick();
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
  }
  // 其他可即時處理的邏輯
  osDelay(1); // 輕微延遲防止佔滿 CPU
}

方法二:使用 FreeRTOS 計時器(建議)

使用 timer callback 執行週期性任務,不阻塞主任務邏輯。


✅ 成功條件檢查


🧩 下一篇預告

第 5 篇:RTOS Memory Pool 與動態資源管理


Revision #1
Created 2026-04-01 02:06:29 UTC by TaipeiTechRacing
Updated 2026-04-01 02:12:53 UTC by TaipeiTechRacing