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

如何在 STM32U5 系列上校准内部 RC 振荡器

[复制链接]
STMCU小助手 发布时间:2022-11-10 17:00
前言
; U3 n1 S4 M" L/ B0 V2 WSTM32U5 系列微控制器内嵌两个可选为系统时钟源的内部 RC 振荡器。它们是 HSI16(高速内部)和 MSI(多速内部)振荡器,其可驱动两个独立的输出:MSIS(用于系统时钟)和 MSIK(用于某些外设作为内核时钟)。HSI16 振荡器的典型频率为 16MHz。MSI 振荡器为多速低功耗时钟源。
9 u! D' {  H/ k9 s( ]STM32U5 系列微控制器(称为 STM32U5 器件)具有三个辅助内部时钟源:+ O5 ~. C: Q4 [. i, y) y4 x
• LSI:32kHz(内部低速)2 ?/ ^/ ]' Y8 A
• HSI48:48MHz(内部高速),可直接用于 USB、RNG(真随机数发生器)和 SDMMC(SD/SDIO MMC 卡主机接口)。6 |& q9 F" Z; h
• SHSI:48MHz(+抖动)内部安全 RC 振荡器,专用于为 SAES 外设提供时钟
$ }! v, f. j4 H- `1 v0 P: S8 {工作温度对 RC 振荡器的精度有影响。在 30°C 时,HSI16 精度为±0.5%,MSI 精度为±0.6%,HSI48 精度为±4%。但在–40°C 至125°C 的温度范围内,精度会降低。为补偿温度对内部 RC 振荡器精度的影响,STM32U5 器件内置一些功能用于校准 HSI16、
6 A  J1 j2 K/ F/ x" v+ y7 nMSI 和 HSI48 振荡器及测量 LSI 振荡器频率。
: Z/ V2 q* k9 c' ^. @当系统中有 32.768kHz 的 LSE(低速外部)时钟源可用时,MSI 振荡器的频率可通过硬件自动微调,从而达到优于±0.25%的精度。这种使用 LSE 进行的自动硬件校准被称为 PLL(锁相环)模式。本应用笔记尚未对 PLL 模式进行介绍,仅侧重于用户微调。
" [2 v# E( j( X3 ~9 I本文档还详细介绍了如何校准 HSI16、MSI 和 HSI48 内部 RC 振荡器,方法如下:7 O3 K: g$ k- Z" r
• 基于找到具有最小误差的频率的方法
7 j6 }6 \0 O8 W# o  S3 \+ s: g• 基于找到最大允许频率误差的方法
; U, j1 H8 W2 P' [9 |" |7 Q! i, B• 制定一个预先测量值的表然后在其中搜索相应变化的方法
, m7 D) ]! X; b# ELSI 振荡器的测量是通过将振荡器连接到定时器输入捕获来实现的。* d' p2 C' S0 n  z- e- ]
本应用笔记随附的 X-CUBE-RC-CALIB 扩展包包含执行这些内部振荡器校准的源代码,以及运行示例所需的所有嵌入式软件模块。
$ d! m8 T; ]. Z) e( p: u  ~6 ]% T* Q+ e& L
1 STM32U5 系统时钟  C( `% m! s& s6 N& p8 s- i  Y
STM32U5 器件具有下列时钟源可用于驱动系统时钟:
( g& S) R; t) P. j; k; _- `• HSI16:16 MHz 高速内部 RC 振荡器时钟
* {# Y! B1 Z- u5 w' e  K• HSE:4 至 50 MHz 高速外部振荡器时钟
4 `& d) T8 c# V$ R• MSI(MSIS):100 kHz 到 48 MHz 多速内部 RC 振荡器时钟' Q! [4 Z; ?$ v) c* G
• PLL:1 MHz 到 160 MHz 锁相环(PLL),由 HSI16、MSI 或 HSE 振荡器提供时钟$ @7 j1 [) Z  T* \) ~
HSI16 振荡器的典型频率为 16 MHz,功耗为 150 μA。* a( h2 p# V/ P  @5 ]" T
MSI RC 振荡器基于四个内部 RC 振荡器:MSIRC0 = 48 MHz、MSIRC1 = 4 MHz、MSIRC2 = 3.072 MHz、MSIRC4 = 400 kHz。每个 MSIRCx 振荡器具有四个分频器:/1、/2、/3 和/4。MSI 共提供了 16 个频率范围,可选6 I, p; n! h& L$ T5 b9 m5 I; z
择用于两种输出:MSIS(用于系统时钟)和 MSIK(用于外设内核时钟)。MSI 的设计为工作电流与频率成正比
0 {' a2 v2 t' Q( u6 s(请参考产品手册以获得 MSI 功耗与所选频率范围之间关系的更详细信息),当 CPU 在低频运行时,可最小化内( z) k9 n! _2 t, [0 U
部振荡器功耗。在从复位重启或待机、关断低功耗模式唤醒后,MSIS 时钟被用作系统时钟。从停机模式唤醒后,
! r- a/ W& X$ U# K/ _可选择 MSI 时钟而不是 HSI16 作为系统时钟。
8 |4 T# V, G9 h0 ~1 oHSI48 时钟信号由内部 48 MHz RC 振荡器生成,可直接用于 USB、RNG 和 SDMMC。* m6 P8 {" G/ f* W
内部 RC 振荡器(HSI16、MSI 和 HSI48)提供了一个低成本时钟源(无需外部元件)。它们还具有比外部振荡器: J$ P2 y/ q: T; R0 J
更快的启动时间和更低的功耗。可校准 HSI16、MSI 和 HSI48 振荡器以提高其精度。但即使校准后,内部 RC 振荡6 S3 y2 n* K9 o! z5 d/ t$ J
器频率精度也不如外部晶振或陶瓷谐振器的频率精度(几十 ppm)高。1 A6 O- `; s' \" J( y5 d; |7 o+ H
注: 若外部振荡器发生故障,则 MSI 内部 RC 振荡器还可作为备份时钟源(辅助时钟)使用。
( q% D: }( |9 ?; f, v# N# L' s

# @9 x( P7 R0 V  W F]ISM5C7[{OWS1]Q@~BW7CB.png
6 j/ A6 O) K0 p+ Z$ {. y; f+ L, x* |6 V& x  f, u4 O
STM32U5 器件还嵌入了以下次级时钟源(不能用作系统时钟):, a7 b% h: |- l7 L. C
• LSI:32kHz 低速内部 RC,可在停机和待机模式下保持运行用于 IDWG(独立看门狗)、RTC 和 LCD。LSI振荡器无法校准,但可通过测量来评估任何频率偏差(由于温度和电压变化)。
; i* k* T; _6 V  m- g• LSE 晶振:32.768 kHz 低速外部晶振 RC,可选地驱动 RTC(实时时钟)$ {1 H+ ?0 A4 R) e. x, }8 K
• HSI48:48 MHz 高速内部 RC,设计用于通过特制 CRS(时钟恢复系统)电路为 USB 外设提供高精度时钟。它还可驱动 RNG 和 SDMMC。
( \6 W9 J- d+ K- I1 Y• MSIK:多速内部 RC 振荡器时钟,用于外设内核时钟(源自 MSIRCx 振荡器)
$ @# x* v$ G+ j• SHSI:48 MHz 内部 RC 振荡器,专为 SAES 外设提供时钟
- }" \( {% m8 I4 ~& u4 J
. [, l) @+ J- `) m. n: P* p  I$ H2 内部 RC 振荡器校准
* |/ l* y/ N' Z; y2 D- V0 a, M* c由于生产过程的不同,每个器件的内部 RC 振荡器的频率都可能不同。因此,MSI 和 HSI16 RC 振荡器由意法半导体在 TA = 30 °C 时进行工厂校准。复位后,工厂校准值自动加载到内部校准位中。* s5 w, y; S- ^# a& U# f! x
可微调内部 RC 振荡器的频率,以在更宽的温度和供电范围内达到更好的精度。这就是微调位的作用。. i$ d7 L% F& q' x8 _
对于 HSI16 振荡器,复位后校准值加载于 HSICAL[11:0]中。使用五个微调位 HSITRIM[4:0]进行微调。默认微调值为 16。增加/降低此微调值会增加/降低 HSI16 频率。HSI16 振荡器微调步长为 0.18%(约 29 kHz),具体如下:+ V5 y$ e  s% i2 c, v
• 将微调值写为 17 至 31 会增加 HSI16 频率。
7 |, x4 u% k5 ^9 u• 将微调值写为 0 至 15 会降低 HSI16 频率。
1 b3 E. P0 l2 o9 r- Z( l• 将微调值写为 16,HSI16 频率会保持为默认值。
3 @4 w  n% B8 T$ Y下图显示了随校准值变化的 HSI16 振荡器行为。HSI16 振荡器频率随校准值增加(校准值 = 默认的 HSICAL[11:0]+ HSITRIM[4:0])。

/ k9 _4 L* ]- s9 Z) W3 M% Q& W# ?7 j

' O6 l8 D3 g5 o' Z9 L, x TC[XX_{WYY~K9N19CEP6]IG.png , {7 W9 h$ w5 A, d7 j8 N+ b
1 R, j1 j. M6 J. U2 `6 b; d- q, ]
对于 MSIRCx 振荡器(x = 0..3),复位后校准值加载于 MSICALx[4:0]位中。五个微调位 MSITRIM[4:0]使微调范围更宽。校准基于将默认的 MSICALx[4:0](复位值)加上 MSITRIMx[4:0]。2 B; g) c% D; S3 q
结果存储在 MSICALx[4:0] = 默认 MSICALx[4:0] + MSITRIMx[4:0]中。

$ u2 `; S9 j1 M. W) z* X  `, N
) r$ |4 k$ W! E$ D; _' o+ N4 `$ Q* D示例# Y: v4 Z& i( v) D$ q. \/ D
假设默认的 MSI 校准值 MSICALx[4:0]为 0x10:
" C2 T9 K2 |* b+ ^1. 将 0x01 和 0x0F 之间的值写入 MSITRIM[4:0],会使校准值 MSICALx[4:0]处于 MSICALx[4:0] = 0x10 + 0x01= 0x11 到 MSICALx[4:0] = 0x10 + 0x0F = 0x1F 的范围内。' ?. g% y0 B& H  p, A
这些结果大于 0x10(默认的 MSICALx[4:0]值),因此 MSIRCx 频率增加 1 步(0x11 - 0x10)至 15 步(0x1F - 0x10)。
7 h$ [% W3 X, E. a2 h% c  }$ H; \2. 将 0x11 和 0x1F 之间的值写入 MSITRIM[4:0],会使校准值 MSICALx[4:0]处于 MSICALx[4:0] = 0x10 + 0x11 =0x01 到 MSICALx[4:0] = 0x10 + 0x1F = 0x0F 的范围内。这些结果小于 0x10(默认的 MSICALx[4:0]值),因此 MSIRCx 频率降低 1 步(0x01)至 15 步(0x0F)。9 U  D+ `+ I; ^: z7 _1 f  ?7 H4 C
3. 在 MSITRIM[4:0]中写入默认校准值 0x10 会导致校准值 MSICALx[4:0]等于MSICALx[4:0] = 0x10 + 0x10 = 0x00,因此 MSIRCx 频率会降低 16 步(最低频率)。
/ P  Y, Y0 ^* s& n: L
! n6 ]% w! h4 S! z6 u下图显示了 MSIRCx 相比于 MSICALx[4:0]在 4MHz 时的行为。

2 i9 u/ r  x$ x5 @* K" w& c' W9 L1 G8 H

! g* ~  R7 I7 L SU09BVF9X8V((MJ)[13~YLN.png ( w! M) i* ~1 ?7 N& A1 ?2 A, ]/ p

- Y4 d9 j' {/ m9 I% ^4 T对于 HSI48 振荡器,复位后校准值加载于 HSI48CAL[8:0]中。使用六个微调位 TRIM[6:0](在 CRS_CR 寄存器中)进行微调。默认微调值为 64。增加/降低此微调值会增加/降低 HSI48 频率。5 |4 {4 P6 `  e1 h0 S  r# S
HSI48 振荡器微调步长为 0.12%(约 57 kHz),具体如下:0 A7 n' ~! S& D4 ]
• 将微调值写为 65 至 127 会增加 HSI48 频率。
: a5 |  A2 m& b. w• 将微调值写为 0 至 63 会降低 HSI48 频率。$ s4 ~+ E( x" _6 V6 E- r+ p: B
• 将微调值写为 64,HSI48 频率会保持为默认值。
" u  H+ a7 t% }- n3 w. V下图显示了随校准值变化的 HSI48 振荡器行为。HSI48 振荡器频率随校准值增加(校准值 = 默认的 HSI48CAL[8:0]
" S0 ?/ j; b+ Q/ d. `+ TRIM[6:0])。
" s) Q. c- W( K- a* D

4 c% ^. h5 q& K& p7 M  j) e

% T* i! V+ E; m6 w" T )ZTP]JEC_~1VF7W{KZ1YL.png   ]( {  O; m- x9 y. t
. N- O7 D6 t2 f0 i, {8 Y" ?
& ]; `, e, D& L8 E" b7 z/ H0 L
2.1 校准原理9 \; ^8 @* R+ X# x  b. ^' k
校准原理包括以下步骤:3 x/ V6 S7 F! E
1. 将(需要校准的)内部 RC 振荡器设置为系统时钟。$ I+ T/ k5 O; S; h7 r5 S& ?# k
2. 测量每个微调值的内部 RC 振荡器(HSI16 或 MSIRCx)频率。6 z: L- {7 |7 x+ J0 r0 E
3. 计算每个微调值的频率误差。5 `: ?  p0 w6 |# y
4. 将微调位设置为最优值(对应于最低频率误差)。
) U8 h* F* W! u* V3 L内部振荡器频率并非直接测量,而是使用定时器计算时钟脉冲个数,与典型值比较。为此,必须有一个非常精确的参考频率,比如由外部 32.768 kHz 晶振或 50 Hz/60 Hz 电源频率(请参考第 2.2.2 节 用例 2:其他源用作参考频率)。
! r& X" \" Z* {' u, K  I下图显示了怎样使用定时器计数个数测量参考信号周期。

9 r! x$ H, L" p3 D2 U
$ c2 i! w4 c+ u
: [, g8 l* I. O& O+ B/ q! y) o
AR$}F`0(G~NRM_2}$W5CS$V.png
3 _2 r- N' p' x, B# a. z. G+ r: Z6 C4 @3 J0 }1 Q7 m( M/ }
& D2 f* a+ g4 |% O, {0 U
启用定时器计数后,当第一个参考信号上升沿发生时,捕捉定时器计数值,储存于 IC1ReadValue1 中。在第二个上升沿,又捕捉到定时器计数,储存于 IC1ReadValue2 中。在两个连续上升沿之间的时间(IC1ReadValue2 -IC1ReadValue1)表示了参考信号的整个周期。1 u0 K% h0 N  u  t# U, B% b: B- n
因为定时器计数器的时钟由系统时钟提供(HSI16 或 MSIRCx),因此与参考信号有关的内部 RC 振荡器生成的真正频率为:' E( H- W# ?! P) B- l5 u
测量频率 = (IC1ReadValue2 – IC1ReadValue1) × REFERENCE_FREQUENCY
# R5 t! I3 O/ \9 J1 W误差(单位 Hz)为测量频率与典型值之差的绝对值。
, Q2 q6 E- r7 g5 d- Y  J因此,内部振荡器频率误差表示为:9 N# x5 I9 T& g% K: m5 w* E/ E3 n
频率误差(Hz) = 测量频率 - 系统时钟频率
8 i$ v+ I& x7 ]3 h8 H
) \) _- B( C4 f2 R
稳定时间和频率过冲/下冲: D0 N6 e3 Y! J9 G' g5 ]
写入微调值后,振荡器频率从原始频率变为最终频率。这种频率变化需要一定的时间才能稳定到新的频率值。
0 d" p3 n) a  T: r# w/ r; Q: WHSI16、HSI48 和 MSI 振荡器的稳定时间约为 15 μs(设置最终频率的时间)。
6 c* R$ \* P8 F0 A在稳定时间内,频率值可以高于(当新的频率值大于原来的频率值时)或低于(当新的频率值小于原来的频率值时)最终频率。该过冲/下冲值取决于应用于微调值的微调步长大小。最坏情况下的过冲变化(整个范围内的微调变化)约为 2.5%。中等变化约为 1.5%。
& V" r7 v" ~# d6 U" H9 b7 d校准过程须在微调值变化和振荡器频率读取之间实施等待时间。
/ Q! g& l  N* Q对每个微调值计算误差之后,算法会决定最优微调值(对应于最接近典型值的频率),编程于微调位中(请参考第 2.3 节 )。
# {: G  B9 p. p" _: g8 q, x# V
: k  A$ M4 E6 ]: `& T
5 n( d: x% p( b. z7 r- b
完整版请查看:附件; l4 O% A- t0 j9 H; c
5 k6 f2 n! i$ {* G$ f; n
% x! O! ~& Z8 R# L  k7 ]  U' }

zh.DM00794778.pdf

下载

670.05 KB, 下载次数: 7

收藏 评论0 发布时间:2022-11-10 17:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版