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部件了。

三、时钟配置补充

  1. FCLK,自由运行时钟:当我们需要节省电量需要STM32进行低功耗模式之一的“停止模式”时,AHB总线会停止运行,HCLK会停止传输时钟脉冲,所有连接到AHB总线上的外设都会停止运行。FCLK实际上连接是AHB分频器,当STM32处于休眠状态是,FCLK依旧处于运行态,为中断采样提供时钟信号
  2. To FLITFCLK:为Flash编程接口的时钟,它的时钟源永远来自于HSI。 
  3. To USB:为USD功能提供的系统时钟,来自于PLL锁相环。
  4. Clock Security System,CSS时钟安全系统:原始时钟源为HSE或为倍频过的HSE可选择开启。它可以在HSE发生故障时,立即将时钟源切换为HSI,并且产生中断。
  5. RTC/看门狗时钟树:一个独立的时钟树,时钟源是低速内部时钟LSI和低速外部时钟LSE,或者高速外部时钟的“/128”分频。挂在上面的是RTC实时时钟和看门狗。
  6. Master Clock Output,时钟输出功能:在基本设置->System Core->RCC 界面中勾选Master Clock Output 就可以使用该功能。PA8引脚就会被设置为RCC_MCO。在根据时钟配置界面中选择其中一个时钟信号输出,PA8就可以获取到数据

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

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

相关文章

django+drf+vue 简单系统搭建 (3) - 基于类的视图

传统Django中有基于类的视图,Drf中自然也有,目的都是实现功能的模块化继承,封装,减少重复代码。 首先在视图中新增下面代码: # simpletool/views.pyfrom rest_framework.views import APIView from simpletool.seria…

Java —— String类

目录 1. String类的重要性 2. 常用方法 2.1 字符串构造 2.2 String对象的比较 2.3 字符串查找 2.4 转化 1. 数值和字符串转化 2. 大小写转换 3. 字符串转数组 4. 格式化 2.5 字符串替换 2.6 字符串拆分 2.7 字符串截取 2.8 其他操作方法 2.9 字符串常量池 2.9.1 创建对象的思考…

selenium下载安装对应的chromedriver并执行

文章目录 selenium对应版本chrome驱动下载114以及之前的chrome版本119/120/121的chrome版本 chromedriver安装执行selenium代码 selenium Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中&#xff0c…

Redis 5 种基本数据类型详解

Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据类型是直接提供给用户使用的&…

VPX 插座(VITA46)介绍及应用 (简单介绍)

1. VPX 插座的介绍 VPX是VITA(VME International Trade Association, VME国际贸易协会)组织于2007年在其VME总线基础上提出的新一代高速串行总线标准。VPX总线的基本规范、机械结构和总线信号等具体内容均在ANSI/VITA46系列技术规范中定义。VPX就是基于高速串行总线的新一代总线…

PyTorch中并行训练的几种方式

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

小诺2.0开源版工程启动

小诺是一款开源的前后端开发框架,同若依、SpringBladex一样可作为私活、外包脚手架。 开源地址:Snowy: 最新:💖国内首个国密前后分离快速开发平台💖,采用Vue3AntDesignVue3 ViteSpringBootMpHuToolSaToke…

操作系统(三)| 进程管理上 进程状态 同步 互斥

目录 1 进程和程序区别 2 进程状态 2.1 进程的5种基本状态 2.2 进程状态之间转换 2.3 七状态模型 3 进程描述 3.1 进程控制块 PCB 3.2 进程块组织方式 4 进程控制 5 进程同步 互斥 5.1 区分进程互斥和同步 5.2 核心方案 5.3 其他方案 方案1 设置锁变量 方案2 严…

C# 电脑程序控制电路开关

最近在做系统的监控,想到能不能做一个酷点的功能,当收到异常消息时桌面上的红色小灯(或报警灯)会亮起来。于是在淘宝上找了一下,有这种小设备,插入USB设备,通过串口控制这个设备的继电器来实现&…

中级程序员——vue3+js+git面试题

🙂博主:小猫娃来啦 🙂文章核心:vue3jsgit面试题 文章目录 vue3最大缺点和优点?vue3组合式里面,如何去调用子组件里面的方法?watch和watcheffect有什么区别?计算属性和watch的区别是什…

MySQL数据库系统教程

基础篇 通用语法及分类 DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用…

ArcGIS教程——ArcGIS工具-按线分割面

功能说明 在ArcGIS数据处理过程中,有时需要沿线把面要素分割开,可以使用高级编辑中的分割面(Cut Polygon)工具。那么,如果要用线图层分割面图层该怎么办呢?地理遥感生态网平台开发了一个自定义模型工具。它…

学习笔记—吴恩达《AI for everyone》

【写在前面】 学习视频来源:B站“GPT中英字幕课程资源”(见图片水印)。 此文是自学笔记,主要是截图视频课件中的一些知识点,只做自学使用。 一. AI 介绍 二. 机器学习 Machine Learning 三. 什么是数据 What is AI 四…

你知道Linux操作系统的前世今生吗?Linux系统又该如何搭建呢?

文章目录 前言1. Linux 是什么1.1 Unix & Linux 发展历程图1.2 Linux 的发展1.3 Linux 的发行版 2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器 3. 使用终端软件连接到 Linux3.1 什么是终端软件3.2 下载安装 XShell3.3 使用 XShell 登陆主机 总结 前言 可能很多人都…

跳台阶游戏(Python排列组合函数itertools.combinations的应用)

给定台阶总数和两种单次可跳级数,编写自定义函数,计算所有的游戏组合方案数量。 (笔记模板由python脚本于2023年11月19日 19:18:48创建,本篇笔记适合熟悉python自定义函数编写,了解排列组合知识的coder翻阅) 【学习的细节是欢悦的…

多项式求和

题目描述 给定程序中 fun 函数的功能是:求出以下分数序列的前 n 项之和,并通过函数值返回 main 函数。 输入格式 输入参数。 输出格式 计算公式返回的结果。 输入输出样例 输入1 5 输出1 8.391667 python解: def fun(n):a1b2s0for…

mongoDB安装教程

安装及操作命令 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.0.tgz tar -zxvf mongodb-linux-x86_64-3.4.0.tgz#修改文件夹名字为mongodb-3.4.0 mv mongodb-linux-x86_64-3.4.0 mongodb-3.4.0# 在/opt/mongodb-3.4.0/conf目录下创建mongo.co…

设计模式-解析器-笔记

“领域规则”模式 在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特定领域,将稳日抽象为语法规则,从而给出在该领域下的一般性解决方案。 典型模式:Interpreter 动机(Motivation) 在…

MySQL 运算符二

逻辑运算符 逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0。 运算符号作用NOT 或 !逻辑非AND逻辑与OR逻辑或XOR逻辑异或 1、与 mysql> select 2 and 0; --------- | 2 and 0 | --------- | 0 | -…

微信小程序开发学习——顺序、选择、循环、数学函数

1.条件语句 只需在js中写JavaScript的条件语句就行 math对象&#xff1a; 代码如下&#xff1a; <!--pages/tiaojian/tiaojian.wxml--> <view class"box"><view class"title">输入x&#xff0c;条件输出y</view><view><…