你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【中文文档】AN3300_如何校准STM32L1xx内部RC振荡器

[复制链接]
STMCU-管管 发布时间:2019-4-3 09:46
如何校准 STM32L1xx 内部 RC 振荡器( M, @- s; V3 t, ?$ Q8 \
  v) ^4 [/ w% N& ^' r9 M7 m' b- j2 T& [. `
前言
5 |9 e* V% H, O! J

- t% i' H# {. G. h7 VSTM32L1xx 微控制器有两个内部 RC 振荡器可做为系统时钟源。它们是 HSI(高速内部)和MSI(多速内部)振荡器。HSI 振荡器的典型频率为 16 MHz。MSI 振荡器为低速、低功耗时钟源。
1 C0 M/ b: M/ w2 I
3 _$ s$ M3 v3 ~' Z( h7 g( w工作温度对 RC 振荡器的精度有影响。在 25 ℃时,HSI 和 MSI 振荡器的典型精度为 ±1%,但在 -40 到 105 ℃温度范围,精度会降低。 0 N1 n! N3 O0 e
; B  u8 F5 i0 F7 p1 y8 ~
为补偿温度对内部 RC 振荡器精度的影响,STM32L1xx 微控制器的内置一些功能可帮您校准HSI 和 MSI 振荡器及测量 MSI 和 LSI (低速内部)振荡器频率。
* o7 K4 ~- z& \: [
( d4 P) n) g7 h5 G本应用笔记侧重如何校准内部 RC 振荡器:HSI 和 MSI。它展示了两个方法:第一个方法基于寻找具有最低误差的频率,第二个方法是寻找具有最大允许误差的频率。两个方法都通过提供精确参考信号的方式实现。
8 N+ A' z" d$ b' Z* c' ^9 `
. w" }3 ?" u- U* z( J+ a! F" K
MSI 和 LSI 振荡器的测量都是通过将振荡器连至定时器输入捕获执行。
/ m7 v! `1 |! |! Q) d8 e
& _$ `) b6 C% e& w$ B, r. S/ Q) W# L
注 : 1 在本文中, STM32L1xx 指超低功耗大容量、中容量增强型、中容量器件。2 超低功耗中容量器件为 STM32L151xx 和 STM32L152xx 微控制器,其闪存密度范围为 64至 128K 字节。3 超低功耗中容量增强型器件为 STM32L151xx、 STM32L152xx 和 STM32L162xx 微控制器,其闪存密度为 256 K 字节。4 超低功耗大容量器件为 STM32L151xx、STM32L152xx 和 STM32L162xx 微控制器,其闪存密度为 384 K 字节。* H% M, x, H5 T; w  v  L; q+ X3 @. R
, X. q. @. o- y; f& e7 {) t
1 STM32L1xx 系统时钟
& r3 K: h& u/ y6 m& t* P

* A! k4 E! `* L+ i& c6 }# MSTM32L1xx 微控制器系列有多个时钟源可用于驱动系统时钟:
/ F" q! O# Y( w! z● 16 MHz 高速内部 (HSI) RC 振荡器时钟
, C# ]: J# I$ f6 e/ r: k2 p● 1 至 24 MHz 高速外部 (HSE)振荡器时钟   y$ Q  j  N; Z! C7 E( V% V0 l
● 65.5 kHz 至 4.2 MHz 多速内部 (MSI) RC 振荡器时钟 & s6 B. ]/ |- C, {# B* @$ \0 Y
● 2 至 24 MHz 锁相环 (PLL),由 HSI 或 HSE 振荡器提供时钟
) M# R3 }, p+ k- u, A, h$ D& s

/ b9 {8 a5 c) r3 L" n+ \! I高速内部 (HSI) RC 振荡器一般频率为 16 MHz,耗电 100 µA。
8 u) ~2 ]" c- {  p( n! f1 [& d* n$ l: Q* I- {' Y
多速内部(MSI)RC 振荡器提供了七个频率范围:65.5 kHz、131 kHz、262 kHz、524 kHz、1.05 MHz、 2.1 MHz (默认值)和 4.2 MHz。它的设计为工作电流与频率成正比 (请参考产品手册以获得 MSI 耗电与所选频率范围之间关系的更详细信息),因此当 CPU 在低频运行时,内部振荡器耗电可最小化。在从复位重启、从停止唤醒、待机低功耗模式后, MSI 时钟被用作系统时钟。
/ Q/ f' }; K1 m0 d% n' n" ^9 k
' A6 P5 n/ @" k; ?5 R* S+ s内部 RC 振荡器 (HSI 和 MSI)提供了低成本时钟源 (不需外部元件),这是其优点。它还具有比外部振荡器更快的启动时间和更低的功耗。可校准 HSI 和 MSI 振荡器以提高其精度。但即使校准后,内部RC振荡器频率也不如外部晶振或陶瓷谐振器的频率精度(几十ppm)高。 + a* [# P! B3 X0 V+ w8 R) Z
3 L9 u. A( b0 T: v
注 : 若外部振荡器发生故障,内部 RC 振荡器 (HSI 和 MSI)还可作为备份时钟源 (辅助时钟)使用。
; |$ s$ I/ I7 p2 d3 D8 l
5 g2 h+ I1 B5 r' \( O$ K
1.png

  z3 H, Q8 A8 M" e2 {
# e% K8 k, y5 y7 o
STM32L1x 器件还有两个次级时钟源 (不能用作系统时钟源):
( e4 v# w: m5 m1 Y( h. W
● 37 kHz 低速内部 (LSI) RC,设计为驱动独立看门狗,也可驱动实时时钟 (RTC)。该 LSI 振荡器无法校准,但可对其测量以评估 (由温度和电压变化引起的)频率偏差
# l* `4 {6 F7 U. b) v. \4 P
● 32.768 kHz 低速外部晶振 (LSE 晶振),用于驱动实时时钟 (RTC)

  O! A. o6 {5 Z: `( D- l
2 内部 RC 振荡器校准

2 e6 H1 T2 u7 S: ^( \
由于生产过程的不同,每个芯片的内部 RC 振荡器的频率都可能不同。因此,MSI 和 HSI RC振荡器由 ST 工厂校准,以获得 TA = 25 ℃时 1% 的精度。复位后,工厂校准值自动加载到内部校准位中。

/ [5 E! |2 N! d0 o# {
可微调内部 RC 振荡器的频率,以在更宽的温度和供电范围内达到更好的精度。这就是微调位的作用。

$ I8 O- @; n8 F# Y' I; n$ s
对于 HSI 振荡器,复位后校准值加载于 HSICAL[7:0] 位中。有五个微调位 HSITRIM[4:0] 用于微调。默认微调值为 16。增加 / 降低此微调值会增加 / 降低 HSI 频率。 HSI 振荡器微调步长为 0.5% (在 80 kHz 周围)。

1 d' Q* M: o/ J: O# E9 D
● 将微调值写为 17 至 31 会增加 HSI 频率。
% a9 Z2 Q# u8 G4 A  e3 a. d
● 将微调值写为 0 至 15 会降低 HSI 频率。
" S/ H0 v* ~( X( B# Q5 }( s7 R
● 将微调值写为 16, HSI 频率会保持为默认值。

: N. r8 k+ z( K! g# k2 n7 L6 _- T
下图显示了随校准值变化的 HSI 振荡器行为。HSI 振荡器频率随校准值增加(校准值 = 默认的 HSICAL[7:0] + HSITRIM[4:0]),除了在模 16 处。在这些校准值处,负步进会达到正步进的三倍。

) L. i8 x3 r1 V* a' Y/ A% ~
1.png

8 L7 q3 t6 f9 C( ~4 V6 T
● 对于 MSI 振荡器,复位后校准值加载于 MSICAL[7:0] 位中。使用了八个微调位MSITRIM[7:0],因此有更宽的调整范围。校准基于将默认的 MSICAL[7:0] 位 (复位值)加上 MSITRIM[7:0] 位。结果储存于 MSICAL[7:0] 中:

( N; I0 V7 ]  P: z" z
MSICAL[7:0] = 默认的 MSICAL[7:0] + MSITRIM[7:0]
$ n% B7 _/ I; d8 v
示例:假设默认的 MSI 校准值 MSICAL[7:0] 为 0x80。

4 P7 J2 y6 I' M; e9 E  G  e
1. 将 0x01 到 0x7F 之间的值写入 MSITRIM[7:0] 会导致校准值 MSICAL[7:0] 的范围为:MSICAL[7:0] = 0x80 + 0x01 = 0x81及 MSICAL[7:0] = 0x80 + 0x7F = 0xFF这些结果大于 0x80 (默认的 MSI[7:0] 值),因此 MSI 频率增加 1 步 (0x81 -0x80)至 127 步 (0xFF - 0x80)。
5 g# _/ y" d8 l, ^* W; G" o
2. 将 0x81 到 0xFF 之间的值写入 MSITRIM[7:0] 会导致校准值 MSICAL[7:0] 的范围为:MSICAL[7:0] = 0x80 + 0x81 = 0x01及 MSICAL[7:0] = 0x80 + 0xFF = 0X7F这些结果小于 0x80 (默认的 MSI[7:0] 值),因此 MSI 频率降低 1 步 (0x01)至127 步 (0x7F)。
2 {" x& E5 a( i
3. 在 MSITRIM[7:0] 中写入默认校准值 (0x80)会导致校准值 MSICAL[7:0] 等于MSICAL[7:0] = 0x80 + 0x80 = 0x00,因此 MSI 频率会降低 128 步 (最低频率)。
, D% Y2 w0 \6 c; k
下面的图 3 显示了在范围 6 (4194304 Hz)处 MSI 行为随 MSICAL[7:0] 的变化。

% J4 c0 o# Z9 `
1.png

5 r# a6 ?) i  @* s# x' U
请注意当两个 MSB 位从 “00” 到 “01”、从 “01” 到 “10”、从 “10” 到 “11” 时的负步进。对六个LSB 的更改会导致每步大约 0.5% 的微调。
9 ~3 _; \4 h3 X% @) Q8 @9 R3 U: Q, x
2.1 校准原理

% h4 h9 k4 x9 ?- V. \/ S
校准原理包括:

" D$ R) q) Q$ H! g/ o6 M3 q. e! t6 i$ _
1. 将 (需要校准的)内部 RC 振荡器设置为系统时钟,

% T$ W( z* |3 \5 L' Z7 K
2. 测量每个微调值的内部 RC 振荡器 (HSI 或 MSI)频率,
% G0 A0 W6 k2 F2 _: ?  H
3. 计算每个微调值的频率误差,

# Z3 g* e' u; T) j+ k) p
4. 最后,将微调位设置为最优值 (对应于最低频率误差)。

4 g/ v1 q$ Q" A6 C2 Z, R5 b1 d
内部振荡器频率并非直接测量,而是使用定时器计算时钟脉冲个数,与典型值比较。为此,必须有一个非常精确的参考频率,比如由外部 32.768 kHz 晶振或 50 Hz/60 Hz 电源频率(请参考第 2.2.2 章节 : 其它源用作参考频率的情况)。

3 A+ `; W9 q2 G2 B
下图显示了怎样使用定时器计数个数测量参考信号周期。

* @( \) p" Z* Q7 G
...........

! Q- k, Z: a% _3 ^8 z, b* q) {
想了解更多,请下载原文阅读
" |' j5 ?' d( x% t
赞 1 收藏 2 评论2 发布时间:2019-4-3 09:46

举报

2个回答
Kevin_G 回答时间:2019-4-3 10:06:53
收藏
雨一直下_ 回答时间:2020-8-27 10:59:12
超级使用资料,正在较准时钟

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版