【复旦微FM33 MCU 外设开发指南】系统篇——时钟

前言

本系列基于复旦微FM33系列单片机的DataSheet编写,旨在提供一些开发指南。

本文章及本系列其他文章将持续更新,本系列其它文章请跳转↓↓↓
【复旦微FM33 MCU 外设开发指南】总集篇

本文章最后更新日期:2024/08/04

文章目录

  • 前言
  • 时钟源
    • [1. 高频RC振荡器RCHF(RC High Frequency)](#1. 高频RC振荡器RCHF(RC High Frequency))
    • [2. 中频RC振荡器RCMF(RC Middle Frequency)](#2. 中频RC振荡器RCMF(RC Middle Frequency))
    • [3. 低功耗RC振荡器LPOSC(Low Power OSC)](#3. 低功耗RC振荡器LPOSC(Low Power OSC))
    • [4. 低频晶体振荡器XTLF(Crystal Low Frequency)](#4. 低频晶体振荡器XTLF(Crystal Low Frequency))
    • [5. 高频晶体振荡器XTHF(Crystal High Frequency)](#5. 高频晶体振荡器XTHF(Crystal High Frequency))
  • 重点:注意事项
    • [1. 时钟校准(RCHF/RCMF/LPOSC)](#1. 时钟校准(RCHF/RCMF/LPOSC))
    • [2. 稳定性(RCHF/RCMF/LPOSC/XTLF/XTHF)](#2. 稳定性(RCHF/RCMF/LPOSC/XTLF/XTHF))
    • [3. 起振时间](#3. 起振时间)
    • [4. FLASH读写等待周期](#4. FLASH读写等待周期)
    • [5. 外设时钟频率](#5. 外设时钟频率)
  • 应用Tips
    • [1. 快速的初始化](#1. 快速的初始化)
  • 时钟相关的寄存器
    • [1. 时钟管理单元](#1. 时钟管理单元)
    • [2. 总线与存储单元](#2. 总线与存储单元)

本文对应FM33LC0xx DataSheet 第11章------时钟管理单元(CMU) ,部分参数来源于 第3章------电参数

时钟源

系统所有用到的时钟都是以下时钟源产生的。

1. 高频RC振荡器RCHF(RC High Frequency)

RCHF可选的时钟频率为8MHz/16MHz/24MHz,全温区最大偏差±1%。

RCHF在上电后即为8MHz的时钟频率,用于MCU完成初始化操作。

2. 中频RC振荡器RCMF(RC Middle Frequency)

RCMF的时钟频率为4MHz,全温区最大偏差±3%。

3. 低功耗RC振荡器LPOSC(Low Power OSC)

LPOSC的时钟频率为32kHz,在-40℃最大偏差-6%,在85℃偏差最大4%。

4. 低频晶体振荡器XTLF(Crystal Low Frequency)

对于英文缩写,我认为应该是因为XT和Crystal的发音很像,所以就用XT代替Crystal(晶振)了。

XTLF只有在有外接晶振的情况下才有时钟,其性能应该就是取决于外部晶振。

XTLF具有停振检测电路,详见DataSheet第12章------停振检测(FDET)

5. 高频晶体振荡器XTHF(Crystal High Frequency)

XTHF只有在有外接晶振的情况下才有时钟,其性能应该就是取决于外部晶振。

XTHF具有停振检测电路,详见DataSheet第12章------停振检测(FDET)

重点:注意事项

1. 时钟校准(RCHF/RCMF/LPOSC)

由于每颗芯片的差异,实际的时钟频率和设定的时钟频率有一定的差异,向调校寄存器中写入校准值可以在一定范围内调整时钟频率。
校准值的读取

MCU在出厂前,测试仪会测试MCU的时钟频率,并将校准值写入Flash中供用户读取。

需要注意32bit的校验值中,高16位和低16位分别保存校准值和反码校验字,在使用前应做正反码校验。

校准值的写入

由于RCHF上电即为8MHz的频率,MCU会自动读取8MHz的时钟校准值并写入寄存器中。

但如果切换其它频率的时钟,就需要我们自己读取相应频率的时钟校准值,并写入调校寄存器中了。

(显然,当你从16MHz的时钟频率切换到8MHz时,也要重新读取8MHz的时钟校准值写入)

2. 稳定性(RCHF/RCMF/LPOSC/XTLF/XTHF)

以RCHF为例,DataSheet上写明,RCHF可以最高配置为24MHz

(其实RCHF应该可以配置为更高的时钟频率,但Flash中没有保存其校准值)

我们可以将高频率的RCHF作为系统时钟并提供给APB总线上挂载的各种外设

使用内置RC振荡器应该注意:

1.更高频率的RCHF的稳定性将变差。如常温下8MHz的RCHF频率偏差为0.16MHz,而24MHz的RCHF频率偏差为0.48MHz

(即偏差的百分比固定,频率越高偏差越大)

2.高频率的RCHF高低温性能将变差。8MHz的RCHF全温区偏差为±1%,而24MHz的RC HF全温区偏差为±3%

3.相比RCMF,RCHF有更好的全温区性能。RCHF为±1%,而RCMF为±3%

显然在大部分的应用场景中可能不差这一点时钟偏差,但系统时钟的偏差将直接影响APB总线时钟,如果你是用定时器高精度的采集脉冲信号宽度的话,那就需要注意这些方面的影响了。一旦MCU放入量产产品中,其在各种工况下的稳定性就十分重要了。

因此在系统时钟要求频率很高,或稳定性要求高的时候:

1.使用内置时钟,用8MHz的RCHF,分频给PLL并等待其锁定后,将PLL作为系统时钟(PLL的高低温稳定性更好)。

2.使用外接晶振,外接晶振的高低温稳定性更好,但要注意其起振时间慢,可能需要200ms。

3. 起振时间

外置晶振

前面提到外置晶振其稳定性更好,但晶振的起振时间较长,实测下来要200ms以上。

起振时间和晶体振荡电路的振荡强度有关,FM33提供了XTHF的振荡强度配置寄存器RCC_XTHFCR

但注意不是振荡强度越强,起振时间越短的,在振荡强度和晶振匹配时,起振时间是最短的。

RC振荡器

文档没有写RCHF的起振时间(有可能是因为上电后RCHF就自动启动,所以这个参数没什么意义?)

RCMF的起振时间为10us。

LPOSC的起振时间为50------100us。

PLL

前面已经讲过在高频的系统时钟应用中,应该使用PLL。

PLL接收到时钟输入后,是需要等待一段时间才能建立稳定的时钟输出的,DataSheet典型值为65us。

因此软件必须在配置和启动PLL后,等待PLL锁定后,才可以将PLL配置为系统时钟。

如果没有等待锁定就配置为系统时钟,就很容易产生一些莫名其妙的错误
1.在启动PLL和切换系统时钟中间的语句执行时间较长,长于锁定时间,那么就没什么问题
2. 把初始化阶段的系统时钟频率变高,导致同样的程序执行之间变短,短与锁定时间,那很有可能进入硬件错误中断了

4. FLASH读写等待周期

在系统时钟频率很高时,必须按照手册要求配置FLS_RDCR寄存器配置FLASH读写等待周期。

如果没有配置正确的FLASH读写等待周期,就很容易产生一些莫名其妙的错误
1.程序在这块板子上好好的,换一块板子跑不起来了
2.程序本来好好的,填了几句话崩掉了,断点还打不上

5. 外设时钟频率

各个外设有其上限的工作频率。以SPI为例,其最高工作频率为16MHz。

SPI外设挂载在APB总线上,而APB时钟来源于系统时钟。

例:当系统时钟为64MHz时:

1.APBCLK使用不分频的系统时钟,就必须将SPI的工作时钟预分频为4分频或更高分频。

2.APBCLK使用4分频的系统时钟,SPI工作时钟可以不分频或配置为更高的预分频。

应用Tips

1. 快速的初始化

在MCU上电后,并不是马上进入main()函数的。

启动文件告诉我们,系统上电复位后,在main函数之前先取SystemInit()函数的指针并跳转。

因此对一些要求初始化时间很短的场合,可以在SystemInit()函数中将默认的8MHz RCHF系统时钟更改为更高频率的时钟源。

时钟相关的寄存器

1. 时钟管理单元

2. 总线与存储单元

这里是配置Flash的读等待周期的寄存器。

相关推荐
LN花开富贵32 分钟前
stm32g431rbt6芯片中VREF+是什么?在电路中怎么设计?
笔记·stm32·单片机·嵌入式硬件·学习
qq210846295342 分钟前
【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目
笔记·stm32·嵌入式硬件
CV金科1 小时前
蓝桥杯—STM32G431RBT6按键的多方式使用(包含软件消抖方法精讲)从原理层面到实际应用(一)
stm32·单片机·嵌入式硬件·蓝桥杯
2021.091 小时前
五、CAN总线
嵌入式硬件
luckyluckypolar1 小时前
STM32——输入捕获
stm32·单片机·嵌入式硬件·物联网
hong1616881 小时前
嵌入式硬件基础知识
嵌入式硬件
hai405871 小时前
单片机(Microcontroller)原理及应用
单片机·嵌入式硬件
jun7788952 小时前
嵌入式硬件基础知识
嵌入式硬件
Projectsauron3 小时前
STM32 芯片启动过程
stm32·单片机·芯片启动过程
CDialog3 小时前
arduino ide开发esp32-wroom-32E
单片机·嵌入式硬件