STM32的时钟介绍

news2024/12/25 8:56:37

目录

  • 前言
  • 1. 简介
    • 1.1 时钟是用来做什么的
    • 1.2 时钟产生的方式
  • 2. 时钟树的组成
    • 2.1 时钟源
      • 2.1.1 内部时钟
      • 2.1.2 外部时钟
    • 2.2 PLL锁相环
    • 2.3 SYSCLK
    • 2.4 AHB和HCLK
    • 2.5 APB和PCLK
    • 2.6 总结
  • 3. STM32时钟的如何进行工作
  • 4.我的疑问
    • 4.1 使用MSI和HSI有什么区别吗?
    • 4.2 MSI的频率为什么可以调节?
  • 5. 总结
  • 6. 参考资料

前言

最近因为工作需要又重新接触到了大学时期经常使用的STM32单片机。本以为自己工作了那么多年,再加上大学时期经常使用单片机,对于在STM32上面开发应该是手到擒来。

但是在真正开发时还是碰到了很多问题,特别是时钟这块,经常被各种SYSCLK,HCLK, APB, AHB, PLL等搞的晕头转向,调试时也不知道该如何下手,于是决定花点时间把STM32单片机的时钟给梳理下,弄清楚后再进行开发,否则只是一味的去试不仅消耗时间多,而且很难得到最正确的那个解。

1. 简介

1.1 时钟是用来做什么的

时钟简单来说就是用来驱动整个芯片进行工作的,它为设备的运行提供了心跳。如果时钟速度越快,那么心跳的频率也就越快,执行指令的速度也就更快。时钟精度越高,每次心跳的间隔和周期也就更一致,出现误差的可能性就越小。

官方的说:时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启相应的时钟。由时钟去驱动指令的执行。

1.2 时钟产生的方式

时钟一般是通过RC振荡器或者晶体振荡器、陶瓷振荡器等来提供时钟信号。

  • RC振荡器时钟

  •   -  使用了电阻(R)和电容(C)来产生振荡信号
      -  由于仅需要简单的电阻和电容元件,RC振荡器的成本通常比晶体振荡器、陶瓷谐振器等更低。
      -  精度相对较低:与晶体振荡器相比,RC振荡器的频率稳定性和精度通常较低。
    
  • 陶瓷振荡器

      - 陶瓷谐振器也是一种用于产生时钟信号的设备,它与晶体振荡器类似,但频率稳定性和精度通常没有晶体振荡器高。
      - 由于成本更低且尺寸较小,陶瓷谐振器常用于对频率要求不太严格的应用。
    
  • 晶体时钟振荡器

      - 晶体振荡器是一种利用晶体的共振特性产生稳定时钟信号的设备。
      - 它通常具有非常高的频率稳定性和准确性,适用于需要高精度时钟信号的场合,如微控制器、微处理器等。
      - 晶体振荡器通常需要外部连接晶体来实现工作。
    

整体上来说晶体和陶瓷振荡器相比较于RC振荡器更加稳定,精度更好,成本也更高。一般情况下单片机的HSI(内部高速时钟)使用的都是RC振荡器,外部HSE采用陶瓷和晶体等精度更高的振荡器。

2. 时钟树的组成

请添加图片描述
上图是一个STM32时钟树图,该图是从STM32CUBE MX上截取下来的。如果对单片机的时钟没有个初步了解的话,让我们直接去通过这个图去配置时钟,估计大多数人都会感觉到无从下手。下面我们就一点点去分析上面这个时钟树有哪些东西组成,相信等看完了分析后,就能有个初步的理解了。

2.1 时钟源

请添加图片描述
时钟源也就是一切时钟的源头。
STM32的时钟源总共分为两种,一种是外部时钟如HSE和LSE,另外一种是内部时钟如HSI,MSI,LSI。他们构成了时钟的源头,后续其他的PLL和SYSCLK ,HCLK ,PCLK都是由这些时钟源一部部产生的(实际上就是倍频或者分频)。

2.1.1 内部时钟

  • LSI((Low-Speed Internal RC Oscillator))

    低速内部时钟,RC振荡器

    通常工作在几十Khz范围内,用于一些低功耗模式下的定时器或者看门狗定时器功能。
    以及一些对时钟精度要求不高的场景

  • MSI(Multi-Speed Internal RC Oscillator)

    在STM32L4系列微控制器中引入的新型内部时钟源。
    MSI时钟源提供了多个可选的频率档位,可以根据应用的需求选择不同的频率,从数百千赫兹到数十兆赫兹不等。

    • 为什么会有MSI?

        灵活性:MSI的引入可以让开发者在不同的应用场景下选择合适的时钟频率,从而更好地平衡性能和功耗。
        功耗优化:MSI可以提供多个可调节的时钟频率选项,在低功耗模式下选择较低的频率,可以有效降低功耗。
      
    • MSI的工作原理?

      我们知道其它时钟一般都是使用固定频率的RC振荡器,但是MSI他是可以进行配置的,这是为什么呢?这是因为MSI是通过内部的数字控制单元来产生时钟信号的。在STM32微控制器中,MSI通常是一个可编程的RC振荡器,其频率可以在一定范围内进行调节。
      当需要使用MSI作为时钟源时,可以通过寄存器设置选择合适的频率,控制单元会根据设置的参数来产生相应的时钟信号。

      MSI的工作原理涉及到数字控制单元中的PLL(Phase-Locked Loop)等电路,具体细节可能会因不同型号和系列的STM32微控制器而有所差异。

  • HSI (High-Speed Internal RC Oscillator)

高速内部时钟,RC振荡器

高速内部RC振荡器,通常工作在几十兆赫兹的频率范围内。HSI时钟是STM32微控制器的主要时钟源之一,用于驱动处理器核心和大部分外设模块的正常运行。

2.1.2 外部时钟

  • HSE(High-Speed External)

    外部高速振荡器,可以连接到微控制器的晶体振荡器引脚(OSC_IN和OSC_OUT)。

    外部时钟振荡器一般采用晶体振荡器,他可以提供更高的准确性和稳定性。
    但是同时成本也更高一些

  • LSE(Low-Speed External)

    一种用于提供低速时钟信号的外部时钟源

    STM32微控制器中,LSE通常指的是外部32.768kHz晶体振荡器,因为它的频率正好是2的15次方,可以很方便地与RTC的预分频器相结合,从而实现精确的秒级时间计数。

2.2 PLL锁相环

请添加图片描述

PLL是一种电路,可根据输入的参考时钟信号生成一个高频率的时钟信号输出。在STM32中,PLL通常用于将外部晶体振荡器提供的低频时钟信号倍频,从而生成更高频率的系统时钟信号,以满足处理器核心和外设的工作频率要求。

2.3 SYSCLK

指在STM32微控制器中用于驱动整个系统的时钟信号。它是所有内部模块和外设的时钟源,对于系统的正常运行至关重要。

Sysclk的频率和稳定性直接影响着处理器的运行速度、外设的工作性能以及整个系统的功耗。

请添加图片描述

从上图可以看到SYSCLK的时钟一般来自于HSI、MSI、HSE、PLL。

然后SYSCLK的时钟通过AHB预分频器分频后传递到HCLK。

同时系统中其它的外设在初始化时也可以将自己的时钟源选择到SYSCLK。

2.4 AHB和HCLK

请添加图片描述

AHB是什么?
AHB(Advanced High-performance Bus)是一种用于连接主要系统总线和高性能外设的总线架构,它是STM32微控制器中的主要系统总线之一,用于连接处理器核、内存和高带宽外设,如DMA控制器、高速存储器接口等

为什么会有AHB?

  • 高性能需求:一些外设,比如DMA控制器、存储器接口等,需要更高的数据传输速度和带宽,而普通的总线无法满足这些要求。
  • 分流系统负载:将外设的访问流量从主系统总线中分流出来,可以减轻主系统总线的负荷,提高整个系统的效率和性能。

AHB prescaler(AHB预分频器)

是用来设置Advanced High-performance Bus(AHB)时钟频率的寄存器。通过配置AHB预分频器,可以将系统时钟(SYSCLK)分频后得到AHB总线的工作频率。

HCLK(AHB Clock)

HCLK就是AHB 总线的时钟

2.5 APB和PCLK

请添加图片描述
APB是什么?
APB代表高级外设总线(Advanced Peripheral Bus),是连接外设的总线。在STM32微控制器中,通常有两种类型的APB总线:APB1和APB2。

APB1
APB1主要连接低速外设

APB2
APB2主要连接高速外设

PCLK
APB1上的时钟为PCLK1,APB2上的时钟为PCLK2

2.6 总结

STM32的时钟首先来自于时钟源,其中HSI、HSE、MSI这些高速时钟一般是用于系统时钟(SYSCLK)的,LSI和LSE是用于低速外设的。

然后SYSCLK 分频后得到 HCLK, HCLK分频后得到PCLK1和PCLK2。

对于整个系统来说,之所以产生如此之多的时钟,是为了适配不同工作速率的硬件,大家想一下如果都用高速时钟那么功耗就很高,且会占据很多的CPU资源。然后一些外设根本用不到那么快的时钟,给他们那么高的时钟频率,不仅不会带来好处,反而会增加功耗,降低CPU的处理效率。因此通过这种多时钟的方式,去为不同的外设分配合适的时钟,可以有效降低功耗以及提升CPU的执行效率。例如CPU和FLASH需要用到高速时钟,而看门狗和RTC这些使用低速时钟就可以了。

3. STM32时钟的如何进行工作

  1. 时钟源选择

内部时钟源的选择:STM32微控制器通常包含多种内部时钟源,如LSI、MSI和HSI等,在初始化阶段需要选择合适的内部时钟源,并使能该时钟源。

外部时钟源的选择:除了内部时钟源,STM32微控制器还可以接入外部晶体振荡器或其他外部时钟源,用于提供更高精度或更高频率的时钟信号。在初始化阶段需要配置外部时钟源,并使能相应的外部时钟输入。

  1. PLL的倍频

将外部时钟信号进行倍频,从而产生更高频率的时钟信号,以满足处理器核心和外设的工作频率要求。

  1. 时钟分频

时钟信号可以通过分频器进行分频,以获得特定频率的时钟信号,适应不同模块的工作频率需求。

  1. 配置外设始终

不同的外设可以在初始化时,选择使用哪个时钟。

总的来说,时钟系统的工作原理就是通过选择合适的内部或外部时钟源,进行倍频和分频操作,将时钟信号分配给各个模块,以确保微控制器内部各个部件都能够按照预期的频率和时序工作。这样可以保证整个系统的稳定性、可靠性和性能。

4.我的疑问

4.1 使用MSI和HSI有什么区别吗?

MSI是一个多速率内部振荡器,HSI是高速内部时钟。

  • 时钟频率: MSI可以通过软件配置产生不同频率的时钟。HSI是一个固定的16MHZ的内部RC振荡器
  • 启动时间:HSI的启动时间相对较短,因为他是内部振荡器。而MSI的启动时间可能稍长一些。
  • 应用场景:HSI适用于精度要求不高的应用,如简单的控制任务,HSI可能就足够了。而对于需要更高时钟精度或者特定频率的应用 需要使用MSI进行相应的配置 精度和稳定性:MSI的主振荡器内部时钟通常具有更好的稳定性和精确度,适合对时钟精度要求较高的应用场合

4.2 MSI的频率为什么可以调节?

振荡器的频率不都是固定的吗?MSI用的什么振荡器为什么可以调节?

因为它内部集成了一个可编程的RC振荡器

5. 总结

STM32的时钟首先来自于时钟源,其中HSI、HSE、MSI这些高速时钟一般是用于系统时钟(SYSCLK)的,LSI和LSE是用于低速外设的。

然后SYSCLK 分频后得到 HCLK, HCLK分频后得到PCLK1和PCLK2。

对于整个系统来说,之所以产生如此之多的时钟,是为了适配不同工作速率的硬件,大家想一下如果都用高速时钟那么功耗就很高,且会占据很多的CPU资源。然后一些外设根本用不到那么快的时钟,给他们那么高的时钟频率,不仅不会带来好处,反而会增加功耗,降低CPU的处理效率。因此通过这种多时钟的方式,去为不同的外设分配合适的时钟,可以有效降低功耗以及提升CPU的执行效率。例如CPU和FLASH需要用到高速时钟,而看门狗和RTC这些使用低速时钟就可以了。

6. 参考资料

STM32各种时钟的区别
GPT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1714789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tensorrt输出结果为nan的解决方案

系统环境: ubuntu20.04 python3.9 cuda11.8 cudnn8.9.7.29 torch1.13.1cu117(pip install torch1.13.1) 1.针对cuda版本查了一下trt支持版本,发现V10和V8版本都支持 本着用新不用旧标准,果断下载了8.6&#xff0c…

【4.vi编辑器使用(下)】

一、vi编辑器的光标移动 二、vi编辑器查找命令 1、命令::/string 查找字符串 n:继续查找 N:反向继续查找 /^the 查找以the开头的行 /end 查找以 查找以 查找以结尾的行 三、vi编辑器替换命令 1、语法: : s[范围,范围]str1/str2[g] g表示全…

2.1.2 基于配置方式使用MyBatis

文章目录 实战目标实战步骤1. 创建Maven项目2. 添加项目依赖3. 创建用户实体类4. 创建用户映射器配置文件5. 创建MyBatis配置文件6. 创建日志属性文件7. 测试用户操作8. 运行测试方法 预期结果实战方法结论 实战目标 本实战的目标是演示如何使用MyBatis框架来操作数据库。通过…

深度学习21天 —— 卷积神经网络(CNN):识别验证码( 第12天)

目录 一、前期准备 1.1 标签数字化 1.2 加载数据 1.3 配置数据 二、其他 2.1 损失函数 categorical_crossentropy 2.2 plt.legend(loc ) 2.3 history.history 活动地址:CSDN21天学习挑战赛 学习:深度学习100例-卷积神经网络(CNN&…

什么是访问控制漏洞

什么是AC Bugs? 实验室 Vertical privilege escalation 仅通过隐藏目录/判断参数来权限控制是不安全的(爆破url/爬虫/robots.txt/Fuzz/jsfinder) Unprotected functionality 访问robots.txt 得到隐藏目录,访问目录 ,…

Django入门全攻略:从零搭建你的第一个Web项目

系列文章目录 努力ing Django入门全攻略:从零搭建你的第一个Web项目努力ing… 文章目录 系列文章目录前言一、Django1.1 Django安装1.2 Django项目创建1.3 目录介绍 二、子应用2.1 子应用创建2.2 目录结构2.3 子应用注册2.4 子应用视图逻辑2.4.1 编写视图2.4.2 编写…

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别

Java开发-面试题-0001-String、StringBuilder、StringBuffer的区别 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998(纯纯技术文&am…

嵌入式进阶——HID协议

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 USB烧录USB HID协议USB协议组成通讯流程 官方USB HID范例文件说明修改PC端的显示 兼容库函数HID键盘USB调试工具USB 描述符设备描述…

【因果推断python】2_因果关系初步2

目录 偏差 关键思想 偏差 偏差是使关联不同于因果关系的原因。幸运的是,我们的直觉很容易理解。让我们在课堂示例中回顾一下我们的平板电脑。当面对声称为孩子提供平板电脑的学校会获得更高考试成绩的说法时,我们可以反驳说,即使没有平板电…

「清新题精讲」Skiers

更好的阅读体验 Skiers Description 给定 n n n 个点的有向无环平面图,求最少多少条从 1 1 1 到 n n n 的路径能覆盖原图的所有边? 1 ≤ n ≤ 5 1 0 3 1\le n\le 5\times10^3 1≤n≤5103 Solution 考虑从 1 1 1 到 n n n 的路径其实是边的链覆…

如何应对Android面试官 -> 玩转 Fragment

前言 本章主要讲解下 Framgent 的核心原理; 基础用法 线上基础用法,其他的可以自行百度 FragmentManager manager getSupportFragmentManager(); FragmentTransaction transaction manager.beginTransaction(); transaction.add(R.id.contentlayout,…

C语言函数复习全解析:参数、无参、嵌套与递归

C语言复习 函数篇 文中包括调用有参函数和无参函数、函数的嵌套和递归。首先,通过一道例题介绍了有参函数的概念和用法,即定义一个函数,接受特定参数并返回结果。接着,讲解了无参函数,即执行函数时不需要返回数值,只执行特定操作。然后,介绍了函数的嵌套,即在一个函数内部调用…

【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解

目录 引言 一、存储卷 (一)存储卷定义 (二)存储卷的作用 1.数据持久化 2.数据共享 3.解耦 4.灵活性 (三)存储卷的分类 1.emptyDir存储卷 1.1 定义 1.2 特点 1.3 示例 2.hostPath存储卷 2.1 …

RabbitMQ详情

一.MQ简介 什么是MQ MQ本质是队列,FIFO先入先出,队列中存放的内容是message(消息),还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中是常见的上下游“逻辑解耦物理解耦”的消息通信服务。 主…

Wpf 使用 Prism 实战开发Day28

首页汇总方块点击导航功能 点击首页汇总方块的时候,跳转到对应的数据页面 step1: 在IndexViewModel 中,给TaskBar 里面Target 属性,赋上要跳转的页面 step2: 创建导航事件命令和方法实现 step3: 实现导航的逻辑。通过取到 IRegionManager 的…

ClickHouse 与其他数仓架构的对比——Clickhouse 架构篇(四)

文章目录 前言ClickHouse与Hive的对比计算引擎的差异ClickHouse比Hive查询速度快的原因 ClickHouse与HBase的对比HBase的存储系统与ClickHouse的异同HBase的适用场景及ClickHouse不适合的原因 ClickHouse与Kylin的对比Kylin的架构Kylin解决性能问题的思路Kylin方案的缺陷ClickH…

信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用

更多资源请关注纽扣编程微信公众号 1 2021 CSP-J 阅读程序1 阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填;除特 殊说明外,判断题 1.5 分,选择题 3 分) 源码 #in…

字符串编码转换

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 最早的字符串编码是美国标准信息交换码,即ASCII码。它仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASC…

贪心(临项交换)+01背包,蓝桥云课 搬砖

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0搬砖 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 将物品按照w[i] v[i]升序排序然后跑01背包就是答案 下面证明:(不要问怎么想到的,做题多了就能想到&#xff…

总负债20.79亿,银行借款在增加,经营所得现金在减少,累计亏损在增加,易点云披露其风险(四)

来源:猛兽财经 作者:猛兽财经 全文共二十五章,总计6万字。 由于篇幅所限,分为(一)到(五)篇发布。 本文为《负债20.79亿,银行借款在增加,经营所得现金在减少,易点云披露风险》&am…