• 正文
  • 相关推荐
申请入驻 产业图谱

STM32U5 内部 RC 振荡器校准攻略

8小时前
128
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32U5 内置 HSI16、MSI、HSI48 等内部 RC 振荡器,温漂与电压波动会显著拉低频率精度;本文严格依据 AN5676 应用笔记,以LSE / 高精度外部信号为参考、TIM16 输入捕获为测量核心,通过最小误差、固定误差、校准曲线三种方案完成校准,搭配官方 X-CUBE-RC-CALIB 固件可快速落地,让内部 RC 时钟在全温域满足高精度应用要求。

资料获取:【应用笔记】AN5676 如何在 STM32U5 系列上校准内部 RC 振荡器

1. 校准必要性:出厂校准撑不住全温域工况

STM32U5 的内部 RC 振荡器均在 30℃ 完成出厂校准,在 - 40℃~125℃工业温域内,精度会明显劣化:

  • HSI16:±0.5% → 温漂后偏差扩大
  • MSI:±0.6% → 温漂后偏差扩大
  • HSI48:±4% → 对 USB、RNG 等时序敏感外设不友好

内部 RC 虽有无外部元件、启动快、功耗低优势,但精度弱于外部晶振;仅靠出厂值无法满足通信、采样、计时等高精度场景,必须做用户级校准补偿温漂。

2. STM32U5 内部 RC 振荡器核心组成

STM32U5 提供多套内部 RC 时钟,分工明确,可覆盖系统时钟与专用外设时钟需求:

振荡器 典型频率 核心用途 校准支持
HSI16 16 MHz 系统时钟源 支持用户微调
MSI 100 kHz~48 MHz 系统时钟 (MSIS)、外设时钟 (MSIK) 支持用户微调
HSI48 48 MHz USB、RNG、SDMMC 支持 CRS 自动校准
LSI 32 kHz IWDG、RTC、LCD 不可校准,仅支持测量
SHSI 48 MHz SAES 专用安全时钟 专用校准

3. 校准核心原理与硬件实现

3.1 通用校准原理

  1. 把待校准 RC 振荡器设为系统时钟
  2. 接入高精度参考信号(LSE 32.768 kHz 优先,或 50/60 Hz 市电)
  3. 用 TIM16 输入捕获捕获参考信号周期,计算实际频率
  4. 算出频率误差,调整TRIM 微调位至最优值
  5. 写入微调值后等待15 μs稳定(频率过冲 / 下冲最大约 2.5%)

核心公式:

测量频率 = (IC1ReadValue2 - IC1ReadValue1) × 参考频率

频率误差 = | 测量频率 - 典型频率 |

3.2 两种硬件参考方案

方案 1:LSE 作参考(推荐,无额外接线)

  • 硬件:仅需将 32.768 kHz LSE 晶振接 OSC32_IN/OSC32_OUT
  • 配置:TIM16_CH1 内部直连 LSE,TI1SEL[3:0] = 5

方案 2:外部高精度信号作参考

  • 硬件:参考信号接 PA6/PB8/PE0(TIM16_CH1 引脚
  • 配置:TI1SEL[3:0] = 0,适配高低频需配置 TIM16 预分频器

4. 三种校准方法:适配不同场景需求

AN5676 提供三种校准策略,可按精度、耗时需求选择,均有配套固件函数:

校准方法 实现逻辑 优势 适用场景 核心函数
最小误差校准 遍历 32 个微调值,选误差最小点 精度最高 追求极致精度 HSI16_CalibrateMinError()
MSI_CalibrateMinError()
固定误差校准 二分搜索,快速达标用户设定误差 速度快 有明确误差上限 HSI16_CalibrateFixedError()
MSI_CalibrateFixedError()
校准曲线法 预存微调 - 误差表,单次测量查表补偿 速度最快 批量 / 重复校准 HSI16_CalibrateCurve()
MSI_CalibrateCurve()

5. HSI48 专属校准:CRS 时钟恢复系统

HSI48 为 USB、RNG 等外设提供 48 MHz 时钟,采用6 位 TRIM [6:0] 微调,步长 0.12%(约 57 kHz),默认值 64。
STM32U5 内置CRS 时钟恢复系统,可全自动校准:

  1. CRS 测量频率误差
  2. 自动递增 / 递减 TRIM 值
  3. 达标后开启自动补偿,抵消实时温漂可先写入预计算值加速校准,再启用自动模式做平滑补偿。

6. LSI 振荡器:只测量、不校准

LSI 为 32 kHz 低速内部 RC,用于看门狗、RTC,不可校准,仅支持频率测量评估偏差。

测量步骤:

  1. HSI16 驱动 TIM16 计数器
  2. TIM16_CH1 内部直连 LSI,TI1SEL[3:0] = 6
  3. 输入捕获测周期,按公式计算:LSI 频率 = 输入捕获预分频 × HSI16 频率 / 捕获计数值官方提供LSI_FreqMeasure() 函数直接调用。

7. 官方固件:X-CUBE-RC-CALIB 快速上手

AN5676 配套X-CUBE-RC-CALIB扩展包,包含完整校准源码与示例工程:

  1. 支持 HSI16/MSI/HSI48 全系列校准、LSI 测量
  2. 默认用LSE 参考 + 最小误差法,可宏定义切换校准方式
  3. 校准结果通过 USART 打印,可直接观察校准前后频率差异
  4. 适配 Nucleo 开发板,开箱即用

8. 实操建议与校准性能

8.1 实操避坑

  • 校准前暂停通信、ADC 等任务,避免时钟配置冲突
  • 温度剧变时,用 ADC 看门狗触发实时校准
  • 校准后重新配置 RCC、TIM16 等外设
  • 高低频参考信号需合理设置 TIM16 预分频器

8.2 校准耗时(参考)

以 LSE 为参考(32768 Hz/8=4096 Hz)、测量周期 10 次:

校准时间 = (10+1)×32 / 4096 ≈ 86 ms

固定误差法耗时≤最小误差法,曲线法耗时最短。

STM32U5 内部 RC 振荡器校准以高精度参考 + TIM16 输入捕获为核心,三种方法覆盖精度与速度需求;HSI48 依托 CRS 实现全自动校准,LSI 可快速完成频率评估。配合官方 X-CUBE-RC-CALIB 固件,工程师可快速完成校准,让内部 RC 时钟在低成本、低功耗前提下,满足全温域高精度嵌入式应用需求。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录