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

查看: 1031|回复: 2

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

[复制链接]

1347

主题

1124

回帖

0

蝴蝶豆

管理员

最后登录
2020-12-9
发表于 2019-4-3 09:46:31 | 显示全部楼层 |阅读模式
如何校准 STM32L1xx 内部 RC 振荡器

前言

STM32L1xx 微控制器有两个内部 RC 振荡器可做为系统时钟源。它们是 HSI(高速内部)和MSI(多速内部)振荡器。HSI 振荡器的典型频率为 16 MHz。MSI 振荡器为低速、低功耗时钟源。

工作温度对 RC 振荡器的精度有影响。在 25 ℃时,HSI 和 MSI 振荡器的典型精度为 ±1%,但在 -40 到 105 ℃温度范围,精度会降低。

为补偿温度对内部 RC 振荡器精度的影响,STM32L1xx 微控制器的内置一些功能可帮您校准HSI 和 MSI 振荡器及测量 MSI 和 LSI (低速内部)振荡器频率。

本应用笔记侧重如何校准内部 RC 振荡器:HSI 和 MSI。它展示了两个方法:第一个方法基于寻找具有最低误差的频率,第二个方法是寻找具有最大允许误差的频率。两个方法都通过提供精确参考信号的方式实现。

MSI 和 LSI 振荡器的测量都是通过将振荡器连至定时器输入捕获执行。

注 : 1 在本文中, STM32L1xx 指超低功耗大容量、中容量增强型、中容量器件。2 超低功耗中容量器件为 STM32L151xx 和 STM32L152xx 微控制器,其闪存密度范围为 64至 128K 字节。3 超低功耗中容量增强型器件为 STM32L151xx、 STM32L152xx 和 STM32L162xx 微控制器,其闪存密度为 256 K 字节。4 超低功耗大容量器件为 STM32L151xx、STM32L152xx 和 STM32L162xx 微控制器,其闪存密度为 384 K 字节。

1 STM32L1xx 系统时钟

STM32L1xx 微控制器系列有多个时钟源可用于驱动系统时钟:
● 16 MHz 高速内部 (HSI) RC 振荡器时钟
● 1 至 24 MHz 高速外部 (HSE)振荡器时钟
● 65.5 kHz 至 4.2 MHz 多速内部 (MSI) RC 振荡器时钟
● 2 至 24 MHz 锁相环 (PLL),由 HSI 或 HSE 振荡器提供时钟

高速内部 (HSI) RC 振荡器一般频率为 16 MHz,耗电 100 µA。

多速内部(MSI)RC 振荡器提供了七个频率范围:65.5 kHz、131 kHz、262 kHz、524 kHz、1.05 MHz、 2.1 MHz (默认值)和 4.2 MHz。它的设计为工作电流与频率成正比 (请参考产品手册以获得 MSI 耗电与所选频率范围之间关系的更详细信息),因此当 CPU 在低频运行时,内部振荡器耗电可最小化。在从复位重启、从停止唤醒、待机低功耗模式后, MSI 时钟被用作系统时钟。

内部 RC 振荡器 (HSI 和 MSI)提供了低成本时钟源 (不需外部元件),这是其优点。它还具有比外部振荡器更快的启动时间和更低的功耗。可校准 HSI 和 MSI 振荡器以提高其精度。但即使校准后,内部RC振荡器频率也不如外部晶振或陶瓷谐振器的频率精度(几十ppm)高。

注 : 若外部振荡器发生故障,内部 RC 振荡器 (HSI 和 MSI)还可作为备份时钟源 (辅助时钟)使用。

1.png


STM32L1x 器件还有两个次级时钟源 (不能用作系统时钟源):

● 37 kHz 低速内部 (LSI) RC,设计为驱动独立看门狗,也可驱动实时时钟 (RTC)。该 LSI 振荡器无法校准,但可对其测量以评估 (由温度和电压变化引起的)频率偏差

● 32.768 kHz 低速外部晶振 (LSE 晶振),用于驱动实时时钟 (RTC)

2 内部 RC 振荡器校准

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

可微调内部 RC 振荡器的频率,以在更宽的温度和供电范围内达到更好的精度。这就是微调位的作用。

对于 HSI 振荡器,复位后校准值加载于 HSICAL[7:0] 位中。有五个微调位 HSITRIM[4:0] 用于微调。默认微调值为 16。增加 / 降低此微调值会增加 / 降低 HSI 频率。 HSI 振荡器微调步长为 0.5% (在 80 kHz 周围)。

● 将微调值写为 17 至 31 会增加 HSI 频率。

● 将微调值写为 0 至 15 会降低 HSI 频率。

● 将微调值写为 16, HSI 频率会保持为默认值。

下图显示了随校准值变化的 HSI 振荡器行为。HSI 振荡器频率随校准值增加(校准值 = 默认的 HSICAL[7:0] + HSITRIM[4:0]),除了在模 16 处。在这些校准值处,负步进会达到正步进的三倍。

1.png

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

MSICAL[7:0] = 默认的 MSICAL[7:0] + MSITRIM[7:0]

示例:假设默认的 MSI 校准值 MSICAL[7:0] 为 0x80。

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)。

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)。

3. 在 MSITRIM[7:0] 中写入默认校准值 (0x80)会导致校准值 MSICAL[7:0] 等于MSICAL[7:0] = 0x80 + 0x80 = 0x00,因此 MSI 频率会降低 128 步 (最低频率)。

下面的图 3 显示了在范围 6 (4194304 Hz)处 MSI 行为随 MSICAL[7:0] 的变化。

1.png

请注意当两个 MSB 位从 “00” 到 “01”、从 “01” 到 “10”、从 “10” 到 “11” 时的负步进。对六个LSB 的更改会导致每步大约 0.5% 的微调。

2.1 校准原理

校准原理包括:

1. 将 (需要校准的)内部 RC 振荡器设置为系统时钟,

2. 测量每个微调值的内部 RC 振荡器 (HSI 或 MSI)频率,

3. 计算每个微调值的频率误差,

4. 最后,将微调位设置为最优值 (对应于最低频率误差)。

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

下图显示了怎样使用定时器计数个数测量参考信号周期。

...........

想了解更多,请下载原文阅读

回复

使用道具 举报

6

主题

930

回帖

133

蝴蝶豆

金牌会员

最后登录
2020-12-9
发表于 2019-4-3 10:06:53 | 显示全部楼层
收藏
回复 支持 反对

使用道具 举报

0

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
2020-9-3
发表于 2020-8-27 10:59:12 | 显示全部楼层
超级使用资料,正在较准时钟
回复 支持 反对

使用道具 举报

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