当前位置: 首页 > news >正文

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

在这里插入图片描述

前言

本系列基于复旦微FM33系列单片机的DataSheet编写,旨在提供一些开发指南。
本文章及本系列其他文章将持续更新,本系列其它文章请跳转↓↓↓
【复旦微FM33 MCU 外设开发指南】总集篇

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

文章目录

  • 前言
  • 时钟源
    • 1. 高频RC振荡器RCHF(RC High Frequency)
    • 2. 中频RC振荡器RCMF(RC Middle Frequency)
    • 3. 低功耗RC振荡器LPOSC(Low Power OSC)
    • 4. 低频晶体振荡器XTLF(Crystal Low Frequency)
    • 5. 高频晶体振荡器XTHF(Crystal High Frequency)
  • 重点:注意事项
    • 1. 时钟校准(RCHF/RCMF/LPOSC)
    • 2. 稳定性(RCHF/RCMF/LPOSC/XTLF/XTHF)
    • 3. 起振时间
    • 4. FLASH读写等待周期
    • 5. 外设时钟频率
  • 应用Tips
    • 1. 快速的初始化
  • 时钟相关的寄存器
    • 1. 时钟管理单元
    • 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.4.7章节:内部时钟源特性

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的读等待周期的寄存器。
在这里插入图片描述

相关文章:

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

前言 本系列基于复旦微FM33系列单片机的DataSheet编写,旨在提供一些开发指南。 本文章及本系列其他文章将持续更新,本系列其它文章请跳转↓↓↓ 【复旦微FM33 MCU 外设开发指南】总集篇 本文章最后更新日期:2024/08/04 文章目录 前言时钟源…...

Android Graphics 显示系统 - 计算FPS的原理与探秘Present Fence

“ 最近忙着新房子装修的事情,这篇计划内的文章拖了好久一直没有足够的时间来写作,终于挤出些儿时间来继续研究学习了。” 整了四个晚上终于拼凑出一篇文章,虽说是讲FPS计算原理,但该文涉及的知识点还是蛮多的,特别是对…...

图论:1857. 有向图中最大颜色值(拓扑排序+动态规划)

文章目录 1.问题分析2.代码解析2.1 代码步骤1. 初始化数据结构2. 构建图和入度数组3. 初始化队列4. 拓扑排序和动态规划5. 检查是否存在环并返回结果 3. 问题扩展1. 最长路径问题(DAG)2. 最短路径问题(DAG)3. 最大路径和问题4. 路…...

pytorch学习笔记3 tensor索引和切片

dim 0 占先 切片 (前N或者后N个) :2 表示 0到2(不包含2), 1:表示 1到末尾, -1表示最后一个元素,-2表示倒数第二个 0:28:2 表示从0到27隔点采样 :&#xff…...

学习记录——day23 多进程编程

目录 一、多进程引入 1.1、引入目的 1.2、进程的概念 1.3、进程的种类 1.4、进程号的概念 1.5、特殊进程 0号 1号 2号 孤儿 僵尸 1.6、进程的相关命令 1)查看进程信息的命令:ps 跟不同的选项,执行不同的状态 2&am…...

英特尔股市暴跌,财报亏损 | HuggingFace 实现盈利 |iOS18 Beta 苹果AI

写在前面 了解一下最近科技圈发生的一些事情 英特尔 硬件巨头英特尔宣布裁掉1.5w个岗位,约占英特尔员工的12%,非常的夸张。本次裁员可能是由于前段时间英特尔的i7,i9的13/14代处理器的暴雷,导致英特尔Q2的财报低迷。 今年以来…...

C++入门基础(二)

6. 引用(引用就是取别名) 6.1 引用的概念和定义 引用不是新定义一个变量,而是给已存在变量取了⼀个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:水浒传中李逵&…...

fabricjs 实现图像的二值化功能

一、效果图 二、图像二值化的作用 二值化是图像处理中常用的一种方法,其作用是将灰度图像转换为二值图像,即将图像中的像素点根据其灰度值分成两类:黑色和白色。这种处理方法可以帮助我们更清晰地识别图像中的目标,简化图像的复杂…...

修改本地hosts文件及外部访问机器本地hosts文件后,rancher UI网站仍然不能访问

原因排查 kubectl get svc # 输出&#xff1a; NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d17hkubectl get svc -A # 输出&#xff1a; NAMESPACE …...

西北潮榆林范儿,新榆林首个360°沉浸式剧场发布会闪耀亮相

这是一场城市更迭的未来大赏&#xff0c;也是一场商业蝶变的复合对话 8月3日&#xff0c;朗阁集团商业品牌发布会在榆林银杏熙悦酒店隆重启幕。朗阁集团董事长杨志成携众多集团领导出席&#xff1b;多家主流媒体代表联袂参加&#xff1b;喜茶、中影时光国际影城、汉堡王、鲍师傅…...

如何创建响应式移动端网页设计?最佳实践详解

移动端网页设计是一个耗时而复杂的过程开发&#xff0c;包括UI设计、UX设计、检测、发布、改进、维护和持续的错误修复。通过学习这篇文章&#xff0c;你将掌握什么是移动端网页&#xff0c;如何制作移动端网页&#xff0c;以及设计网页的技巧。 什么是移动端网页&#xff1f;…...

Python 如何进行Web抓取(BeautifulSoup, Scrapy)

Web抓取&#xff08;Web Scraping&#xff09;是一种从网站提取数据的技术。Python有许多用于Web抓取的库&#xff0c;其中最常用的是BeautifulSoup和Scrapy。 BeautifulSoup BeautifulSoup是一个用于解析HTML和XML文档的Python库&#xff0c;适合处理简单的Web抓取任务。它将…...

白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理

系列目录 上一篇&#xff1a;白骑士的PyCharm教学进阶篇 2.4 Django开发支持 在Web开发中&#xff0c;数据库是必不可少的部分。PyCharm不仅是一款功能强大的IDE&#xff0c;还提供了丰富的数据库连接和管理工具&#xff0c;使开发者可以更方便地浏览和操作数据库。本篇将详细…...

(五)activiti-modeler 编辑器初步优化

最终效果&#xff1a; 1..首先去掉顶部的logo&#xff0c;没什么用&#xff0c;还占用空间。 修改modeler.html文件&#xff0c;添加样式&#xff1a; <style type"text/css"> #main-header{display: none; } #main{padding: 0px; } </style> 2.左边组…...

(学习总结12)C++类和对象3

C类和对象3 一、初始化列表二、类型转换三、static成员四、友元五、内部类六、匿名对象 以下代码环境在 VS2022。 一、初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有⼀种方式&#xff0c;就是初始化列表&a…...

docxtpl,一个强大的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - docxtpl。 项目地址&#xff1a;https://docxtpl.readthedocs.io/en/latest/ 在日常工作中&#xff0c;自动生成和处理 Word 文档是一个常见需求。doc…...

捷途山海T2:超长续航,节能环保的驾驶新星

在当今的汽车市场中&#xff0c;消费者的购车选择日趋多样化&#xff0c;不再仅限于传统的燃油车。随着环保理念的深入人心以及人们对用车成本的日益关注&#xff0c;像捷途山海T2这样配备高效混动系统的车型逐渐受到大众的青睐。 捷途山海T2&#xff0c;以其杰出的节能性、强劲…...

[Day 45] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的可擴展性挑戰 概述 區塊鏈技術在過去幾年中取得了顯著的進展&#xff0c;其去中心化、透明和安全的特性使其在金融、供應鏈管理、醫療等領域得到了廣泛應用。然而&#xff0c;區塊鏈技術的一個重大挑戰是其可擴展性。可擴展性是指系統能夠有效處理日益增長的數據和用…...

白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成

系列目录 上一篇&#xff1a; 在现代软件开发过程中&#xff0c;自动化测试与持续集成&#xff08;CI&#xff09;是确保代码质量和快速交付的关键环节。PyCharm作为一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为自动化测试和持续集成提供了全面的支持。本…...

权限模块开发+权限与角色关联(完整CRUD)

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.easycode生成代码1.配置2.AuthPermissionDao.java剪切到mapp…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生&#xff0c;系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler&#xff0c;它是Thread的子类&#xff08;就是package java.lang;里线程的Thread&#xff09;。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...