要讓 STM32F407 同時穩定運行 USB(OTG FS)、以太網(ETH)、CAN 三大功能,核心是選擇能滿足所有外設時鐘精度要求、且適配 STM32F4 PLL 時鐘樹的 HSE 晶振 ——最佳方案是:HSE 頻率選 25MHz,類型選「無源貼片晶振(Parallel Resonant 型)」,其次可選 8MHz 無源晶振(兼容性稍弱)。
一、選擇核心邏輯:三大外設的時鐘硬約束
STM32F407 的 USB/ETH/CAN 對時鐘有明確要求,HSE 作為核心時鐘源,必須同時滿足:
| 外設 | 關鍵時鐘要求 | 精度要求 |
|---|---|---|
| USB OTG FS | 必須提供 48MHz 精確時鐘(來自 PLL_Q 分頻輸出) | ±0.25%(USB 2.0 標準) |
| 以太網(ETH) | RMII 模式需 50MHz 參考時鐘(可由 PHY 自供或 MCU 輸出);MAC 時鐘來自 AHB1(168MHz 系統時鐘下穩定) | ±1%(主流 PHY 要求) |
| CAN | 時鐘來自 APB1(最大 42MHz,168MHz 系統時鐘下由 APB1 4 分頻得到) | ±1%(CAN 協議要求) |
同時,STM32F4 的 PLL 時鐘樹有固定規則(PLL 輸入頻率 1-2MHz 最優,PLL_Q 需分頻出 48MHz),HSE 頻率需適配這一規則,才能讓系統時鐘(SYSCLK)穩定跑滿 168MHz(F407 最高性能)。
二、最佳 HSE 選擇:25MHz 無源晶振
1. 頻率選擇理由:完美適配 PLL 時鐘樹,兼顧所有外設
STM32F4 的 PLL 時鐘樹配置邏輯(目標:SYSCLK=168MHz + USB=48MHz + ETH 兼容):
PLL 核心公式:PLL_OUT = (HSE / PLL_M) * PLL_N
為了 USB 輸出 48MHz:PLL_OUT / PLL_Q = 48MHz → 最優解是 PLL_OUT=336MHz,PLL_Q=7(336/7=48,整數分頻無誤差);
為了 SYSCLK=168MHz:PLL_OUT / PLL_P = 168MHz → PLL_P=2(336/2=168);
為了 PLL 穩定:HSE / PLL_M = 1MHz(PLL 輸入頻率 1MHz 是最優區間)→ PLL_M=HSE(因 1MHz×PLL_M=HSE)。
當 HSE=25MHz 時,PLL 配置為:
PLL_M=25(25MHz /25=1MHz,滿足 PLL 輸入要求);
PLL_N=336(1MHz×336=336MHz,PLL_OUT 目標值);
PLL_P=2(336MHz/2=168MHz,SYSCLK 滿速);
PLL_Q=7(336MHz/7=48MHz,USB 時鐘精準)。
此時:
CAN 時鐘:APB1 4 分頻 → 168MHz/4=42MHz(符合 CAN 最大時鐘要求);
ETH 時鐘:25MHz 是以太網 PHY 的「標準參考頻率」,PHY 可直接用 25MHz 晶振生成 50MHz RMII 參考時鐘(無需 MCU 額外輸出,簡化配置、降低干擾)。
2. 類型選擇理由:無源晶振(Parallel Resonant 型)
優先選 無源貼片晶振,而非有源晶振 / 溫補晶振(TCXO),原因:
| 晶振類型 | 優勢 | 劣勢 | 適配性 |
|---|---|---|---|
| 無源晶振(推薦) | 成本低、體積小(貼片封裝如 3225/2520)、功耗低、STM32F4 原生支持(僅需外接負載電容) | 需 MCU 提供振蕩電路(簡單) | ? 最佳選擇(滿足所有精度) |
| 有源晶振 | 精度極高(±1ppm)、抗干擾強 | 成本高、需額外供電(VCC/GND)、PCB 設計復雜 | ? 沒必要(無源已滿足精度) |
| 溫補晶振(TCXO) | 極端溫度下精度高(±0.1ppm) | 成本高、體積大、功耗高 | ? 僅極端環境(-40℃~85℃+)考慮 |
具體選型參數:
封裝:優先 3225(3.2×2.5mm)或 2520(2.5×2.0mm)貼片(節省 PCB 空間),插件 HC-49S 也可(適合面包板 / 原型機);
精度:±10ppm(工業級,-40℃~85℃),嚴苛環境可選 ±5ppm(足夠覆蓋 USB±0.25% 要求);
負載電容:12pF(STM32F407 HSE 引腳典型推薦值,需與晶振規格書匹配,否則頻率偏移);
頻率容差:±10ppm(常溫下),溫漂:±10ppm(-40℃~85℃)。
三、次選方案:8MHz 無源晶振(兼容性備選)
若供應鏈中 25MHz 晶振不易獲取,可選擇 8MHz 無源晶振(經典通用頻率),配置邏輯如下:
PLL 配置:PLL_M=8(8MHz/8=1MHz)、PLL_N=336、PLL_P=2、PLL_Q=7(與 25MHz 配置一致,同樣滿足 USB=48MHz、SYSCLK=168MHz);
ETH 適配:需 PHY 自帶 25MHz 晶振生成 50MHz RMII 參考時鐘(8MHz 晶振無法通過 MCU 直接生成 50MHz 整數分頻時鐘,需 PHY 自供);
優缺點:兼容性強(8MHz 晶振隨處可得),但 ETH 配置需依賴 PHY 自供時鐘,靈活性稍弱于 25MHz。
四、不推薦的頻率(避坑)
12MHz/16MHz:雖能通過 PLL 配置滿足 USB / 系統時鐘,但 ETH 兼容性差(PHY 少見 12/16MHz 參考晶振);
26MHz:部分 PHY 支持,但晶振通用性不如 25MHz/8MHz,成本稍高;
32MHz 以上:PLL_M 分頻后難以滿足 1MHz 輸入要求,PLL 穩定性下降。
五、關鍵配置注意事項(避免踩坑)
晶振布局:負載電容需緊貼晶振引腳(引線長度<3mm),避免電磁干擾(ETH/USB 對時鐘干擾敏感);
PLL 時鐘配置代碼(HAL 庫示例):
// 25MHz HSE 配置:SYSCLK=168MHz,USB=48MHz,APB1=42MHz(CAN)
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 1. 使能 HSE 并等待就緒
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; // HSE 不分頻(25MHz)
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25; // 25MHz/25=1MHz
RCC_OscInitStruct.PLL.PLLN = 336; // 1MHz×336=336MHz
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // 336MHz/2=168MHz(SYSCLK)
RCC_OscInitStruct.PLL.PLLQ = 7; // 336MHz/7=48MHz(USB)
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
// 2. 配置系統時鐘、AHB/APB 分頻
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB=168MHz
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; // APB1=42MHz(CAN)
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; // APB2=84MHz(ETH 等)
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
Error_Handler();
}
}
ETH PHY 時鐘:若用 25MHz HSE,可將 PHY 的 XTAL 引腳直接接 HSE 晶振(需確認 PHY 支持 25MHz 輸入),無需額外配置 MCO1 輸出;
電源與復位:HSE 晶振啟動時間約 1ms,需在代碼中等待 HSE 就緒(HAL 庫 HAL_RCC_OscConfig 已包含),避免時鐘未穩定就啟動外設。
總結
STM32F407 同時使用 USB/ETH/CAN 時,最佳 HSE 方案是 25MHz 無源貼片晶振(3225 封裝,±10ppm,12pF 負載電容)—— 既完美適配 PLL 時鐘樹,滿足所有外設的精度和頻率要求,又能簡化 ETH 配置,是工業級應用的主流選擇。若 25MHz 晶振不可得,8MHz 無源晶振可作為備選(需 PHY 自供 50MHz 時鐘)。
審核編輯 黃宇
-
晶振
+關注
關注
35文章
3560瀏覽量
73436 -
STM32F407
+關注
關注
15文章
189瀏覽量
31629
發布評論請先 登錄
STM32F407的晶振選型分析
評論