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

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

[复制链接]
STMCU小助手 发布时间:2022-11-10 17:00
前言$ ]% \+ U# b5 x3 `6 L: x
STM32U5 系列微控制器内嵌两个可选为系统时钟源的内部 RC 振荡器。它们是 HSI16(高速内部)和 MSI(多速内部)振荡器,其可驱动两个独立的输出:MSIS(用于系统时钟)和 MSIK(用于某些外设作为内核时钟)。HSI16 振荡器的典型频率为 16MHz。MSI 振荡器为多速低功耗时钟源。
+ _0 U+ J5 A5 J4 b" bSTM32U5 系列微控制器(称为 STM32U5 器件)具有三个辅助内部时钟源:9 @. |, B  W/ u5 V8 [: `
• LSI:32kHz(内部低速)
& h' I6 C  Y# z4 R• HSI48:48MHz(内部高速),可直接用于 USB、RNG(真随机数发生器)和 SDMMC(SD/SDIO MMC 卡主机接口)。
6 ^3 _! G5 a- L8 P  S" E& p• SHSI:48MHz(+抖动)内部安全 RC 振荡器,专用于为 SAES 外设提供时钟- x+ }. o( ?2 C. q. V5 i
工作温度对 RC 振荡器的精度有影响。在 30°C 时,HSI16 精度为±0.5%,MSI 精度为±0.6%,HSI48 精度为±4%。但在–40°C 至125°C 的温度范围内,精度会降低。为补偿温度对内部 RC 振荡器精度的影响,STM32U5 器件内置一些功能用于校准 HSI16、
* P) M- r; n6 B- PMSI 和 HSI48 振荡器及测量 LSI 振荡器频率。6 O, [+ r3 X1 g
当系统中有 32.768kHz 的 LSE(低速外部)时钟源可用时,MSI 振荡器的频率可通过硬件自动微调,从而达到优于±0.25%的精度。这种使用 LSE 进行的自动硬件校准被称为 PLL(锁相环)模式。本应用笔记尚未对 PLL 模式进行介绍,仅侧重于用户微调。
3 t; o! K: [2 _: S4 H; i) _1 [% L本文档还详细介绍了如何校准 HSI16、MSI 和 HSI48 内部 RC 振荡器,方法如下:+ B' e( n7 V' I, t2 K. q& O% [: g
• 基于找到具有最小误差的频率的方法- j3 J. a" X- C3 V' }, d& j6 k
• 基于找到最大允许频率误差的方法
7 p  G/ f3 N* ?: }) k• 制定一个预先测量值的表然后在其中搜索相应变化的方法
. E2 [2 |) ~" g- nLSI 振荡器的测量是通过将振荡器连接到定时器输入捕获来实现的。/ m  g* G" X5 H3 P& j1 l
本应用笔记随附的 X-CUBE-RC-CALIB 扩展包包含执行这些内部振荡器校准的源代码,以及运行示例所需的所有嵌入式软件模块。
! K; D- j# Z" p3 _- K
4 L! D' B; m( C: T- `! |1 STM32U5 系统时钟, V8 _% R1 b! U% U& L" V9 g$ ^9 J6 f
STM32U5 器件具有下列时钟源可用于驱动系统时钟:1 J+ G3 B. C' L; V, J( }4 s4 r" ~, b
• HSI16:16 MHz 高速内部 RC 振荡器时钟; y, m. L" B8 X- M" z( b! O, _
• HSE:4 至 50 MHz 高速外部振荡器时钟8 \) H. Q, |+ q) a" J
• MSI(MSIS):100 kHz 到 48 MHz 多速内部 RC 振荡器时钟
+ c8 ?0 P/ Z/ \6 ]• PLL:1 MHz 到 160 MHz 锁相环(PLL),由 HSI16、MSI 或 HSE 振荡器提供时钟& q- _4 Z9 K) }, `; ]) N) V
HSI16 振荡器的典型频率为 16 MHz,功耗为 150 μA。4 F2 x! \! r9 g
MSI RC 振荡器基于四个内部 RC 振荡器:MSIRC0 = 48 MHz、MSIRC1 = 4 MHz、MSIRC2 = 3.072 MHz、MSIRC4 = 400 kHz。每个 MSIRCx 振荡器具有四个分频器:/1、/2、/3 和/4。MSI 共提供了 16 个频率范围,可选
7 @5 l2 @* H# t- L! I- [择用于两种输出:MSIS(用于系统时钟)和 MSIK(用于外设内核时钟)。MSI 的设计为工作电流与频率成正比; x) V2 F& Q8 p: B( a
(请参考产品手册以获得 MSI 功耗与所选频率范围之间关系的更详细信息),当 CPU 在低频运行时,可最小化内" _$ l( h3 M2 B1 o  N( O& t2 n1 ~
部振荡器功耗。在从复位重启或待机、关断低功耗模式唤醒后,MSIS 时钟被用作系统时钟。从停机模式唤醒后,3 v, m) u% B9 s
可选择 MSI 时钟而不是 HSI16 作为系统时钟。
; l) o4 f1 w1 A5 |) sHSI48 时钟信号由内部 48 MHz RC 振荡器生成,可直接用于 USB、RNG 和 SDMMC。
) p# u7 c8 q0 z6 V0 _内部 RC 振荡器(HSI16、MSI 和 HSI48)提供了一个低成本时钟源(无需外部元件)。它们还具有比外部振荡器
" Z4 K: I- B# C更快的启动时间和更低的功耗。可校准 HSI16、MSI 和 HSI48 振荡器以提高其精度。但即使校准后,内部 RC 振荡% X9 O% y5 L1 k, `6 L* Z+ m
器频率精度也不如外部晶振或陶瓷谐振器的频率精度(几十 ppm)高。
% I; y1 u0 s; \; v& F注: 若外部振荡器发生故障,则 MSI 内部 RC 振荡器还可作为备份时钟源(辅助时钟)使用。
0 T5 q" j0 U0 k- o- ~, T/ y6 z6 G

  W% i( e! _/ `/ Y' J5 L F]ISM5C7[{OWS1]Q@~BW7CB.png
9 V0 ?2 c( i3 Z
9 I( k- {, s: O5 U7 u5 ]STM32U5 器件还嵌入了以下次级时钟源(不能用作系统时钟):( z7 \" h6 I; r2 p
• LSI:32kHz 低速内部 RC,可在停机和待机模式下保持运行用于 IDWG(独立看门狗)、RTC 和 LCD。LSI振荡器无法校准,但可通过测量来评估任何频率偏差(由于温度和电压变化)。
* C6 b% b3 d* n8 j2 [• LSE 晶振:32.768 kHz 低速外部晶振 RC,可选地驱动 RTC(实时时钟)& j- I. O  _( v% e
• HSI48:48 MHz 高速内部 RC,设计用于通过特制 CRS(时钟恢复系统)电路为 USB 外设提供高精度时钟。它还可驱动 RNG 和 SDMMC。
3 f2 \0 a+ n* P# t4 _1 k7 T• MSIK:多速内部 RC 振荡器时钟,用于外设内核时钟(源自 MSIRCx 振荡器)
  e5 J, G! x1 d& q6 L• SHSI:48 MHz 内部 RC 振荡器,专为 SAES 外设提供时钟
( ^' d# R1 \+ {& o1 w5 I8 X; J6 `1 P$ l7 \
2 内部 RC 振荡器校准4 E, ]/ }: m6 K/ V: }
由于生产过程的不同,每个器件的内部 RC 振荡器的频率都可能不同。因此,MSI 和 HSI16 RC 振荡器由意法半导体在 TA = 30 °C 时进行工厂校准。复位后,工厂校准值自动加载到内部校准位中。
9 e( t" z% m. E  s可微调内部 RC 振荡器的频率,以在更宽的温度和供电范围内达到更好的精度。这就是微调位的作用。
1 u( ^# l. o. K8 i& \' Y% v  R对于 HSI16 振荡器,复位后校准值加载于 HSICAL[11:0]中。使用五个微调位 HSITRIM[4:0]进行微调。默认微调值为 16。增加/降低此微调值会增加/降低 HSI16 频率。HSI16 振荡器微调步长为 0.18%(约 29 kHz),具体如下:
2 @8 \# R0 w" z' I: x- l• 将微调值写为 17 至 31 会增加 HSI16 频率。: Z8 A5 v) l, |
• 将微调值写为 0 至 15 会降低 HSI16 频率。0 _( X6 Z. E- W$ m& D+ g% C( a
• 将微调值写为 16,HSI16 频率会保持为默认值。
& O7 ^+ O1 Y* `" [下图显示了随校准值变化的 HSI16 振荡器行为。HSI16 振荡器频率随校准值增加(校准值 = 默认的 HSICAL[11:0]+ HSITRIM[4:0])。

/ N( F' q5 _: ^; f# x. a. @5 W

( E1 j" c* Z4 S- ]6 a TC[XX_{WYY~K9N19CEP6]IG.png
; R5 }# }" |# z
3 v! D% a8 `0 v1 I" c对于 MSIRCx 振荡器(x = 0..3),复位后校准值加载于 MSICALx[4:0]位中。五个微调位 MSITRIM[4:0]使微调范围更宽。校准基于将默认的 MSICALx[4:0](复位值)加上 MSITRIMx[4:0]。# f( V) ^- w  e6 k: d3 T( y. K2 k
结果存储在 MSICALx[4:0] = 默认 MSICALx[4:0] + MSITRIMx[4:0]中。
; t2 w6 i7 {  Q: b$ q( `# j* j

. ]; N: Y. P2 X! s1 e示例
2 ]( P5 Z/ k. u$ |. V假设默认的 MSI 校准值 MSICALx[4:0]为 0x10:5 J6 d' `5 Z/ t: q2 A  D' o/ n: T
1. 将 0x01 和 0x0F 之间的值写入 MSITRIM[4:0],会使校准值 MSICALx[4:0]处于 MSICALx[4:0] = 0x10 + 0x01= 0x11 到 MSICALx[4:0] = 0x10 + 0x0F = 0x1F 的范围内。' N" F& x+ G. V
这些结果大于 0x10(默认的 MSICALx[4:0]值),因此 MSIRCx 频率增加 1 步(0x11 - 0x10)至 15 步(0x1F - 0x10)。/ x# U" O4 T: T- j4 g# o1 q
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)。0 R- E) G& F) |/ L; g
3. 在 MSITRIM[4:0]中写入默认校准值 0x10 会导致校准值 MSICALx[4:0]等于MSICALx[4:0] = 0x10 + 0x10 = 0x00,因此 MSIRCx 频率会降低 16 步(最低频率)。  Z1 q$ K' r. G* @' [8 e# W6 Y

: R. u; l0 ?  [' B& K. G6 a( |下图显示了 MSIRCx 相比于 MSICALx[4:0]在 4MHz 时的行为。

$ Q2 c2 k  \  Z0 Q; l# B: n% k: t. E1 X' x8 F
' f) l; N1 U0 o+ S" o, B* q
SU09BVF9X8V((MJ)[13~YLN.png & x. u+ W) i) C3 ^5 I

1 z  X2 E# Z) H" U1 Z对于 HSI48 振荡器,复位后校准值加载于 HSI48CAL[8:0]中。使用六个微调位 TRIM[6:0](在 CRS_CR 寄存器中)进行微调。默认微调值为 64。增加/降低此微调值会增加/降低 HSI48 频率。- w# a' N5 v- ~! i1 @
HSI48 振荡器微调步长为 0.12%(约 57 kHz),具体如下:& T# A$ `' f6 F  ]
• 将微调值写为 65 至 127 会增加 HSI48 频率。4 h  e4 M% {* K, \
• 将微调值写为 0 至 63 会降低 HSI48 频率。" o8 v1 y0 W+ ]# j7 D2 b/ j
• 将微调值写为 64,HSI48 频率会保持为默认值。
# n% \8 L! F$ y下图显示了随校准值变化的 HSI48 振荡器行为。HSI48 振荡器频率随校准值增加(校准值 = 默认的 HSI48CAL[8:0]: M. [/ [% k7 f2 i
+ TRIM[6:0])。
: d% f+ D9 i) R( n  r3 b- d
* w0 z7 ?8 f0 [: D# Q! v  |

& N2 x, x6 _$ }+ ^ )ZTP]JEC_~1VF7W{KZ1YL.png
" p! N3 U: I6 u0 q4 J
* b# o0 J) H2 C% u+ t* _* m- k  M; `, m- P9 R
2.1 校准原理
: w/ R4 _  n4 ]/ v3 [( Z+ S校准原理包括以下步骤:4 B+ M* C- R7 q- Z8 Q
1. 将(需要校准的)内部 RC 振荡器设置为系统时钟。( B/ e8 Z: Q% [: Y0 S
2. 测量每个微调值的内部 RC 振荡器(HSI16 或 MSIRCx)频率。
& J+ n  |) v2 \% H7 v3 |3. 计算每个微调值的频率误差。+ G. A' P9 O' [- |1 i' L
4. 将微调位设置为最优值(对应于最低频率误差)。
4 d1 i9 X5 v- N" q! z内部振荡器频率并非直接测量,而是使用定时器计算时钟脉冲个数,与典型值比较。为此,必须有一个非常精确的参考频率,比如由外部 32.768 kHz 晶振或 50 Hz/60 Hz 电源频率(请参考第 2.2.2 节 用例 2:其他源用作参考频率)。5 @9 o$ e& o+ V9 g! x
下图显示了怎样使用定时器计数个数测量参考信号周期。

/ ^& W9 q* N  q* V2 \5 o% f2 a& @" |$ Y( p

2 S7 z: ^; z5 a3 O, B AR$}F`0(G~NRM_2}$W5CS$V.png
2 Q; ?+ @' R$ O6 S: p+ J
+ f- ]6 @# ^9 |/ o7 e  G0 W  O( H* A
启用定时器计数后,当第一个参考信号上升沿发生时,捕捉定时器计数值,储存于 IC1ReadValue1 中。在第二个上升沿,又捕捉到定时器计数,储存于 IC1ReadValue2 中。在两个连续上升沿之间的时间(IC1ReadValue2 -IC1ReadValue1)表示了参考信号的整个周期。
$ |7 C. M& `/ j+ `% D因为定时器计数器的时钟由系统时钟提供(HSI16 或 MSIRCx),因此与参考信号有关的内部 RC 振荡器生成的真正频率为:
: H$ O# A4 J# ~$ ?测量频率 = (IC1ReadValue2 – IC1ReadValue1) × REFERENCE_FREQUENCY
# t4 `- z% w7 Y4 k& Y# r误差(单位 Hz)为测量频率与典型值之差的绝对值。
; j  r* m0 t  o/ i" Z; K& T  `2 J因此,内部振荡器频率误差表示为:
( N- V0 ]9 m/ W0 L# E频率误差(Hz) = 测量频率 - 系统时钟频率

9 }5 a* Z5 U0 \2 e& r
) R( T" z  N& e; D% k# ~稳定时间和频率过冲/下冲
& g1 P, \: Q2 }2 z/ Q) u写入微调值后,振荡器频率从原始频率变为最终频率。这种频率变化需要一定的时间才能稳定到新的频率值。+ I4 b/ n* j  ]  M0 z4 d  W
HSI16、HSI48 和 MSI 振荡器的稳定时间约为 15 μs(设置最终频率的时间)。
; f9 W. y! I3 U, H. l9 k, i在稳定时间内,频率值可以高于(当新的频率值大于原来的频率值时)或低于(当新的频率值小于原来的频率值时)最终频率。该过冲/下冲值取决于应用于微调值的微调步长大小。最坏情况下的过冲变化(整个范围内的微调变化)约为 2.5%。中等变化约为 1.5%。
) E! l! M  K0 @/ F. F" U校准过程须在微调值变化和振荡器频率读取之间实施等待时间。
% J5 S( l7 H4 U* h. c0 J对每个微调值计算误差之后,算法会决定最优微调值(对应于最接近典型值的频率),编程于微调位中(请参考第 2.3 节 )。

, F$ h. E) j3 L+ u1 y  p7 j; {

6 }  N8 M* L0 j" J5 A# h完整版请查看:附件
7 p2 x" {: }& O( S

2 @# b! n5 x/ l3 o3 H5 R
$ v2 e' G6 w2 p5 L6 ~, _+ G

zh.DM00794778.pdf

下载

670.05 KB, 下载次数: 13

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

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