CM3/CM4时钟系统

CM3/4时钟系统

  • 1. CM3时钟系统
    • 1.1 输入时钟源------------------A
    • 1.2 锁相环PLL------------------B
    • 1.3 系统时钟SYSCLK--------C/D/E/F/G
  • 2. CM4时钟系统
    • 2.1 输入时钟源------------------A
    • 2.2 锁相环PLL------------------B
    • 2.3 系统时钟SYSCLK--------C/D/E
    • 2.4 时钟信号输出MCO--------F

  数字电路的知识告诉我们:任意复杂的电路控制系统都可以经由门电路组成的组合电路实现。STM32 内部也是由多种多样的电路模块组合在一起实现的。当一个电路越复杂,在达到正确的输出结果前,它可能因为延时会有一些短暂的中间状态,而这些中间状态有时会导致输出结果会有一个短暂的错误,这叫做电路中的“毛刺现象”,如果电路需要运行得足够快,那么这些错误状态会被其它电路作为输入采样,最终形成一系列的系统错误。为了解决这个问题,在单片机系统中,设计时以时序电路控制替代纯粹的组合电路,在每一级输出结果前对各个信号进行采样,从而使得电路中某些信号即使出现延时也可以保证各个信号的同步,可以避免电路中发生的“毛刺现象”,达到精确控制输出的效果。

  由于时序电路的重要性,因此在 MCU 设计时就设计了专门用于控制时序的电路,在芯片设计中称为时钟树设计。由此设计出来的时钟,可以精确控制我们的单片机系统,一个 MCU 越复杂,时钟系统也会相应地变得复杂,如 STM32F4 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。对于 STM32F4 系列的芯片,正常工作的主频可以达到 168Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 Khz 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。

  STM32 本身非常复杂,外设非常的多,为了保持低功耗工作,STM32 的主控默认不开启这些外设功能。用户可以根据自己的需要决定 STM32 芯片要使用的功能,这个功能开关在 STM32主控中也就是各个外设的时钟。

1. CM3时钟系统

在这里插入图片描述
A 表示输入时钟源,可分为外部时钟源和内部时钟源;
B 为一个特殊的振荡电路锁相环“PLL”;
C 为系统时钟源选择器,决定 MCU 的系统主时钟“SYSCLK”的大小;AHB 预分频器将 SYSCLK 分频或不分频后分发给其他外设进行处理;
D 为定时器等外设的时钟源 APB1;
E 为定时器等外设的时钟源APB2;
F 为 Cortex-M 内核系统的时钟;
G 为 STM32 的时钟输出功能。

1.1 输入时钟源------------------A

2 个外部时钟源:外部时钟源就是从外部通过接晶振的方式获取时钟源,故而都有精度高的优点。

  • 高速外部振荡器 HSE:外接石英/陶瓷谐振器,频率为 4MHz~26MHz。本开发板使用的是 8MHz。
  • 低速外部振荡器 LSE:外接 32.768kHz 石英晶体,主要作用于 RTC 的时钟源。


2 个内部时钟源:内部时钟源就是芯片上电即可产生,不需要借助外部电路。

  • 高速内部振荡器 HSI:由内部 RC 振荡器产生,频率为 8MHz。芯片上电时默认由内部的 HSI 时钟启动。
  • 低速内部振荡器 LSI:由内部 RC 振荡器产生,频率为 40kHz,可作为独立看门狗的时钟源。

1.2 锁相环PLL------------------B

锁相环是自动控制系统中常用的一个反馈电路,在 STM32 主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。
输入时钟净化是利用锁相环电路的反馈机制实现;
输入时钟倍频用于使芯片在更高且频率稳定的时钟下工作。

在这里插入图片描述

在 STM32 中,锁相环的输出也可以作为芯片系统的时钟源。


标号 ①由寄存器 RCC_CFGR 的 bit17 位控制(HSE不分频/HSE2分频),经过 HSE 分频器处理后的输出振荡时钟信号比直接输入的时钟信号更稳定。

标号 ②是 PLL 时钟源的选择器,由寄存器 RCC_CFGR 的 bit16 位进行控制,选择 HSIHSE 作为输入源。

标号 ③是 PLL 倍频系数,由寄存器 RCC_CFGR 的 bit8~21 (PLLMUL)位进行设置,设置范围是 2~16。


例如:要实现 72MHz 的主频率,我们通过选择 HSE 不分频作为 PLL 输入的时钟信号,即输入 8Mhz,通过标号③选择倍频因子,可选择 2-16 倍频,我们选择 9 倍频,这样可以得到时钟信号为 8*9=72MHz。

1.3 系统时钟SYSCLK--------C/D/E/F/G

  STM32 的系统时钟 SYSCLK 为整个芯片提供了时序信号。我们已经大致知道 STM32 主控是时序电路链接起来的。对于相同的稳定运行的电路,时钟频率越高,指令的执行速度越快,单位时间能处理的功能越多。STM32 的系统时钟是可配置的,在 STM32F4 系列中,它可以为HSI、PLLCLK、HSE 中的一个,通过 CFGR 的位 SW[1:0]设置。
  如图可知,AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频得到。

在这里插入图片描述

标号 C 是系统时钟输入选择【外部高速时钟 HSE(8M)、内部高速时钟 HSI(8M)、经过倍频的 PLL CLK(72M)】
标号 D 是AHB 预分频器【分频系数为 1,2,4,8,16,32,64,128,256】
标号 E 是低速 APB1 预分频器【分频因子未 1,2,4,8,16】,片上低速的外设就挂载在该总线上,例如有看门狗定时器定时器 2/3/4/5/6/7RTC 时钟USART2/3/4/5SPI2(I2S2)SPI3(I2S3)I2C1 I2C2CANUSB 设备2 个 DAC
标号 F 是高速 APB2 预分频器【分频因子未 1,2,4,8,16】,与 APB2 高速总线链接的外设有外部中断唤醒控制7 个通用目的输入/输出口(PA、PB、PC、PD、PE、PF 和 PG)定时器 1定时器 8SPI1USART13 个 ADC 内部温度传感器

AHB 总线时钟直接作为 SDIOFSMCAHB 总线Cortex 内核存储器DMA的 HCLK 时钟,并作为 Cortex 内核自由运行时钟 FCLK。

在这里插入图片描述

标号 H 是USB CLK,是一个通用串行接口时钟,时钟来源于 PLLCLK。
标号 I 是MCO 输出内部时钟,STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信号输出,可以选择为 PLL 输出的 2 分频、HSI、HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。时钟的选择由时钟配置寄存器(RCC_CFGR)中的 MCO[2:0]位控制。
标号 J 是RTC 定时器,其时钟源为 HSE/128、LSE 或 LSI。

2. CM4时钟系统

在这里插入图片描述
A 表示输入时钟源,可分为外部时钟源和内部时钟源;
B 为一个特殊的振荡电路锁相环“PLL”;
C 为系统时钟源选择器,决定 MCU 的系统主时钟“SYSCLK”的大小;AHB 预分频器将 SYSCLK 分频或不分频后分发给其他外设进行处理;
D 为内核系统的时钟和使能单元;
E 为定时器以及其它外设的时钟源 APB1/APB2;
F 为 STM32 的时钟输出功能;

2.1 输入时钟源------------------A

2 个外部时钟源:外部时钟源就是从外部通过接晶振的方式获取时钟源,故而都有精度高的优点。

  • 高速外部振荡器 HSE:外接石英/陶瓷谐振器,频率为 4MHz~26MHz。本开发板使用的是 8MHz。
  • 低速外部振荡器 LSE:外接 32.768kHz 石英晶体,主要作用于 RTC 的时钟源。


2 个内部时钟源:内部时钟源就是芯片上电即可产生,不需要借助外部电路。

  • 高速内部振荡器 HSI:由内部 RC 振荡器产生,频率为 16MHz。芯片上电时默认由内部的 HSI 时钟启动。
  • 低速内部振荡器 LSI:由内部 RC 振荡器产生,频率为 32kHz,可作为独立看门狗的时钟源。

2.2 锁相环PLL------------------B

锁相环是自动控制系统中常用的一个反馈电路,在 STM32 主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。
输入时钟净化是利用锁相环电路的反馈机制实现;
输入时钟倍频用于使芯片在更高且频率稳定的时钟下工作。

在这里插入图片描述

在 STM32 中,锁相环的输出也可以作为芯片系统的时钟源。


标号 ① 是 PLL 时钟源的选择器,由寄存器 RCC_PLLCFGR 的 bit22 位进行控制,选择 HSIHSE 作为输入源。
标号 ② 是 PLL 输入时钟的分频系数,由寄存器 RCC_PLLCFGR 的 bit0~5 (PLLM)位进行设置,设置范围是 0~63。
标号 ③ 是 PLL 倍频系数,由寄存器 RCC_PLLCFGR 的 bit6~14 (PLLN)位进行设置,设置范围是 192~432。


例如:要实现 168MHz 的主频率,通过选择 HSE 分频作为 PLL 输入的时钟信号,输入 8Mhz,8 分频,即 1MHz,通过标号③选择倍频因子,我们选择 336 倍频,这样可以得到时钟信号为 1*336=336MHz,然后经过 2 分频,得到 168MHz。

2.3 系统时钟SYSCLK--------C/D/E

  STM32 的系统时钟 SYSCLK 为整个芯片提供了时序信号。我们已经大致知道 STM32 主控是时序电路链接起来的。对于相同的稳定运行的电路,时钟频率越高,指令的执行速度越快,单位时间能处理的功能越多。STM32 的系统时钟是可配置的,在 STM32F4 系列中,它可以为HSI、PLLCLK、HSE 中的一个,通过 CFGR 的位 SW[1:0]设置。
  如图可知,AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频得到。
在这里插入图片描述

标号 ④ 是系统时钟输入源选择【外部高速时钟 HSE(8M)、内部高速时钟 HSI(16M)、经过倍频的 PLL CLK(168M)】
标号 ⑤ 是AHB 预分频器【分频系数为 1,2,4,8,16,32,64,128,256,512】
标号 ⑥ 是低速 APB1 预分频器【分频系数为 1,2,4,8,16】,片上低速的外设就挂载在该总线上,例如有看门狗定时器定时器 2/3/4/5/6/7RTC 时钟USART2/3/4/5SPI2(I2S2) SPI3(I2S3)I2C1~3CAN2 个 DAC
标号 ⑦ 是高速 APB2 预分频器【分频系数为 1,2,4,8,16】,高速总线连接的外设有定时器 1/8/9/10/11SPI1USART1USART63 个 ADCSDIO 接口
标号 ⑧决定定时器时钟频率,该位由硬件自动设置【APB 预分频器为 1,定时器时钟频率等于 APB 域的频率,否则,等于 APB 域的频率的两倍】

AHB 总线时钟直接作为 GPIO(A\B\C\D\E\F\G\H\I\)以太网DCMIFSMCAHB总线Cortex 内核存储器DMA 的 HCLK 时钟,并作为 Cortex 内核自由运行时钟 FCLK
在这里插入图片描述
标号 ⑨ 是 RTC 时钟,其时钟源有三个途径:HSE/x(x = 2~31)、LSE 或 LSI。

2.4 时钟信号输出MCO--------F

  

标号 ⑩ 是 MCO 时钟输出,其作用是为外部器件提供时钟。MCO1、MCO2 两个时钟输出引脚给外部器件提供时钟源(分别由 PA8 和 PC9 复用功能实现),每个引脚可以选择一个时钟源,通过 RCC 时钟配置寄存器 (RCC_CFGR)进行配置。
标号 ⑪ MCO1 和 MCO2 的预分频器,取值范围均为:1~5。
标号 ⑫ MCO1(外部器件的输出时钟 1)时钟源,MCO2(外部器件的输出时钟 2)时钟源。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ实现生产者消费者

一.启动MQ 注意管理员身份进入cmd才行,我这里是在本地安装的MQ,推荐使用虚拟机安装 二.思路 官方解释RabbitMQ结构: 自我理解RabbitMQ结构: 其实RabbitMQ的服务器就像邮局一样,我们的生产者和消费者对于这个服务器来说都是消费者,因为服务器都可以向两者发送消息 环境准备 …

MySQL--》如何在SQL中巧妙运用函数与约束,优化数据处理与验证?

目录 函数使用 字符串函数 数值函数 日期函数 流程函数 约束 外键约束 约束规则 函数使用 函数是指一段可以直接被另一段程序调用的程序或代码,在mysql当中有许多常见的内置函数,接下来开始对这些内置函数及其作用进行简单的讲解和使用&#xf…

OpenLinkSaas使用手册-待办事项和通知中心

在OpenLinkSaas工作台上,你可以查看待办事项和未读通知。 待办事项 目前待办事项支持: 个人待办项目待办:在项目中指派给你的任务/缺陷Git待办:在Git仓库中指标给你的Issue,目前只有在AtomGit和Gitee账号登录时才支持。 通知中心 通知中心支持Git通知和邮件通知两种…

【Unity】 HTFramework框架(五十八)【进阶篇】资源及代码热更新实战演示(Deployment + HybridCLR)

更新日期:2025年1月2日。 Github源码:[点我获取源码] 索引 资源及代码热更新实战演示运行演示Demo1.克隆项目工程2.更新子模块3.打开项目4.打开入口场景5.设置远端资源服务器地址6.导入HybridCLR7.初始化HybridCLR8.发布项目9.部署资源版本10.运行Exe11.…

路由基本配置实验

路由器用于实现不同类型网络之间的互联。 路由器转发ip分组的基础是路由表。 路由表中的路由项分为直连路由项、静态路由项和动态路由项。 通过配置路由器接口的ip地址和子网掩码自动生成直连路由项。 通过手工配置创建静态路由项。 热备份路由器协议允许将由多个路由器组…

CTFshow—远程命令执行

29-35 Web29 代码利用正则匹配过滤了flag,后面加了/i所以不区分大小写。 可以利用通配符绕过 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file * ? 匹配任何一个字符(不…

idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署

1&#xff0c;设置一 2&#xff0c;设置二 设置二&#xff08;旧版本&#xff09; CtrlShiftAlt/ 点击弹出框中Registry... 引入&#xff08;如果报错&#xff0c;换不同的版本&#xff09; <dependency><groupId>org.springframework.boot</groupId><a…

Github拉取项目报错解决

前言 昨天在拉取github上面的项目报错了&#xff0c;有好几个月没用github了&#xff0c;命令如下&#xff1a; git clone gitgithub.com:zhszstudy/git-test.git报错信息&#xff1a; ssh: connect to host github.com port 22: Connection timed out fatal: Could not rea…

TypeScript 常用类型

文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言&#xff1…

ARM200~500部署

前提&#xff1a;数据库已经安装好&#xff0c;并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件&#xff0c;更改小区名称和IP&#xff0c;并将文件上传到/…

Linux buildroot和ubuntu的异同点

Buildroot 和 Ubuntu 都是 Linux 系统的操作环境,但它们的设计理念和使用场景有很大的不同。 一、定义与目标 Buildroot Buildroot 是一个用于生成嵌入式 Linux 系统的工具集,专注于交叉编译和构建嵌入式设备的最小 Linux 环境。它的目标是为嵌入式系统提供定制化和优化的…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

免登录游客卡密发放系统PHP网站源码

源码介绍&#xff1a; 这是一个简单易用的卡密验证系统&#xff0c;主要功能包括&#xff1a; 卡密管理和验证&#xff0c;多模板支持&#xff0c;响应式设计&#xff0c;验证码保护&#xff0c;防刷机制&#xff0c;简洁的用户界面&#xff0c; 支持自定义模板&#xff0c;移…

LeetCode - 初级算法 数组(旋转数组)

旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,

BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作

文章目录 前言一、什么是迭代器&#xff1f;二、标准迭代器的实现方法1、自定义一个类CustomList2、让CustomList继承IEnumerable接口3、再继承IEnumerator接口4、完善迭代器功能5、**foreach遍历的本质**&#xff1a;6、在Reset方法里把光标复原 三、用yield return语法糖实现…

WordPress新安装只安装主题后发现只有首页能打开,其他路由页面都是404,并且Elementor都打不开

找到wordpress安装路径的这个文件&#xff0c;有发现里面没有内容&#xff0c;添加下面内容保存&#xff0c;重启服务器即可 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ – [L] RewriteCond %{REQUEST_FILEN…

uniapp中使用ruoyiPlus中的加密使用(crypto-js)

package.json中添加 "crypto-js": "^4.2.0", "jsencrypt": "^3.3.2",但是vue2中使用 import CryptoJS from cryptojs; 这一步就会报错 参照 参照这里&#xff1a;vue2使用CryptoJS实现信息加解密 根目录下的js文档中新增一个AESwork.…

无需训练!多提示视频生成最新SOTA!港中文腾讯等发布DiTCtrl:基于MM-DiT架构

文章链接&#xff1a;https://arxiv.org/pdf/2412.18597 项目链接&#xff1a;https://github.com/TencentARC/DiTCtrl 亮点直击 DiTCtrl&#xff0c;这是一种基于MM-DiT架构的、首次无需调优的多提示视频生成方法。本文的方法结合了新颖的KV共享机制和隐混合策略&#xff0c;使…

RabbitMQ基础篇之快速入门

文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列&#xff1a;创建 hello.queue1 和 hello.queue2 两个队列。消息发送…