
STM32F10xxx内部 RC 振荡器 (HSI)校准 / M5 w2 x: A6 K$ | u 前言 * m: ?- b% \/ l3 q3 X' t! P STM32F10xxx 微控制器提供了适合运行的内部 RC 振荡器 (典型地,有 8 MHz 的 HSI:高速内部振荡器)。在 25 ℃时, HSI 的典型精度为 ±1%。在 –40 到 105 ℃, RC 频率精度值扩大为 ±3%。因此,温度对 RC 精度有影响。 # t9 N& U. ?+ H1 Y% @5 q8 i 为补偿应用中的温度影响,用户可使用运行时校准程序,进一步微调 STM32F10xxx HSI 振荡器的输出频率,提高 HSI 的频率精度。对通信外设来说,这可能是至关重要的。 本应用笔记给出了两个校准内部 RC 振荡器的方法:找到具有最小误差的频率或找到最大允许的频率误差。两者都通过提供精确的参考源,如 RTC/64 信号或主动信号实现。 这两个方法都基于相同的原理:计算 RC 频率 vs. 参考频率,计算 HSI 频率误差,设置RCC_CR 寄存器中的 HSITRIM 位。 1 STM32F10xxx 的内部时钟:HSI 时钟 HSI 时钟信号由内部 8 MHz RC 振荡器生成,可直接用作系统时钟,或者除以 2 用作 PLL 输入。 HSI RC 振荡器的优点是成本较低 (无需使用外部组件)。它还比 HSE 晶振具有更快的启动时间。但即使校准后,频率也不如外部晶振或陶瓷谐振器的频率精度高。 HSI 信号还可作为备份时钟源 (辅助时钟)使用,以防 HSE 晶振发生故障。 3 J" A* U( F7 E% { / a' y' N2 I0 x- ~+ d1 F7 F 1.1 校准 7 T2 ^! E' o% o( q 由于生产过程的不同,每个芯片的 RC 振荡器的频率都可能不同。因此,每个器件都由 ST做工厂校准,在 TA = 25 ℃时达到 1% 精度。 复位后,工厂校准值将加载到时钟控制寄存器 RCC_CR 的 HSICAL[7:0] 位中。 # Y3 d0 \! O" { I/ Y1 N% f2 r 0 M4 \6 |+ b$ q. d& ` 通过设置 RCC_CR 寄存器中的 HSITRIM[4:0] 位进行用户校准。可对这些 位编程,以考虑电压和温度变化对内部 HSI RC 振荡器频率的影响。默认值为 16,加上 HSICAL 值,应能将HSI 微调至 8 MHz ±1%。前后两个 HSICAL 步进之间的微调步长 (Fhsitrim)约为 40 kHz。) E3 v m) F2 G , n% l7 d$ i$ f: G2 P8 g 2 RC 校准 , {" w7 a4 O0 R$ W& v0 k. ] 2.1 校准原理 5 O- Q! i7 S K* s: s 校准的原理为首先测量 HSI 频率,然后计算频率误差,最后设置 RCC_CR 寄存器中的HSITRIM 位。 9 a0 `; ~6 Q0 @1 x. a& Q 4 \( \- u4 |$ S3 k HSI 频率并不是直接测量的,而是使用定时器对 HSI 时钟沿计数方式算出,然后与理想值 8000 000 Hz 比较。为此,必须有一个非常精确的参考频率,比如由外部 32 kHz 晶振提供的RTC/64 信号或 50 Hz/60 Hz 主频 (请参考第 2.2.2 章节)。对于 RTC 时钟源的情况,参考频率等于 512 Hz (32768 Hz/64)。 8 R2 J v, ~: ]8 k' _ ) f0 Z0 I! Y# }! J/ g# _+ N 图 1 显示了怎样使用定时器计数个数测量参考信号周期。 % f0 P8 P t$ k7 o2 p ![]() 在每个上升沿会发生两个中断:捕获比较 1 中断和更新事件中断。后者用于在参考信号周期对计数器溢出计数。因为在每个新周期开始时两个中断同时发生,所以会发生额外的溢出。这就是为什么我们必须对计数器溢出的数目减 1:N – 1。9 u4 M8 a" Y( k( e/ ]) I& N" O! X. ~ ........... * n' J% R/ J# m9 i Z1 \ 想了解更多,请下载原文阅读 |
收藏 |