STM32:时钟树原理概要
在一般情况下只要在CubeIDE中将RCC下的高速时钟源设置成晶振,随后在时钟配置中把HCLK设置到最大频率(比如STM32F103的最高频率是72MHZ ),CubeIDE就会帮我们自动调节其它参数到合适的值。这样我们芯片就可以全速运行了。


一、时钟信号
芯片大部分都是由庞大的电路组成。这种电路通常是逻辑电路。例如如下电路:
AB线路分别输入 0 和 1 后经过与门和异或门,在寄存器存的值便是 1。此时AB线路再分别输入1和1,在理想状态下寄存器值就会变成0。但是实际和理想情况不同。
在现实实践中,存在门电路运算延时问题。在AB线路分别输入1和1的时候,由于与门运算电路比较复杂,门电路运算相比其他简单线路传输时间就更长。在异或门下端输入到高电平时,上端还保留上次与门运算的输出结果,此时就会处于一种由延迟造成的错误状态。处在这种错误状态时间虽然短暂,但是依赖于这种电路组成的复杂系统可能会在不可预知的时间内发生不可预知的错误。

为了解决这种延迟问题可以在电路中引入边沿触发器。边沿触发器中包含一个输入端(D),输出端(Q),和控制端(CLK).边沿触发器的特性:将一个固定频率的信号不断发送到控制端中。在控制端出现一个从低电平到高电平的上升沿信号时,才会将输入结果从输出端输出。电路修正为如下图所示,这种固定频率的方波信号,可以在一个完整周期内保证寄存器的值都不会改变,解决了电路运算延时问题。这种方波信号就是时钟信号。
时钟信号由单片机“心脏”时钟源产生,通过“动脉”时钟树传播到整个芯片电路中。

二、HCLK 时钟树
在STM32内部有一个叫做先进高性能总线(Advance High Performance Bus,AHB)总线。它就是STM32的主干道。STM32芯片中的处理器,内存,DMA,以及各种外设都连接到这一总线上。

HCLK属于AHB总线中的时钟线。它直接连接了处理器,内存,DMA。为他们带去了时钟信号。在处理器内核中有一个成为 SysTick(系统滴答)的定时器,为我们的程序提供一个时钟基准(HAL_DELAY()函数就是依赖于SysTick)。与直连不同,SysTick和AHB之间连接了一个分频器
分频器的作用是变频,降低频率。即给频率作除法。例如将分频器设置为"/8"也就是变成原来频率的1/8。连接SysTick的分频器可以设置“/1”和“/8”。例如AHB提供72MHZ的频率经过"/8"的分频器后就会变成9MHZ。
在STM32芯片中,像GPIO,串口,IIC等外设并没有直接连接到AHB总线上。而是两个先进外设总线(Advance Peripheral Bus,APB)分别连接到AHB上。外设通过一种桥接器连接到APB进行处理。让外设和AHB直连的部件进行间接通信。 APB1上连接了串口2到5,SPI2/3.IIC,USD,CAN,通用定时器,基本定时器等等;APB2上连接了ADC,串口1,SPI1,高级定时器TIM1和TIM8,所有GPIO口和中断等。
在APB1和AHB中间有一个也有一个分频器,此分频器输出的信号称作PCLK。分频器与定时器之间还连接一个倍频器。倍频器与分频器的功能相反,用来给频率作乘法。例如提供32MHZ的频率经过"x2"的倍频器后就会变成72MHZ。
注:在《STM32官方参考手册》中的第2章存储器和总线构架中可以了解具体AHB总线的结构。
把上图简化成树形结构如下图HCLK的右半部分所示结构。只要设置HCLK频率再调节变频器和倍频器就可以将想要的时钟频率输出给其他部件。

从“源头”来讲,提供给HCLK的时钟源有两个,HSI高速内部时钟和HSE高速外部时钟。其中HSI是STM32的默认时钟源,它内置在芯片内部,无需外接电路,产生的频率为8MHZ。高速外部时钟HSE需要从外部电路接入一种叫做“晶振”的器件,该器件内部有石英晶体可以发出一定频率的脉冲信号,其脉冲精度要比HSI好得多。
PLLCLK锁相环时钟,它起到的作用是倍频器作用,它可以选择将HSI或者HSE的时钟分频后的信号选择一个再进行倍频输出。因此进入系统时钟SysCLK就可以有三种输入选择:HSI,HSE,PLL锁相环。再经过AHB分频器就到了HCLK部件了。
三、时钟配置补充

- FCLK,自由运行时钟:当我们需要节省电量需要STM32进行低功耗模式之一的“停止模式”时,AHB总线会停止运行,HCLK会停止传输时钟脉冲,所有连接到AHB总线上的外设都会停止运行。FCLK实际上连接是AHB分频器,当STM32处于休眠状态是,FCLK依旧处于运行态,为中断采样提供时钟信号
- To FLITFCLK:为Flash编程接口的时钟,它的时钟源永远来自于HSI。
- To USB:为USD功能提供的系统时钟,来自于PLL锁相环。
- Clock Security System,CSS时钟安全系统:原始时钟源为HSE或为倍频过的HSE可选择开启。它可以在HSE发生故障时,立即将时钟源切换为HSI,并且产生中断。
- RTC/看门狗时钟树:一个独立的时钟树,时钟源是低速内部时钟LSI和低速外部时钟LSE,或者高速外部时钟的“/128”分频。挂在上面的是RTC实时时钟和看门狗。
- Master Clock Output,时钟输出功能:在基本设置->System Core->RCC 界面中勾选Master Clock Output 就可以使用该功能。PA8引脚就会被设置为RCC_MCO。在根据时钟配置界面中选择其中一个时钟信号输出,PA8就可以获取到数据
相关文章:
STM32:时钟树原理概要
在一般情况下只要在CubeIDE中将RCC下的高速时钟源设置成晶振,随后在时钟配置中把HCLK设置到最大频率(比如STM32F103的最高频率是72MHZ ),CubeIDE就会帮我们自动调节其它参数到合适的值。这样我们芯片就可以全速运行了。 一、时钟信…...
Python量化--诺贝尔奖获得者布莱克-斯科尔斯期权定价公式在日间交易中的应用
“我们不能让你在不了解一点期权定价基础知识的情况下离开麻省理工学院,”Andrew Lo 教授在麻省理工学院的 15.401 金融理论课上对学生们说道。虽然我还不是麻省理工学院的学生,但这句话给了我一个直觉:期权定价一定极其重要。由于像麻省理工学院毕业生这样的精英金融人士都…...
Redis 5 种基本数据类型详解
Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据类型是直接提供给用户使用的&…...
LeetCode8-字符串转换整数(atoi)
目录 1.大神解法2.我的辣鸡解法:3.整数相加的溢出判断(chaGPT代码)4.整数相乘溢出判断(chatGPT代码) 到目前为止比较简单容易理解的一个代码: 参考链接: 🔗:【8. 字符串转换整数 String to Integer (atoi) 【LeetCode 力扣官方题解】-哔哩哔哩】 1.大神解法 累乘和…...
算法分析与设计课后练习22
设W(5,7,10,12,15,18,20)和M35,使用过程SUMOFSUB找出W种使得和数等于M的全部子集并画出所生成的部分状态空间树...
芯片IO口不加电阻会怎样?
芯片IO口不加电阻会怎样? 可能会导致以下几个后果: 1.高电流问题,IO口没有电阻限流,当与外部设备直接连接时,就可能会导致过大的电流流过IO口,这就可能损坏IO口,引起短路或烧坏其它电路组件。像…...
智慧化工园区信息化整体解决方案:PPT全53页,附下载
关键词:智慧化工园区建设方案,智慧化工园区建设规范,智慧化工园区建设指南 一、售智慧化工园区建设背景 随着工业化、信息化和数字化进程的加速,化工园区面临着越来越多的挑战,如安全生产、环境保护、能源消耗等问题…...
深度学习之三(卷积神经网络--Convolutional Neural Networks,CNNs)
概念 卷积神经网络(Convolutional Neural Networks,CNNs)是一种特殊的神经网络结构,专门用于处理具有网格状结构(如图像、音频)的数据。CNN 在计算机视觉领域取得了巨大成功,广泛应用于图像识别、物体检测、图像生成等任务。以下是 CNN 的主要理论概念: 在数学中,卷…...
竞赛选题 目标检测-行人车辆检测流量计数
文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …...
【链表的说明、方法---顺序表与链表的区别】
文章目录 前言什么是链表链表的结构带头和不带头的区别 链表的实现(方法)遍历链表头插法尾插法任意位置插入一个节点链表中是否包含某个数字删除链表某个节点删除链表中所有关键字key清空链表所有节点 ArrayList 和 LinkedList的区别总结 前言 什么是链…...
彻底解决electron-builder安装问题与npm下载配置问题
electron-builder这个工具每次安装最少要耗费我整整一天的时间。由于只需安装一次即可使用就没去做好笔记,但有时候涉及到更新,或者换了新电脑,这个环境还得重新安装。为了避免下次安装浪费一整天时间,特此做好笔记。 虽然网上找了很多资料但都不详细,现在我们从底层来理解…...
变量命名的规则与规范
变量命名的规则与规范 变量命名的规则不能使用关键字字母须区分大小写由字母、数字、_、$组成,且不能以数字开头 变量命名的规范起名须有一定的意义遵守小驼峰命名法 变量命名的规则 不能使用关键字 在JavaScript中声明变量不能使用JavaScript的常用关键字&#x…...
【开源】基于Vue和SpringBoot的服装店库存管理系统
项目编号: S 052 ,文末获取源码。 \color{red}{项目编号:S052,文末获取源码。} 项目编号:S052,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…...
怎样用css画一个圆?
要使用 CSS 画一个圆,可以使用 border-radius 属性为一个元素添加圆角,将 width 和 height 设置为相等的值,从而形成一个圆形。 以下是一个使用 CSS 画圆的简单示例: .circle {width: 100px;height: 100px;background-color: #3…...
Minikube Mac安装使用
minikube start | minikube 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube 1 2 启动本地集群 minikube start --driverdocker # 等待几分钟 让docker 拉…...
人工智能-循环神经网络通过时间反向传播
到目前为止,我们已经反复提到像梯度爆炸或梯度消失, 以及需要对循环神经网络分离梯度。 例如,我们在序列上调用了detach函数。 为了能够快速构建模型并了解其工作原理, 上面所说的这些概念都没有得到充分的解释。 本节将更深入地探…...
Delphi 取消与设置CDS本地排序
取消与设置CDS本地排序 取消CDS本地排序. cds.IndexDefs.Update; if cds.IndexName<> then begin if cds.IndexDefs.IndexOf(index1)>0 then cds.DeleteIndex(index1); cds.IndexDefs.Clear; cds.IndexName:; end; 设置CDS本地排序 c…...
智能门禁刷脸照片格式gif、bmp,png转换,转换base64
随着刷脸闸机的普及,很多场所都使用了刷脸金闸机,很多时候对方传来的照片格式不对。 刷脸闸机对应的格式都是jpg 照片来源:访客手机上传,管理员上传,团队购票上传 在转换的语言很多,在网站中php使用较为…...
听GPT 讲Rust源代码--src/librustdoc
题图来自 Why is building a UI in Rust so hard? File: rust/src/librustdoc/core.rs 在Rust中,rust/src/librustdoc/core.rs文件的作用是实现了Rustdoc库的核心功能和数据结构。Rustdoc是一个用于生成Rust文档的工具,它分析Rust源代码,并生…...
hosts 配置本地映射不生效
关闭所有科学上网工具!!刷新 DNS 解析缓存:ipconfig /flushdns关闭所有浏览器访问映射地址时,带上端口号...
RS信号发生器仿真模式应用与兼容性解决方案
1. R&S信号发生器远程仿真模式应用指南作为一名从事射频测试系统集成多年的工程师,我经常遇到老旧测试设备替换的挑战。最近在升级某卫星通信测试系统时,就遇到了Agilent 8648B信号发生器停产的问题。幸运的是,R&S的SMB100A通过其HP8…...
测试文章标题04
测试文章内容这是一篇测试文章...
告别“黑盒”:手把手带你用Wireshark和CANoe调试AutoSAR的SOME/IP通信
告别“黑盒”:手把手带你用Wireshark和CANoe调试AutoSAR的SOME/IP通信 当车载以太网的SOME/IP服务发现协议突然停止响应时,仪表盘上的故障指示灯像圣诞树一样亮起——这是每个汽车电子工程师的噩梦。传统基于AutoSAR的开发流程中,网络通信问题…...
OpenClaw-Turbo:基于Playwright的高效网页数据抓取框架实战指南
1. 项目概述与核心价值最近在折腾一些自动化流程,特别是涉及到网页数据抓取和表单交互的场景,发现一个叫kird89/OpenClaw-Turbo的项目在社区里讨论度挺高。乍一看这个名字,可能会联想到“机械爪”或者“涡轮增压”,感觉是个挺硬核…...
构建AI智能体长期记忆系统:向量检索与分层存储实战
1. 项目概述:一个为AI智能体打造的“记忆宫殿”如果你最近在折腾AI智能体,比如用Cursor、Claude或者GPT-4的API来构建一些自动化工作流,那你大概率会遇到一个头疼的问题:上下文遗忘。智能体就像一个记忆力只有几页纸的“金鱼”&am…...
VSCode光标增强:提升编码专注度的视觉优化方案
1. 项目概述:一个为开发者打造的专注光标 如果你和我一样,每天有超过8小时的时间是在代码编辑器里度过的,那你一定对那个闪烁的光标再熟悉不过了。它是指令的起点,是思维的锚点,但很多时候,它也是一个容易被…...
从白炽灯到LED:家庭节日照明升级的技术原理、选购与实战指南
1. 从白炽灯到LED:一个拖延了三年才完成的家庭照明升级 每年一到这个时候,看着邻居家窗户上闪烁的彩灯,再看看自家车库里那几箱缠成一团、每年都要花半天时间测试维修的旧灯串,我就下定决心:今年一定要换成LED的。这个…...
LLM工作流引擎:从图化编排到自动化AI任务系统构建
1. 项目概述:当大语言模型遇上工作流引擎最近在开源社区里,一个名为styles01/flow-llm的项目引起了我的注意。乍一看,这像是一个将“工作流”(Flow)与“大语言模型”(LLM)结合起来的工具。作为一…...
桌面软件 vs 微信小程序:2026年B站字幕提取工具推荐怎么选
同样是提取B站视频字幕,用传统的桌面软件和用微信小程序的体验差别比较大。前者需要下载安装、占用硬盘空间,后者打开就能用。我会先讲提词匠这个微信小程序,因为它和B站字幕提取的需求对得特别紧——不仅能处理本地视频,还能直接…...
