【STM32】F103 时钟树

news2024/12/25 13:50:46

STM32F103是一款基于ARM Cortex-M3内核的32位微控制器,它具有丰富的外设资源和灵活的时钟配置。本文将从以下几个方面介绍STM32F103的时钟树:

  • 时钟树的概念和作用
  • 时钟树的组成和分类
  • 时钟树的配置方法和步骤
  • 时钟树的应用实例

  • 一、时钟树的概念和作用
  • 二、时钟树的组成和分类
  • 三、时钟树的配置方法和步骤

一、时钟树的概念和作用

时钟树是STM32为了实现低功耗而设计的功能完善构成复杂的时钟系统,它可以根据不同的外设和应用场合,选择合适的时钟源和频率,以提高系统性能和降低功耗

时钟树的主要作用有以下几点:

  • 提供系统时钟(SYSCLK),即CPU内核工作的机器周期,决定了系统运行的速度;
  • 提供AHB总线时钟(HCLK),即高性能总线工作的频率,连接CPU、内存、DMA等高速设备;
  • 提供APB1和APB2总线时钟(PCLK1PCLK2),即低速总线工作的频率,连接各种外设如GPIO、UART、TIM等;
  • 提供RTC时钟(RTCLK),即实时时钟工作的频率,用于提供精确的时间信息;
  • 提供USB时钟(USBCLK),即USB外设工作的频率,用于实现USB通信功能;
  • 提供MCO时钟输出(MCO),即微控制器时钟输出引脚,可以输出不同的时钟信号给外部设备;

二、时钟树的组成和分类

STM32F103的时钟树由四个时钟源、一个总线矩阵、一个PLL(锁相环)倍频器、一个CSS(时钟安全系统)检测器、一个USB预分频器、一个RTC预分频器、一个MCO输出选择器等部分组成。

STM32F103的时钟树可以分为以下六部分:

  • 高速外部时钟(HSE):由外部晶振或者信号源提供,频率范围为4~16MHz,通常使用8MHz的晶振。HSE可以直接作为系统时钟或者经过PLL倍频后作为系统时钟,也可以经过预分频后提供给RTC或者MCO;
  • 高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,精度和稳定性较低。HSI可以直接作为系统时钟或者经过PLL倍频后作为系统时钟,也可以提供给MCO;
  • 低速外部时钟(LSE):由外部晶振或者信号源提供,主要提供给RTC模块,所以一般使用32.768KHz的晶振。LSE可以直接作为RTC时钟或者经过预分频后提供给RTC或者MCO;
  • 低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给RTC模块,频率大约为40KHz。LSI可以直接作为RTC时钟或者提供给MCO;
  • 总线矩阵:由多层AHB总线矩阵构成,用于连接Cortex-M内核、DMA控制器、外设和存储器。总线矩阵包括以下几条总线:
    • ICode总线:用于访问存储空间里指令的总线;
    • DCode总线:用于访问存储空间里数据的总线;
    • System总线:用于访问指令、数据以及调试模块接口;
    • DMA总线:用于内存与外设之间的数据传输;
    • AHB总线:高性能总线,连接CPU、内存、DMA等高速设备,最高频率可达72MHz;
    • APB1总线:低速外设总线,连接DAC、UART等外设,最高频率可达36MHz;
    • APB2总线:高速外设总线,连接ADC、GPIO等外设,最高频率可达72MHz;
  • PLL(锁相环)倍频器:用于将输入的时钟信号进行倍频,以提高系统时钟的频率。PLL的输入时钟源可以是HSI/2或者HSE,倍频系数可以是2~16之间的整数。PLL的输出时钟可以作为系统时钟或者提供给USB预分频器或者MCO;

图中名词释义:

  • PLLXTPRE是一个分频器,它可以选择HSE时钟的一分频或二分频作为PLL的输入时钟源;
  • PLLSRC是一个选择器,它可以选择HSI时钟的二分频或HSE时钟(经过PLLXTPRE分频)作为PLL的输入时钟源;
  • PLLMUL是一个倍频器,它可以将PLL的输入时钟源进行2~16倍的倍频,得到PLL的输出时钟源;
  • prescalear:预分频。

在这里插入图片描述

三、时钟树的配置方法和步骤

STM32F103的时钟树的配置主要涉及到以下几个寄存器:

  • RCC_CR(时钟控制寄存器):用于控制HSE、HSI、PLL、CSS等时钟源的开启、关闭和就绪状态;
  • RCC_CFGR(时钟配置寄存器):用于控制系统时钟源的选择、AHB、APB1、APB2、USB等总线的预分频系数、PLL的输入时钟源和倍频系数等;
  • RCC_CIR(时钟中断寄存器):用于控制和清除各种时钟源就绪中断和CSS中断;
  • RCC_APB2RSTR(APB2外设复位寄存器):用于控制APB2外设的复位状态;
  • RCC_APB1RSTR(APB1外设复位寄存器):用于控制APB1外设的复位状态;
  • RCC_AHBENR(AHB外设使能寄存器):用于控制AHB外设的时钟使能状态;
  • RCC_APB2ENR(APB2外设使能寄存器):用于控制APB2外设的时钟使能状态;
  • RCC_APB1ENR(APB1外设使能寄存器):用于控制APB1外设的时钟使能状态;
  • RCC_BDCR(备份域控制寄存器):用于控制LSE、RTC等备份域相关的功能;
  • RCC_CSR(控制/状态寄存器):用于控制LSI、CSS等功能以及显示复位标志;

STM32F103的时钟树的配置一般遵循以下步骤:

  1. 根据需要选择合适的时钟源,例如HSE或者HSI,并通过设置RCC_CR寄存器相应的位来开启或关闭该时钟源;
  2. 根据需要选择是否使用PLL,并通过设置RCC_CFGR寄存器相应的位来选择PLL的输入时钟源和倍频系数,以及开启或关闭PLL;
  3. 根据需要选择系统时钟源,并通过设置RCC_CFGR寄存器相应的位来选择系统时钟源为HSE、HSI或者PLLCLK;
  4. 根据需要设置AHB、APB1、APB2等总线的预分频系数,并通过设置RCC_CFGR寄存器相应的位来设置预分频

TM32的各种外设应该如何选择时钟频率的原则如下:

  • 外设的时钟频率应该小于或等于系统时钟频率(SYSCLK),否则会导致外设无法正常工作;
  • 外设的时钟频率应该满足外设的功能需求,例如定时器的精度、串口的波特率、ADC的采样速率等;
  • 外设的时钟频率应该考虑功耗和电磁干扰的影响,一般来说,时钟频率越高,功耗越大,电磁干扰越严重。


~

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

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

相关文章

如何通过Nacos获取当前服务注册的IP信息

一台机器可能存在多个网卡也就同时存在多个IP地址,如果我想知道我这个服务在向Nacos注册的时候使用的哪一个IP该怎么获取呢? 非常简单,你可以通过这种方式获取 import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import org.springframework.boot.CommandLineRunne…

Angular 调试 —— 一个真实的多重循环导致的Bug

导致性能问题的原因可能很复杂&#xff0c;也可能很简单&#xff0c;今天让我们来看一个现实的例子。一个多重循环导致列表卡死。 startDemo() {this.processing true// 创建复杂数据结构const data [];for (let i 0; i < 5000; i) {const innerArray [];for (let j …

【数据压缩】LZ77算法原理及实现

1. 引言 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文《A Universal Algorithm for Sequential Data Compression》中提出。 基于统计的数据压缩编码,比如Huffman编码,需要得到先验知识——信源的字符频率,然后进…

EasyExcel导出csv文件,用Office Excel打开乱码

1.前言 导出的列里有中文&#xff0c;导出后用Excel打开乱码 2.原因 搜索相关资料&#xff0c;csv和excel的编码不一致&#xff0c;需要在导出csv的时候设置编码GBK 3.验证

多级时间轮定时器

一. 多级时间轮实现框架 ​上图是5个时间轮级联的效果图。中间的大轮是工作轮&#xff0c;只有在它上的任务才会被执行&#xff1b;其他轮上的任务时间到后迁移到下一级轮上&#xff0c;他们最终都会迁移到工作轮上而被调度执行。 多级时间轮的原理也容易理解&#xff1a;就拿时…

实用工具|教你如何使用备份神器 Rclone,手把手保姆级教程

目录 什么是Rclone 功能 特性 支持的提供商 虚拟提供商 使用 安装 配置 语法 命令列表 常用参数 日志 过滤 环境变量 最佳实践 什么是Rclone Rclone是一个用于管理云存储上的文件的命令行程序。它是云供应商web存储接口的一个功能丰富的替代方案。超过40种云存储…

【Java高级编程】Java集合

Java集合 1、Java集合框架概述1.1、集合框架的概述1.2、集合框架 2、Collection接口方法3、Iterator迭代器接口3.1、Iterator迭代器概述3.1、Iterator的使用 4、Conllection子接口一&#xff1a;List4.1、List框架4.2、ArrayList的源码分析4.3、面试题&#xff1a;ArrayList、L…

掌握这些vue内容,让你在提升代码复用上不再纠结!

前端工程化的最终目的都是为了能够更好地维护代码。代码复用是提升效率和可维护性的利器。 vue 中针对不同场景和业务情况&#xff0c;提供了各种方式。全面了解这些内容&#xff0c;可以在开发过程中让你得心应手&#xff01; 方式建议组件主要的构建模块组合式函数侧重于有状…

【单片机】STM32单片机,定时器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

文章目录 STM32中文参考手册V10.pdfTIM1 的四路PWMTIM2 的四路PWMTIM3 的四路PWMTIM4 的四路PWM STM32中文参考手册V10.pdf 在《STM32中文参考手册V10.pdf》有写&#xff1a; TIM1 的四路PWM TIM1 的PWM是带互补输出的&#xff0c;较为高级和复杂&#xff0c;有兴趣可以参…

Z3Ordering编码及查询c++实现 (GeoMesa翻译)

网上搜了很多Z3-Ordering实现没搜到,通过 sfcurve-master和geomesa-geomesa-3.2.2 得scala代码改编而来, 环境为C, vs2015, 理论上windows和Linux都可以用. 不依赖任何库, 这项自身理解和翻译断断续续进行, 最近终于有一点进展, 本次放出Z3, 待全部实现完毕将直接挂出 详细…

知识图谱实战

一、知识图谱简单介绍 二、知识图谱的构建 三、知识图谱问答方案 NL2SQL:自然语言转为SQL语句 bulid_graph.py """知识图谱""" #三元组&#xff1a;实体-关系-实体 实体-属性-属性值import re,json from py2neo import Graph from collectio…

shell脚本检测进程的CPU内存占用率

使用方法&#xff1a; 把xxx替换为自己进程的名字&#xff0c;然后直接运行该脚本即可在当前目录下产生一个叫做memory_info.txt的文件&#xff0c;记录进程的CPU内存占用率信息。可以用来查看自己进程对系统资源的消耗情况。 #!/bin/bashprocess"xxx" output_file…

C#,数值计算——算术编码压缩技术与方法(Compression by Arithmetic Coding)源代码

算术编码的数据压缩 算术编码是无损和有损数据压缩算法中常用的一种算法。 这是一种熵编码技术&#xff0c;其中常见符号比罕见符号用更少的比特进行编码。与诸如霍夫曼编码之类的众所周知的技术相比&#xff0c;它具有一些优势。本文将详细描述CACM87算术编码的实现&#xf…

Uniapp_分包

前言&#xff1a;由于微信小程序的包只限制压缩不能超过2M&#xff0c;当开发的页面过多就要进行分包操作,tabbar页面不能进行分包其他页面可以 最多5个分包 不超过20M 第一步、找到这个位置 然后把这个代码复制进去 开启分包 "optimization" : {"subPackages&…

Linux系统【VS】Windows系统

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

FPS(CF、CS GO、PUBG、APEX、瓦罗兰) AI YOLOV5 自瞄 模型 权重

YOLOV5的各种AI自瞄权重&#xff0c;有需要的联系 联系方式 如果对上面的资源有需要&#xff0c;私聊或者留言或者进入下面项目了解详细内容 联系方式 加我时&#xff0c;请备注所需要的权重 https://gitee.com/wcx895278175/cf-ai-yolov5-self-aiming

【Oracle】springboot连接Oracle 集成mybatis、druid

目录 项目结构与库表数据pom.xmlapplication.yml实体类Mappercontroller接口测试 基于spring-boot 2.7.11&#xff0c;连接Oracle 11g 仅做一个简单的示例 特别说明&#xff08;不一定正确&#xff0c;还请指正&#xff09;&#xff1a;我Oracle也不熟&#xff0c;但据我观察发…

【Java高级语法】(二十三)系统辅助工具类:解析System类,一个系统操作与资源管理工具类~

Java高级语法详解之系统辅助工具类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 System类常用方法3.2 使用技巧 4️⃣ 应用场景&#x1f33e; 总结 1️⃣ 概念 Java的System类是Java标准库中一个重要且常用的类。它被设计用于提供与系统相关的操作和信息访问功能。System类的设计…

【算法系列之贪心算法III】leetcode135. 分发糖果

134. 加油站 力扣题目链接 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定…

创建临时文件mkstemp()和tmpfile()

有些程序需要创建一些临时文件&#xff0c;仅供其在运行期间使用&#xff0c;程序终止后即行删除。例如&#xff0c;很多编译器程序会在编译过程中创建临时文件。GNU C语言函数库为此而提供了一系列库函数。&#xff08;之所以有“一系列”的库函数&#xff0c;部分原因是由于这…