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

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

[复制链接]
STMCU小助手 发布时间:2023-2-13 20:15
前言STM32U5 系列微控制器内嵌两个可选为系统时钟源的内部 RC 振荡器。它们是 HSI16(高速内部)和 MSI(多速内部)振荡器,其可驱动两个独立的输出:MSIS(用于系统时钟)和 MSIK(用于某些外设作为内核时钟)。HSI16 振荡器的典型频率为 16MHz。MSI 振荡器为多速低功耗时钟源。2 Q* M5 Y7 [# Q9 E* D) f; Z
STM32U5 系列微控制器(称为 STM32U5 器件)具有三个辅助内部时钟源:! J: r# {( e+ ~2 k
• LSI:32kHz(内部低速)
" s  W8 G' {* f8 ~0 I" Z! H; l• HSI48:48MHz(内部高速),可直接用于 USB、RNG(真随机数发生器)和 SDMMC(SD/SDIO MMC 卡主机接口)。
! g( ^8 O# a4 B6 q, y6 q6 L• SHSI:48MHz(+抖动)内部安全 RC 振荡器,专用于为 SAES 外设提供时钟
6 ]. ]% l& R9 K7 h8 t, M+ l工作温度对 RC 振荡器的精度有影响。在 30°C 时,HSI16 精度为±0.5%,MSI 精度为±0.6%,HSI48 精度为±4%。但在–40°C 至125°C 的温度范围内,精度会降低。为补偿温度对内部 RC 振荡器精度的影响,STM32U5 器件内置一些功能用于校准 HSI16、MSI 和 HSI48 振荡器及测量 LSI 振荡器频率。+ |0 _2 I/ E/ I
当系统中有 32.768kHz 的 LSE(低速外部)时钟源可用时,MSI 振荡器的频率可通过硬件自动微调,从而达到优于±0.25%的精度。这种使用 LSE 进行的自动硬件校准被称为 PLL(锁相环)模式。本应用笔记尚未对 PLL 模式进行介绍,仅侧重于用户微调。2 Q' Z+ T) {) t5 x/ Z1 F
本文档还详细介绍了如何校准 HSI16、MSI 和 HSI48 内部 RC 振荡器,方法如下:; C9 ~6 x; Y, R1 L% A& r' `
• 基于找到具有最小误差的频率的方法
8 U; B) p8 t: `7 n• 基于找到最大允许频率误差的方法
) W+ j+ {9 Y+ J& x# G• 制定一个预先测量值的表然后在其中搜索相应变化的方法( v. O6 L( s: l/ o1 }: X' @& ?
LSI 振荡器的测量是通过将振荡器连接到定时器输入捕获来实现的。+ U2 M- m, h. M& g
本应用笔记随附的 X-CUBE-RC-CALIB 扩展包包含执行这些内部振荡器校准的源代码,以及运行示例所需的所有嵌入式软件模块。4 W9 f+ L# _. M

) \7 Q" u  O+ a# [3 z9 V# E% x7 c

" ?  W+ z- Q! |  [  [1.STM32U5 系统时钟
8 O' X0 h. _) b# z& D7 U% gSTM32U5 器件具有下列时钟源可用于驱动系统时钟:
8 e! ]1 v& i7 [. Y# f• HSI16:16 MHz 高速内部 RC 振荡器时钟
1 b0 V6 }% l5 @, Q8 E1 S  C• HSE:4 至 50 MHz 高速外部振荡器时钟
- Y. Z3 C+ _0 U  m4 E9 d0 j• MSI(MSIS):100 kHz 到 48 MHz 多速内部 RC 振荡器时钟
; d" V: h! o8 G" F• PLL:1 MHz 到 160 MHz 锁相环(PLL),由 HSI16、MSI 或 HSE 振荡器提供时钟
; m+ s" W6 e2 r6 N; p/ `( ]( gHSI16 振荡器的典型频率为 16 MHz,功耗为 150 μA。
2 D* \* S! h# t5 b& Z* dMSI RC 振荡器基于四个内部 RC 振荡器:MSIRC0 = 48 MHz、MSIRC1 = 4 MHz、MSIRC2 = 3.072 MHz、MSIRC4 = 400 kHz。每个 MSIRCx 振荡器具有四个分频器:/1、/2、/3 和/4。MSI 共提供了 16 个频率范围,可选择用于两种输出:MSIS(用于系统时钟)和 MSIK(用于外设内核时钟)。MSI 的设计为工作电流与频率成正比(请参考产品手册以获得 MSI 功耗与所选频率范围之间关系的更详细信息),当 CPU 在低频运行时,可最小化内部振荡器功耗。在从复位重启或待机、关断低功耗模式唤醒后,MSIS 时钟被用作系统时钟。从停机模式唤醒后,可选择 MSI 时钟而不是 HSI16 作为系统时钟。9 T* L1 w$ S' I
HSI48 时钟信号由内部 48 MHz RC 振荡器生成,可直接用于 USB、RNG 和 SDMMC。, ~7 ^6 \0 J; Z9 p
内部 RC 振荡器(HSI16、MSI 和 HSI48)提供了一个低成本时钟源(无需外部元件)。它们还具有比外部振荡器更快的启动时间和更低的功耗。可校准 HSI16、MSI 和 HSI48 振荡器以提高其精度。但即使校准后,内部 RC 振荡器频率精度也不如外部晶振或陶瓷谐振器的频率精度(几十 ppm)高。
" b% g3 M3 _. `) Z5 n1 ^注: 若外部振荡器发生故障,则 MSI 内部 RC 振荡器还可作为备份时钟源(辅助时钟)使用。+ d' ?" P+ O! u6 ]# T

. z1 }: g# d1 _; m, G7 o4 Z! s
9 b0 I& \* M5 `1 g
0VS]2]XEWFCVPT2%)AEFH@I.png ; a; R9 G5 R* Z( k

6 Y. ]3 b5 h( o( ], l8 I

' |$ y% h. }* v+ O- Q. D& {系统时钟STM32U5 器件还嵌入了以下次级时钟源(不能用作系统时钟):+ Z3 X  f- O4 ?! V& t" |9 k! Q* v
• LSI:32kHz 低速内部 RC,可在停机和待机模式下保持运行用于 IDWG(独立看门狗)、RTC 和 LCD。LSI振荡器无法校准,但可通过测量来评估任何频率偏差(由于温度和电压变化)。
1 f: G4 E" Y& U0 h. [• LSE 晶振:32.768 kHz 低速外部晶振 RC,可选地驱动 RTC(实时时钟)% D* ]. ?$ `  p# V
• HSI48:48 MHz 高速内部 RC,设计用于通过特制 CRS(时钟恢复系统)电路为 USB 外设提供高精度时钟。它还可驱动 RNG 和 SDMMC。
* W5 o& X4 K: W. n# a1 i• MSIK:多速内部 RC 振荡器时钟,用于外设内核时钟(源自 MSIRCx 振荡器)
' R' B' g1 y3 y) r• SHSI:48 MHz 内部 RC 振荡器,专为 SAES 外设提供时钟
3 i% p( K4 s" S. ?9 @7 M5 O/ w6 w1 s8 _4 k( t5 {

6 D. H1 ~1 D6 X: p5 j! M2 内部 RC 振荡器校准
/ d8 Z7 x# z/ h5 u2 n6 r由于生产过程的不同,每个器件的内部 RC 振荡器的频率都可能不同。因此,MSI 和 HSI16 RC 振荡器由意法半导体在 TA = 30 °C 时进行工厂校准。复位后,工厂校准值自动加载到内部校准位中。; Z3 ^$ O0 o; ~2 k! `
可微调内部 RC 振荡器的频率,以在更宽的温度和供电范围内达到更好的精度。这就是微调位的作用。对于 HSI16 振荡器,复位后校准值加载于 HSICAL[11:0]中。使用五个微调位 HSITRIM[4:0]进行微调。默认微调值为 16。增加/降低此微调值会增加/降低 HSI16 频率。HSI16 振荡器微调步长为 0.18%(约 29 kHz),具体如下:
" F# @" {- i/ r, m: F9 _( J• 将微调值写为 17 至 31 会增加 HSI16 频率。( u3 m4 A# j% w% k2 n
• 将微调值写为 0 至 15 会降低 HSI16 频率。/ F" X( I9 V4 }3 W+ s& F  d. {
• 将微调值写为 16,HSI16 频率会保持为默认值。4 D# ^, k  i& j% F6 D
下图显示了随校准值变化的 HSI16 振荡器行为。HSI16 振荡器频率随校准值增加(校准值 = 默认的 HSICAL[11:0]+ HSITRIM[4:0])。7 Q3 P$ X' S. B

& ]& |  _9 B' O% Y4 \2 N

! a& l3 g0 X1 i" S) c0 J9 c0 H# _ }HFNOS~DI4BT()X$Q7(IXBR.png
8 e/ Z8 j4 Q( L
" l3 N  X' z; U1 L% }& w: q, {+ V
0 Y' y: \% W- s
对于 MSIRCx 振荡器(x = 0..3),复位后校准值加载于 MSICALx[4:0]位中。五个微调位 MSITRIM[4:0]使微调范围更宽。校准基于将默认的 MSICALx[4:0](复位值)加上 MSITRIMx[4:0]。
5 a4 g/ D& ]) k结果存储在 MSICALx[4:0] = 默认 MSICALx[4:0] + MSITRIMx[4:0]中。5 w  z  ]6 L4 I+ l3 K; f8 j

. ]* `3 d. D. k! k" g

4 A. Q) S- H( D+ ]- N示例
. r0 [% ]# `4 E0 [! }假设默认的 MSI 校准值 MSICALx[4:0]为 0x10:
. j% o" Z7 U& r! c2 U& b1. 将 0x01 和 0x0F 之间的值写入 MSITRIM[4:0],会使校准值 MSICALx[4:0]处于 MSICALx[4:0] = 0x10 + 0x01= 0x11 到 MSICALx[4:0] = 0x10 + 0x0F = 0x1F 的范围内。这些结果大于 0x10(默认的 MSICALx[4:0]值),因此 MSIRCx 频率增加 1 步(0x11 - 0x10)至 15 步(0x1F - 0x10)。# Z5 M: a5 }6 |+ E* i# A0 O4 d3 y
2. 将 0x11 和 0x1F 之间的值写入 MSITRIM[4:0],会使校准值 MSICALx[4:0]处于 MSICALx[4:0] = 0x10 + 0x11 =0x01 到 MSICALx[4:0] = 0x10 + 0x1F = 0x0F 的范围内。
, {: X5 a0 K9 }2 P' t8 A这些结果小于 0x10(默认的 MSICALx[4:0]值),因此 MSIRCx 频率降低 1 步(0x01)至 15 步(0x0F)。/ U9 d2 G2 @& w! P) T- j
3. 在 MSITRIM[4:0]中写入默认校准值 0x10 会导致校准值 MSICALx[4:0]等于MSICALx[4:0] = 0x10 + 0x10 = 0x00,因此 MSIRCx 频率会降低 16 步(最低频率)。
( e! ]6 D4 V, U) ~6 [
! l7 n, Y- A" J) Y, F

6 v! M* z- t* B  B1 v) o下图显示了 MSIRCx 相比于 MSICALx[4:0]在 4MHz 时的行为。$ x9 R, r' N8 t- }0 I. t6 l
  Y& c6 Q" }0 f% \8 L1 g

4 G  d5 c5 D$ v7 R O9[~_B9XZ_1V7K_YLFT5}DY.png
  P/ @5 u5 v! L2 l9 Y5 n* A7 H# x; ~1 ?, d

9 c0 Y' V/ t* O8 h对于 HSI48 振荡器,复位后校准值加载于 HSI48CAL[8:0]中。使用六个微调位 TRIM[6:0](在 CRS_CR 寄存器中)进行微调。默认微调值为 64。增加/降低此微调值会增加/降低 HSI48 频率。HSI48 振荡器微调步长为 0.12%(约 57 kHz),具体如下:: q. |' r# E! _. s
• 将微调值写为 65 至 127 会增加 HSI48 频率。7 u/ Y. ]% V  J9 J+ R8 r$ K
• 将微调值写为 0 至 63 会降低 HSI48 频率。2 T0 [# ~7 ]4 X+ C" v. W& l) J
• 将微调值写为 64,HSI48 频率会保持为默认值。
3 ?4 a) S4 E9 Z3 Y下图显示了随校准值变化的 HSI48 振荡器行为。HSI48 振荡器频率随校准值增加(校准值 = 默认的 HSI48CAL[8:0]+ TRIM[6:0])。- j0 i" W* I% t
* n& Q* {# J' m+ i+ x1 l
, ?6 ^6 I* w3 d
1_0Z)S_(X1[92DH3Y)9$D@Y.png
) u# _1 e5 l( {1 e) }& {* |! O4 j6 I

# O1 I) d0 d; [% p/ P3 K" {, i2.1 校准原理" i2 U+ a6 W* q% U
校准原理包括以下步骤:
' t/ t! O$ Y: I0 V3 ]3 o1. 将(需要校准的)内部 RC 振荡器设置为系统时钟。: o3 z! t1 u) o* g2 N+ H+ t
2. 测量每个微调值的内部 RC 振荡器(HSI16 或 MSIRCx)频率。
( r. a5 B4 n2 E3. 计算每个微调值的频率误差。5 Y! G' {0 }0 J, K8 t+ ]* C: |
4. 将微调位设置为最优值(对应于最低频率误差)。' w# ?7 X' F( k* t
内部振荡器频率并非直接测量,而是使用定时器计算时钟脉冲个数,与典型值比较。为此,必须有一个非常精确的参考频率,比如由外部 32.768 kHz 晶振或 50 Hz/60 Hz 电源频率(请参考第 2.2.2 节 用例 2:其他源用作参考频率)。
6 J( t* @, O$ L7 n下图显示了怎样使用定时器计数个数测量参考信号周期。& F$ @$ p' L; F% r: G! d

) y/ G/ c! P+ k/ R
5 [6 ?, B. _6 j% U9 ?
3DJCKI9M]8E8F9TZQ@X0W59.png
' w% P3 e- N7 K- }; z7 i
' e- v( w8 W9 d% a. u

& d. ^2 @& [6 U6 S; K+ J$ O( x启用定时器计数后,当第一个参考信号上升沿发生时,捕捉定时器计数值,储存于 IC1ReadValue1 中。在第二个上升沿,又捕捉到定时器计数,储存于 IC1ReadValue2 中。在两个连续上升沿之间的时间(IC1ReadValue2 -IC1ReadValue1)表示了参考信号的整个周期。- W) y: c" _9 c4 a) q' B
因为定时器计数器的时钟由系统时钟提供(HSI16 或 MSIRCx),因此与参考信号有关的内部 RC 振荡器生成的真正频率为:
7 X8 D" H- U4 t: S5 [; @测量频率 = (IC1ReadValue2 – IC1ReadValue1) × REFERENCE_FREQUENCY误差(单位 Hz)为测量频率与典型值之差的绝对值。
6 p7 D5 k5 m! s9 \. |因此,内部振荡器频率误差表示为:* h1 H; @/ V( p" ^6 i
频率误差(Hz) = 测量频率 - 系统时钟频率
, C7 q+ h+ X4 E( w. l9 ~
! E9 M# \  F% y" s1 l$ R* B

/ v; B( I; y" ?1 i( ]6 [' L3 J7 M完整版请查看:附件 如何在 STM32U5 系列上校准内部 RC 振荡器.pdf (642.41 KB, 下载次数: 0)
赞 收藏 评论0 发布时间:2023-2-13 20:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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