STM32的时钟介绍
目录
- 前言
- 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时钟的如何进行工作
- 时钟源选择
内部时钟源的选择:STM32微控制器通常包含多种内部时钟源,如LSI、MSI和HSI等,在初始化阶段需要选择合适的内部时钟源,并使能该时钟源。
外部时钟源的选择:除了内部时钟源,STM32微控制器还可以接入外部晶体振荡器或其他外部时钟源,用于提供更高精度或更高频率的时钟信号。在初始化阶段需要配置外部时钟源,并使能相应的外部时钟输入。
- PLL的倍频
将外部时钟信号进行倍频,从而产生更高频率的时钟信号,以满足处理器核心和外设的工作频率要求。
- 时钟分频
时钟信号可以通过分频器进行分频,以获得特定频率的时钟信号,适应不同模块的工作频率需求。
- 配置外设始终
不同的外设可以在初始化时,选择使用哪个时钟。
总的来说,时钟系统的工作原理就是通过选择合适的内部或外部时钟源,进行倍频和分频操作,将时钟信号分配给各个模块,以确保微控制器内部各个部件都能够按照预期的频率和时序工作。这样可以保证整个系统的稳定性、可靠性和性能。
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
相关文章:

STM32的时钟介绍
目录 前言1. 简介1.1 时钟是用来做什么的1.2 时钟产生的方式 2. 时钟树的组成2.1 时钟源2.1.1 内部时钟2.1.2 外部时钟 2.2 PLL锁相环2.3 SYSCLK2.4 AHB和HCLK2.5 APB和PCLK2.6 总结 3. STM32时钟的如何进行工作4.我的疑问4.1 使用MSI和HSI有什么区别吗?4.2 MSI的频…...

FindBI学习总结
大数据分析BI工具:用户只需简单拖拽便能制作出丰富多样的数据可视化信息 关注点: 快速入门、数据加工、构建图表和分析数据、数据分析进阶 1、界面介绍 目录–仪表板–数据准备 仪表板目录–预览区域 快速上手: 1、数据准备2、制作仪表板3、分…...

k8s——Pod详解
一、Pod基础概念 1.1 Pod定义 Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行…...

Visual Studio 的调试
目录 引言 一、调试的基本功能 设置断点 启动调试 检查变量 逐步执行代码 调用堆栈 使用即时窗口 二、调试技巧 条件断点 日志断点 数据断点 异常调试 三、调试高级功能 远程调试 多线程调试 内存调试 性能调试 诊断工具 四、调试策略与最佳实践 系统化的…...

mysql语句大全及用法
MySQL是一种广泛使用的开源关系型数据库管理系统,它支持标准的SQL(Structured Query Language)语言,用于数据库的查询和操作。以下是一些基本的MySQL语句及其用法的概述: 连接MySQL数据库 mysql -h主机地址 -P端口号…...

如何找出真正的交易信号?Anzo Capital昂首资本总结7个
匕首是一种新兴的价格走势形态,虽然不常见,但具有较高的统计可靠性。它通常预示着趋势的持续发展。该模式涉及到同时参考两个不同的时间周期进行交易,一个是短期,另一个是长期,比如一周时间框架与一天时间框架、一天时…...

JavaScript-内存分配
内存空间 内存分为栈和堆 栈:由操作系统自动释放存放的变量值和函数值等。简单数据类型存放在栈中 栈会由低到高先入后出 堆:存储引用类型 (对象) 对象会先将数据存放在堆里面,堆的地址放在栈里面...

理论知识.质数打表
啊,哈喽,小伙伴们大家好。我是#张亿,今天呐,学的是理论知识.质数打表 为什么需要质数打表 我们已经学习了如何判断一个数是不是质数了,但是还不够。假设要判断很多很多个数是不是质数的时候,之前的学习的…...

FFMPEG+ANativeWinodow渲染播放视频
前言 学习音视频开发,入门基本都得学FFMPEG,按照目前互联网上流传的学习路线,FFMPEGANativeWinodow渲染播放视频属于是第一关卡的Boss,简单但是关键。这几天写了个简单的demo,可以比较稳定进行渲染播放,便…...

使用AXI MIG/Proc Sys Reset
使用AXI MIG/Proc Sys Reset 重要!仅当您的设计中包含AXI MIG时,才执行以下步骤。 AXI-MIG的连接接口 1.选择在/mig_7series_0/S_AXI上运行连接自动化。 2.选择/micblaze_0(缓存)或/micblaze _0(Periph)选项…...

Android基础-Kotlin语言的作用及优缺点
一、Kotlin语言的作用 Kotlin是一种由JetBrains公司开发的现代化静态类型编程语言,自其诞生以来,便在多个领域展现出了强大的应用潜力。其主要作用可以概括为以下几点: Android应用开发:Kotlin作为Android开发的官方推荐语言&am…...

手机投屏技巧:手机怎么投屏到电脑显示屏上?精选6招解决!
手机怎么投屏到电脑显示屏上?出于一些不同的原因,大多数人都希望能将手机投屏到电脑上。其中一个常见的原因是,大家经常会希望在笔记本电脑上共享图片,而无需上传或者登录微信进行文件传输。以及希望不依靠投影仪,就能…...

内存函数<C语言>
前言 前面两篇文章介绍了字符串函数,不过它们都只能用来处理字符串,C语言中也内置了一些内存函数来对不同类型的数据进行处理,本文将介绍:memcpy()使用以及模拟实现,memmove()使用以及模拟实现,memset()使用…...

华为校招机试 - LRU模拟(20240515)
题目描述 LRU(Least Recently Used)缓存算法是一种常用于管理缓存的策略,其目标是保留最近使用过的数据,而淘汰最久未被使用的数据。 实现简单的LRU缓存算法,支持查询、插入、删除操作。 最久未被使用定义:查询、插入和删除操作均为一次访问操作,每个元素均有一个最后…...

AI预测福彩3D采取888=3策略+和值012路一缩定乾坤测试5月29日预测第5弹
今天继续基于8883的大底,使用尽可能少的条件进行缩号,同时,同样准备两套方案,一套是我自己的条件进行缩号,另外一套是8883的大底结合2码不定位奖号预测二次缩水来杀号。好了,直接上结果吧~ 首先&…...

03_前端三大件CSS
文章目录 CSS用于页面元素美化1.CSS引入1.1style方式1.2写入head中,通过写style然后进行标签选择器加载样式1.3外部样式表 2.CSS样式选择器2.1 元素选择器2.2 id选择器2.3 class选择器 3.CSS布局相关3.1 CSS浮动背景:先设计一些盒子因此,引出…...

十种常用数据分析模型
1-线性回归(Linear Regression) 场景:预测商品销售额 优点:简单易用,结果易于解释缺点:假设线性关系,容易受到异常值影响概念:建立自变量和因变量之间线性关系的模型。公式&#x…...

salesforce 公式字段 判断一个字段是否在某个多选列表中
在 Salesforce 中,你可以使用公式字段来判断一个字段的值是否在一个多选列表中。这通常涉及使用包含特定值的函数和一些字符串操作。以下是一个常见的方法: 假设你有一个多选列表字段 Multi_Select_Field__c,你想检查这个字段是否包含某个值…...

C++STL容器系列(三)list的详细用法和底层实现
目录 一:介绍二:list的创建和方法创建list方法 三:list的具体用法3.1 push_back、pop_back、push_front、pop_front3.2 insert() 和 erase()3.3 splice 函数 四:list容器底层实现4.1 list 容器节点结构5.2 list容器迭代器的底层实…...

IEEE Latex模版踩雷避坑指南
参考文献 原Latex模版 \begin{thebibliography}{1} \bibliographystyle{IEEEtran}\bibitem{ref1} {\it{Mathematics Into Type}}. American Mathematical Society. [Online]. Available: https://www.ams.org/arc/styleguide/mit-2.pdf\bibitem{ref2} T. W. Chaundy, P. R. Ba…...

【C++】类与对象——多态详解
目录 一、多态的定义 二、重载、覆盖(重写)、隐藏(重定义)的对比 三、析构函数重写 四、C11 override 和 final 1. final 2. override 五、抽象类 六、多态的原理 一、多态的定义 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为…...

WordPress建网站公司 建易WordPress建站
建易WordPress建网站公司是一家专业从事WordPress网站建设、网站维护、网站托管、运营推广和搜索引擎优化(SEO)等服务的公司。建易WordPress建网站公司提供多种服务,包括模板建站和定制网站,并且明码标价,价格透明,竭诚为全国各地…...

MySQL正则替换整个单词
\b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但…...

Java设计模式:享元模式实现高效对象共享与内存优化(十一)
码到三十五 : 个人主页 目录 一、引言二、享元设计模式的概念1. 对象状态的划分2. 共享机制 三、享元设计模式的组成四、享元设计模式的工作原理五、享元模式的使用六、享元设计模式的优点和适用场景结语 [参见]: Java设计模式:核心概述&…...

景源畅信电商:抖音开店步骤是什么?
随着社交媒体的兴起,抖音已经成为一个不可忽视的电商平台。许多人都希望通过抖音开店来实现自己的创业梦想。那么,抖音开店的具体步骤是什么呢?接下来,我们将详细阐述这一问题。 一、明确回答问题抖音开店的步骤主要包括:注册账号…...

Notepad++不显示CRLF的方法
View -> Show Symbol -> 去掉勾选 Show All Characters...

前端开发工程师——AngularJS
一.表达式和语句 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…...

【AI算法岗面试八股面经【超全整理】——概率论】
AI算法岗面试八股面经【超全整理】 概率论信息论机器学习CVNLP 目录 1、古典概型、几何概型2、条件概率、全概率公式、贝叶斯公式3、先验概率、后验概率4、离散型随机变量的常见分布5、连续型随机变量的常见分别6、数学期望、方差7、协方差、相关系数8、独立、互斥、不相关9.大…...

vue3 使用vant
使用前提: vite创建的vue3项目 vanthttps://vant-ui.github.io/vant/#/zh-CN/home npm i vant 引入样式: main.js import vant/lib/index.css vant封装 import { showLoadingToast,closeToast,showDialog,showConfirmDialog } from vant;export func…...

网络请求客户端WebClient的使用
在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。根据 Spring 官方文档…...