五大時鐘源
| 源 | 全稱 | 類型 | 頻率/範圍 | 典型用途 |
| HSI | High-Speed Internal | RC 振蕩器 | 8 MHz | 系統時鐘備選、啟動默認 |
| HSE | High-Speed External | 晶振/外部時鐘 | 4–16 MHz | 系統時鐘主源、PLL 輸入 |
| LSI | Low-Speed Internal | RC 振蕩器 | 40 kHz | 獨立看門狗 (IWDG)、RTC 备选 |
| LSE | Low-Speed External | 32.768 kHz 晶體 | 32.768 kHz | RTC 精準計時 |
| PLL | Phase-Locked Loop | 倍頻輸出 | 輸入:HSI/2、HSE、HSE/2 倍頻:2–16× 輸出≤72 MHz | 系統時鐘主源、USB 48 MHz、MCO 輸出 |
系統時鐘 (SYSCLK) 選擇與分頻樹
SYSCLK 可選 HSI、HSE、PLL,最高 72 MHz。經 AHB 預分頻(1/2/4/8/16/64/128/256/512)產生 HCLK,供應五大模塊:
- HCLK → AHB 總線、內核、內存、DMA
- HCLK/8 → Cortex 系統定時器 (SysTick)
- FCLK = HCLK → 內核空閒運行時鐘
- APB1 分頻器(1/2/4/8/16)→
- PCLK1(≤36 MHz)→ APB1 低速外設
- ×1/×2 → Timer2/3/4 專用倍頻(APB1 分頻=1 時 ×1,否則 ×2)
- APB2 分頻器(1/2/4/8/16)→
- PCLK2(≤72 MHz)→ APB2 高速外設
- ×1/×2 → Timer1 專用倍頻(同 APB1 規則)
- ADC 分頻器(2/4/6/8)→ ADC 采樣時鐘
關鍵外設時鐘需求
- USB FS:串行接口引擎 (SIE) 必須 48 MHz,僅來自 PLL 輸出(1 分頻或 1.5 分頻),故使用 USB 時 PLL 必須輸出 48/72 MHz。
- RTC:可選 LSE、LSI、HSE/128。
- IWDG:強制使用 LSI。
- MCO (PA8):可輸出 PLL/2、HSI、HSE、SYSCLK 用於外部測量。
外設掛載總線分佈
| 總線 | 最大頻率 | 典型外設 |
| APB1 (低速) | 36 MHz | 電源、備份、CAN、USB、I2C1/2、UART2/3、SPI2、WWDG、Timer2/3/4 |
| APB2 (高速) | 72 MHz | UART1、SPI1、Timer1、ADC1/2、所有 GPIO (PA–PE)、AFIO |
配置實戰核心步驟
- 使能 HSE 並等待就緒(或直接用 HSI)。
- 配置 PLL:選擇輸入源(HSE/HSE/2/HSI/2)、設置倍頻因子(確保輸出≤72 MHz)。
- 設置 AHB/APB1/APB2 分頻係數(注意 APB1≤36 MHz、APB2≤72 MHz)。
- 切換 SYSCLK 至 PLL 並等待鎖定。
- 使能目標外設時鐘(
RCC_APBxPeriphClockCmd),否則外設寄存器不可訪問。
定時器倍頻特殊規則
Timer 專用倍頻器(APB1 為 Timer2/3/4,APB2 為 Timer1)遵循:
- 若對應 APB 分頻係數為 1 → 倍頻 = 1(即 Timer 時鐘 = PCLK)
- 若 APB 分頻係數 > 1 → 倍頻 = 2(即 Timer 時鐘 = 2 × PCLK)
此設計保證 Timer 時鐘盡可能接近 HCLK,獲得更高分辨率。
常見配置錯誤
- PLL 輸出超過 72 MHz 導致系統不穩或跑飛。
- APB1 分頻設置不當導致 PCLK1 > 36 MHz,外設工作異常。
- 忘記使能外設時鐘(如 GPIO、DMA、ADC)導致寄存器讀寫無效。
- USB 使用時未配置 PLL 輸出 48/72 MHz,導致枚舉失敗。