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

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

[复制链接]
STMCU小助手 发布时间:2022-11-10 17:00
前言* |- D" i: l% Z6 t6 j2 X
STM32U5 系列微控制器内嵌两个可选为系统时钟源的内部 RC 振荡器。它们是 HSI16(高速内部)和 MSI(多速内部)振荡器,其可驱动两个独立的输出:MSIS(用于系统时钟)和 MSIK(用于某些外设作为内核时钟)。HSI16 振荡器的典型频率为 16MHz。MSI 振荡器为多速低功耗时钟源。
2 t- W! C+ B3 \0 T) P6 e3 `STM32U5 系列微控制器(称为 STM32U5 器件)具有三个辅助内部时钟源:  `$ P! v$ k6 v( ?
• LSI:32kHz(内部低速)
: ?) g% F( g5 O2 v4 B• HSI48:48MHz(内部高速),可直接用于 USB、RNG(真随机数发生器)和 SDMMC(SD/SDIO MMC 卡主机接口)。
, o2 A) b% y- ?! i( [: k! v, o• SHSI:48MHz(+抖动)内部安全 RC 振荡器,专用于为 SAES 外设提供时钟! M' h8 c: c- j8 K6 d$ A$ V  u
工作温度对 RC 振荡器的精度有影响。在 30°C 时,HSI16 精度为±0.5%,MSI 精度为±0.6%,HSI48 精度为±4%。但在–40°C 至125°C 的温度范围内,精度会降低。为补偿温度对内部 RC 振荡器精度的影响,STM32U5 器件内置一些功能用于校准 HSI16、
( G& i6 z& a5 b" _MSI 和 HSI48 振荡器及测量 LSI 振荡器频率。0 ~8 D6 b) v, x8 E& Z) V
当系统中有 32.768kHz 的 LSE(低速外部)时钟源可用时,MSI 振荡器的频率可通过硬件自动微调,从而达到优于±0.25%的精度。这种使用 LSE 进行的自动硬件校准被称为 PLL(锁相环)模式。本应用笔记尚未对 PLL 模式进行介绍,仅侧重于用户微调。6 w# y. G1 G) _+ Z
本文档还详细介绍了如何校准 HSI16、MSI 和 HSI48 内部 RC 振荡器,方法如下:
2 _# l; C' x0 Y' P5 l9 D- y0 y• 基于找到具有最小误差的频率的方法
; N" }; h; b9 |- o: ]• 基于找到最大允许频率误差的方法
7 [- z( w* j+ m• 制定一个预先测量值的表然后在其中搜索相应变化的方法
1 m  D7 L9 b1 |6 q6 `  [7 TLSI 振荡器的测量是通过将振荡器连接到定时器输入捕获来实现的。+ p! d0 I8 R1 G
本应用笔记随附的 X-CUBE-RC-CALIB 扩展包包含执行这些内部振荡器校准的源代码,以及运行示例所需的所有嵌入式软件模块。3 |& O0 Z2 ]& s: w# w8 X8 _

; O- E* ~: B5 ^: J1 STM32U5 系统时钟
% r& Q6 f; G" p6 @" `! F# tSTM32U5 器件具有下列时钟源可用于驱动系统时钟:
- G( o6 t8 m4 \• HSI16:16 MHz 高速内部 RC 振荡器时钟5 h# M5 h4 U& x0 U1 c4 W1 {
• HSE:4 至 50 MHz 高速外部振荡器时钟
: x+ ]. ^4 D$ {; [• MSI(MSIS):100 kHz 到 48 MHz 多速内部 RC 振荡器时钟: z+ D7 L2 V) w- z  J0 G. F& O; R
• PLL:1 MHz 到 160 MHz 锁相环(PLL),由 HSI16、MSI 或 HSE 振荡器提供时钟
, [, e# E" _3 n" J% Z0 R8 X% UHSI16 振荡器的典型频率为 16 MHz,功耗为 150 μA。
+ S% x0 q, [% c7 hMSI RC 振荡器基于四个内部 RC 振荡器:MSIRC0 = 48 MHz、MSIRC1 = 4 MHz、MSIRC2 = 3.072 MHz、MSIRC4 = 400 kHz。每个 MSIRCx 振荡器具有四个分频器:/1、/2、/3 和/4。MSI 共提供了 16 个频率范围,可选1 C6 ]+ `5 `. S
择用于两种输出:MSIS(用于系统时钟)和 MSIK(用于外设内核时钟)。MSI 的设计为工作电流与频率成正比8 u7 l/ j. q! l  c& f
(请参考产品手册以获得 MSI 功耗与所选频率范围之间关系的更详细信息),当 CPU 在低频运行时,可最小化内
1 h, o- l$ Z0 W: H& i, R6 z部振荡器功耗。在从复位重启或待机、关断低功耗模式唤醒后,MSIS 时钟被用作系统时钟。从停机模式唤醒后,$ f- y5 s" q1 T1 M* R6 g& ?
可选择 MSI 时钟而不是 HSI16 作为系统时钟。
9 b1 c9 E$ v* H1 H: O) x% ~4 e& Q* yHSI48 时钟信号由内部 48 MHz RC 振荡器生成,可直接用于 USB、RNG 和 SDMMC。. E0 B, f3 r" E1 _4 _8 v
内部 RC 振荡器(HSI16、MSI 和 HSI48)提供了一个低成本时钟源(无需外部元件)。它们还具有比外部振荡器) u0 K$ a! K1 m% N1 F- J
更快的启动时间和更低的功耗。可校准 HSI16、MSI 和 HSI48 振荡器以提高其精度。但即使校准后,内部 RC 振荡
* c) w. u' b+ i! B% M$ h# A# @器频率精度也不如外部晶振或陶瓷谐振器的频率精度(几十 ppm)高。
4 Y/ S: B7 E6 E% E& i/ B注: 若外部振荡器发生故障,则 MSI 内部 RC 振荡器还可作为备份时钟源(辅助时钟)使用。
, R/ X+ p" _' r9 Q

9 Q9 C. t9 o; m* I1 t7 Y% O F]ISM5C7[{OWS1]Q@~BW7CB.png
4 k) N) G& Q: \/ p1 G9 K
( E& U' e  v9 O4 M0 F# n' C8 k; HSTM32U5 器件还嵌入了以下次级时钟源(不能用作系统时钟):% F  O! D) j: z8 y
• LSI:32kHz 低速内部 RC,可在停机和待机模式下保持运行用于 IDWG(独立看门狗)、RTC 和 LCD。LSI振荡器无法校准,但可通过测量来评估任何频率偏差(由于温度和电压变化)。
$ _( {9 [( d" r7 M* g• LSE 晶振:32.768 kHz 低速外部晶振 RC,可选地驱动 RTC(实时时钟)! d$ I9 b6 S4 H5 g
• HSI48:48 MHz 高速内部 RC,设计用于通过特制 CRS(时钟恢复系统)电路为 USB 外设提供高精度时钟。它还可驱动 RNG 和 SDMMC。
& i2 U- @9 ~1 ?" ]2 F) A7 ]• MSIK:多速内部 RC 振荡器时钟,用于外设内核时钟(源自 MSIRCx 振荡器)
* ^0 s7 g$ L  g, {  t2 p3 c6 ~$ U5 o( M• SHSI:48 MHz 内部 RC 振荡器,专为 SAES 外设提供时钟
8 z- a9 [; z3 X; }3 K5 [1 E& q9 j: V/ H& c* B5 H
2 内部 RC 振荡器校准
* W+ K6 i0 M8 S! H5 m- s' ~: P由于生产过程的不同,每个器件的内部 RC 振荡器的频率都可能不同。因此,MSI 和 HSI16 RC 振荡器由意法半导体在 TA = 30 °C 时进行工厂校准。复位后,工厂校准值自动加载到内部校准位中。; F" L3 I7 h2 i" O
可微调内部 RC 振荡器的频率,以在更宽的温度和供电范围内达到更好的精度。这就是微调位的作用。
+ U/ x& d4 p( }- w# O9 T* {对于 HSI16 振荡器,复位后校准值加载于 HSICAL[11:0]中。使用五个微调位 HSITRIM[4:0]进行微调。默认微调值为 16。增加/降低此微调值会增加/降低 HSI16 频率。HSI16 振荡器微调步长为 0.18%(约 29 kHz),具体如下:' L' [, I. v# \: b3 i* ~0 m
• 将微调值写为 17 至 31 会增加 HSI16 频率。4 O7 m/ @0 b' P2 a0 ^( [
• 将微调值写为 0 至 15 会降低 HSI16 频率。
& @- C3 w! ~" m3 O& |" y• 将微调值写为 16,HSI16 频率会保持为默认值。. ?; o7 w+ K# t/ J( y7 u' r7 l
下图显示了随校准值变化的 HSI16 振荡器行为。HSI16 振荡器频率随校准值增加(校准值 = 默认的 HSICAL[11:0]+ HSITRIM[4:0])。

# J$ a, y1 l; X' _  F& ^  i  i+ ?7 [+ @( S" G$ V! k& e- V

6 }1 T9 L' Y) {3 G5 r TC[XX_{WYY~K9N19CEP6]IG.png & \. w8 u: `5 V9 m4 S
4 a0 O" I2 b, q8 Y
对于 MSIRCx 振荡器(x = 0..3),复位后校准值加载于 MSICALx[4:0]位中。五个微调位 MSITRIM[4:0]使微调范围更宽。校准基于将默认的 MSICALx[4:0](复位值)加上 MSITRIMx[4:0]。
8 V( N( v9 [+ b) L结果存储在 MSICALx[4:0] = 默认 MSICALx[4:0] + MSITRIMx[4:0]中。

7 t$ I  H+ _" i9 Y$ ~0 V
" I  D, W1 D& V& O5 [示例& F3 v: a4 t% `8 _
假设默认的 MSI 校准值 MSICALx[4:0]为 0x10:  d; d4 b1 i0 R: C" f
1. 将 0x01 和 0x0F 之间的值写入 MSITRIM[4:0],会使校准值 MSICALx[4:0]处于 MSICALx[4:0] = 0x10 + 0x01= 0x11 到 MSICALx[4:0] = 0x10 + 0x0F = 0x1F 的范围内。
0 V, z7 {7 r" }* z% C这些结果大于 0x10(默认的 MSICALx[4:0]值),因此 MSIRCx 频率增加 1 步(0x11 - 0x10)至 15 步(0x1F - 0x10)。# m3 X% j* u6 m9 M8 X' M
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)。
1 A+ V9 e4 g0 ?  p. R2 o3. 在 MSITRIM[4:0]中写入默认校准值 0x10 会导致校准值 MSICALx[4:0]等于MSICALx[4:0] = 0x10 + 0x10 = 0x00,因此 MSIRCx 频率会降低 16 步(最低频率)。. K9 U: m  ?! l; m
0 H1 @1 L* B# I& `
下图显示了 MSIRCx 相比于 MSICALx[4:0]在 4MHz 时的行为。

6 ~7 [9 d/ A3 _( u  m: j# Q$ X0 Z4 ?- s% t" ~
8 Q. u4 ?' A4 F  c  U) C% i* ?
SU09BVF9X8V((MJ)[13~YLN.png " g: S' F$ e0 j

2 I# x9 ^5 c$ X3 t$ h& O8 r对于 HSI48 振荡器,复位后校准值加载于 HSI48CAL[8:0]中。使用六个微调位 TRIM[6:0](在 CRS_CR 寄存器中)进行微调。默认微调值为 64。增加/降低此微调值会增加/降低 HSI48 频率。* T6 d+ F5 [: I4 F* ~3 l& x
HSI48 振荡器微调步长为 0.12%(约 57 kHz),具体如下:' g% P0 A7 T$ V3 n" O3 b
• 将微调值写为 65 至 127 会增加 HSI48 频率。
9 v  \9 U' O* q• 将微调值写为 0 至 63 会降低 HSI48 频率。
# X, ]6 |9 A8 I/ t• 将微调值写为 64,HSI48 频率会保持为默认值。
# U+ B" U, C3 z3 k3 l下图显示了随校准值变化的 HSI48 振荡器行为。HSI48 振荡器频率随校准值增加(校准值 = 默认的 HSI48CAL[8:0]
/ v3 R/ w$ [. k4 r5 J& j7 h+ TRIM[6:0])。

2 M: q& j( K+ `5 f' Z0 f3 Z! V+ t5 ^3 Y

; J1 \8 @: X4 Y" W- t/ m )ZTP]JEC_~1VF7W{KZ1YL.png
* o5 @! L: \4 L( ^2 M
$ ~& _! N6 S# v- ?" p! S
* y  c, u7 l0 W$ C3 x9 }, c6 ?2.1 校准原理
5 _! {- R& I9 r  v校准原理包括以下步骤:* Y: B1 w& }* F3 N' u
1. 将(需要校准的)内部 RC 振荡器设置为系统时钟。3 J8 ]% _, b+ S5 g7 E4 `0 V  u" u- B
2. 测量每个微调值的内部 RC 振荡器(HSI16 或 MSIRCx)频率。
+ W2 h. b* Q. p0 V: s3. 计算每个微调值的频率误差。
* x. s( g# [% }1 k- p. i4. 将微调位设置为最优值(对应于最低频率误差)。
7 e2 S+ z  o# A7 N内部振荡器频率并非直接测量,而是使用定时器计算时钟脉冲个数,与典型值比较。为此,必须有一个非常精确的参考频率,比如由外部 32.768 kHz 晶振或 50 Hz/60 Hz 电源频率(请参考第 2.2.2 节 用例 2:其他源用作参考频率)。
. \1 O( [4 x! U2 \& Q/ G# T; `8 x, W下图显示了怎样使用定时器计数个数测量参考信号周期。

6 _8 ?. U% |( @5 Q  V) Z: {4 ?% d8 B3 w3 i; j

+ K' L& }/ C/ g6 C$ m AR$}F`0(G~NRM_2}$W5CS$V.png
: V6 s$ ]1 [$ [/ U$ d( V) F) v8 k" ^/ b9 f9 M5 o2 d
% T4 b! a5 K$ v1 }- s
启用定时器计数后,当第一个参考信号上升沿发生时,捕捉定时器计数值,储存于 IC1ReadValue1 中。在第二个上升沿,又捕捉到定时器计数,储存于 IC1ReadValue2 中。在两个连续上升沿之间的时间(IC1ReadValue2 -IC1ReadValue1)表示了参考信号的整个周期。
+ E! k* w( {) X+ j; T0 o) l因为定时器计数器的时钟由系统时钟提供(HSI16 或 MSIRCx),因此与参考信号有关的内部 RC 振荡器生成的真正频率为:
2 Q0 G7 C% W( `9 H测量频率 = (IC1ReadValue2 – IC1ReadValue1) × REFERENCE_FREQUENCY3 M2 \6 l$ L% t! I+ _7 _
误差(单位 Hz)为测量频率与典型值之差的绝对值。/ {: i( K! C1 ]0 \' ?! m
因此,内部振荡器频率误差表示为:
, ?8 i& T) B2 `/ \, i2 f# ~2 I- {, W频率误差(Hz) = 测量频率 - 系统时钟频率

% p" M6 `+ q8 `6 N) H, d
$ @& y. w2 L# j3 K稳定时间和频率过冲/下冲
6 C2 o/ K% k: N& M写入微调值后,振荡器频率从原始频率变为最终频率。这种频率变化需要一定的时间才能稳定到新的频率值。3 D. j' }8 e% e5 ~7 R( _0 {
HSI16、HSI48 和 MSI 振荡器的稳定时间约为 15 μs(设置最终频率的时间)。
( p) w. Y* r2 Z8 Y在稳定时间内,频率值可以高于(当新的频率值大于原来的频率值时)或低于(当新的频率值小于原来的频率值时)最终频率。该过冲/下冲值取决于应用于微调值的微调步长大小。最坏情况下的过冲变化(整个范围内的微调变化)约为 2.5%。中等变化约为 1.5%。: R' p7 w8 }- ]- K
校准过程须在微调值变化和振荡器频率读取之间实施等待时间。/ ]  ~$ e3 Q5 ^5 g
对每个微调值计算误差之后,算法会决定最优微调值(对应于最接近典型值的频率),编程于微调位中(请参考第 2.3 节 )。

+ D4 ]  M) }) Y" C& O% u! S
) j" W/ r6 U6 ]% w$ m+ j$ l

6 ^% b" U. R0 ]1 z$ V: D完整版请查看:附件
% Z# |5 M3 f- }2 ]# }8 H, i

+ D4 {: V& `, \0 H: b3 w' R
' }- c; |! u6 h' c+ d* r) 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 手机版