# STM32 RTOS 系列教學 - 第一篇：RTOS 簡介與 STM32CubeMX 設定

## 🎯 教學目標
- 了解 RTOS 基本概念
- 使用 STM32CubeMX 設定 FreeRTOS
- 成功建立一個最小可運作的 RTOS 專案（Blink Task）

---

## 🧠 RTOS 是什麼？
RTOS（Real-Time Operating System）是一種具備即時性、多工與排程能力的作業系統，常用於嵌入式系統中。例如：FreeRTOS 是 STM32 上廣泛使用的 RTOS。

RTOS 特點：
- 任務(Task) 切換快
- 支援排程優先權
- 支援中斷與同步機制（Semaphore、Queue 等）
- 系統可預測性高

---

## 🛠 STM32CubeMX 設定 FreeRTOS

### Step 1：建立新專案
- 開啟 STM32CubeMX
- 選擇你的晶片（如 STM32F103C8Tx）

### Step 2：開啟 RTOS
- 點選左邊選單 `Middleware > FREERTOS`
- Enable FreeRTOS
- Task Configuration → 建立一個名為 `defaultTask` 的任務，設為 `StartDefaultTask`
- 建議 stack size: `128`、priority: `Normal`

### Step 3：設定 System Clock
- 確保 HSE 或 HSI 有啟用並正確設定頻率（建議使用 72MHz）

### Step 4：產生程式碼
- 點選 `Project Manager > Project`，輸入專案名稱
- Toolchain: 選擇你要的 IDE（如 STM32CubeIDE）
- Generate Code ✅

---

## 🧪 程式碼驗證 - Blink LED
在 `StartDefaultTask` 中加入簡單的 LED 閃爍測試：

```c
void StartDefaultTask(void *argument)
{
  for(;;)
  {
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    osDelay(500);
  }
}
```

**小提醒：** GPIO 必須在 CubeMX 中設定為 `Output`，否則 `HAL_GPIO_TogglePin()` 無效。

---

## ✅ 成功條件檢查
- 程式編譯成功
- 上電後 LED 以 0.5 秒頻率閃爍
- 無 HardFault、卡住情形

---

## 🧩 下一篇預告
**第 2 篇：使用多個 Task 並建立基礎的任務切換範例（雙 LED 閃爍）**