STM32F407的晶振选型分析

电子说

1.4w人已加入

描述

要让 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 时钟)。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分