【学习笔记】STM32F407探索者HAL库开发(四)F103时钟系统配置

【学习笔记】STM32F407探索者HAL库开发(四)F103时钟系统配置

  • 1 STM32F1时钟树
    • 1.1 STM32F103时钟系统图
    • 1.2 STM32F103时钟树简图
      • 1.2.1 高速部分
      • 1.2.2 低速部分
    • 1.3 函数配置
    • 1.4 时钟输出
    • 1.5 STM32CubeMX时钟树配置F1
    • 1.6 时钟系统对与嵌入式开发的重要性

在这里插入图片描述

1 STM32F1时钟树

在嵌入式开发中,时钟系统配置具有至关重要的地位。时钟是嵌入式系统的 “心跳”,为微控制器的中央处理单元(CPU)提供基本的时序信号。没有正确配置的时钟,CPU 无法按照预定的节奏执行指令,整个系统将无法正常工作。例如,时钟频率决定了 CPU 执行指令的速度。如果时钟频率设置过低,系统性能会受到严重影响,可能无法满足实时性要求;如果设置过高,可能会导致系统不稳定甚至损坏硬件。

1.1 STM32F103时钟系统图

简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波
在这里插入图片描述
以下是STM32F103时钟系统图
在这里插入图片描述

外部时钟源:
OSC_OUT / OSC_IN 外部高速晶振引脚
OSC32_OUT / OSC32_IN 外部低俗晶振引脚
在这里插入图片描述
在这里插入图片描述

在 STM32 中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。从时钟频率来分可以分为高速时钟源和低速时钟源,在这 5 个中 HIS,HSE 以及PLL 是高速时钟,LSI 和 LSE 是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中HSE 和 LSE 是外部时钟源,其他的是内部时钟源。下面我们看看STM32 的 5 个时钟源,我们讲解顺序是按图中红圈标示的顺序:
① HSI 是高速内部时钟,RC 振荡器,频率为 8MHz。
② HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHz。我们的开发板接的是 8M 的晶振。
③ LSI 是低速内部时钟,RC 振荡器,频率为 40kHz。独立看门狗的时钟源只能是 LSI,同时 LSI 还可以作为RTC 的时钟源。
④ LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是RTC 的时钟源。
⑤ PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2。倍频可选择为2~16 倍,但是其输出频率最大不得超过 72MHz。

H: high 高
L: low 低
S: speed 速
I:internal 内部
E: external 外部

1.2 STM32F103时钟树简图

1.2.1 高速部分

在这里插入图片描述
PLL为锁相环倍频输出,其时钟输入源可选择为 HSI/2、 HSE或者 HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过 72MHz。
F1系列的系统时钟SYSCLK,最大值72MHz(不考虑超频,稳定运行),8M+8M无法得到72M,想要得到72MHz,需要芯片内部的PLL锁相环,PLL内部是一个倍频器,乘法,*2~*16。HIS只能选择2分频,HSE可以选择1分频或者2分频。

分频之后(默认为1,不分频)到达HCLK。
HCLK,高速高性能时钟总线(AHB)
再次分频后通过两个桥达到APB1 / APB2总线,最大频率分别为36M / 72M,所以分频系数一般位2 / 1,

与此同时,HCLK上也会有外设,内核和该外设的时钟也都来自于HCLK。APB1 / APB2也挂载着大量外设。
在这里插入图片描述

1.2.2 低速部分

LSI可以作为IWDG(独立看门狗)的时钟源,精度要求不高。
也可以作为RCT(实时时钟)的时钟源,要求精度,所以优先使用外部低速,其次外部高速,其次内部低速。
在这里插入图片描述

1.3 函数配置

(1)时钟源、锁相环
在这里插入图片描述
(2)系统时钟、总线
在这里插入图片描述
(3)使能外设时钟(宏)
PPP代表任意外设,例如GPIO、ADC,需要外设工作,就要打开外设的时钟。默认情况下外设时钟都是关闭的,以此达到低功耗需求。
在这里插入图片描述
(4)扩展外设时钟函数 (RTC/ADC/USB)
HAL_RCCEx_PeriphCLKConfig(),不同系列的配置函数是不一样的。
Ex:拓展
Periph:外设
CLK:时钟

1.4 时钟输出

在这里插入图片描述

A. MCO 是 STM32 的一个时钟输出 IO(PA8),它可以选择一个时钟信号输出,可以选择为 PLL 输出的 2 分频、HSI、HSE、或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。
在这里插入图片描述
B. 这里是 RTC 时钟源,从图上可以看出,RTC 的时钟源可以选择 LSI,LSE,以及 HSE 的 128 分频。
C. 从图中可以看出 C 处USB 的时钟是来自PLL 时钟源。STM32 中有一个全速功能的 USB 模块,其串行接口引擎需要一个频率为 48MHz 的时钟源。该时钟源只能从PLL 输出端获取,可以选择为 1.5 分频或者 1 分频,也就是,当需要使用USB模块时,PLL 必须使能,并且时钟频率配置为 48MHz 或 72MHz。
D. D处就是 STM32 的系统时钟 SYSCLK,它是供 STM32 中绝大部分部件工作的时钟源。系统时钟可选择为 PLL 输出、HSI 或者HSE。系统时钟最大频率为 72MHz,当然你也可以超频,不过一般情况为了系统稳定性是没有必要冒风险去超频的。
E. 这里的 E 处是指其他所有外设了。从时钟图上可以看出,其他所有外设的时钟最终来源都是 SYSCLK。SYSCLK 通过 AHB 分频器分频后送给各模块使用。这些模块包括:
①、AHB 总线、内核、内存和DMA 使用的 HCLK 时钟。
②、通过 8 分频后送给Cortex 的系统定时器时钟,也就是 systick 了。
③、直接送给Cortex 的空闲运行时钟 FCLK。
④、送给 APB1 分频器。APB1 分频器输出一路供APB1 外设使用(PCLK1,最大频率 36MHz),另一路送给定时器(Timer)2、3、4 倍频器使用。
⑤、送给 APB2 分频器。APB2 分频器分频输出一路供 APB2 外设使用(PCLK2,最大频率 72MHz),另一路送给定时器(Timer)1 倍频器使用。

1.5 STM32CubeMX时钟树配置F1

在这里插入图片描述

1.6 时钟系统对与嵌入式开发的重要性

  1. 确保系统正常运行,时钟频率决定了 CPU 执行指令的速度。如果时钟频率设置过低,系统性能会受到严重影响,可能无法满足实时性要求;如果设置过高,可能会导致系统不稳定甚至损坏硬件。嵌入式系统中的各种外设,如定时器、串口、I2C、SPI 等,也需要时钟信号来进行正常的操作。不同的外设可能需要不同频率的时钟源,通过合理配置时钟系统,可以确保这些外设能够正常工作。例如,定时器需要一个准确的时钟源来进行时间测量和定时中断生成。如果时钟配置错误,定时器可能无法准确计时,导致定时功能失效。
  2. 优化系统性能,通过调整时钟频率,可以优化系统的处理速度。在一些对性能要求较高的应用中,如实时图像处理、高速数据采集等,可以适当提高时钟频率以加快数据处理速度。然而,提高时钟频率也会带来功耗增加和散热问题,需要在性能和功耗之间进行权衡。
  3. 降低功耗,合理配置时钟系统可以降低系统的功耗。在一些低功耗应用中,可以通过降低时钟频率、关闭不必要的时钟源或使用时钟门控技术来减少功耗。例如,在电池供电的设备中,降低系统的功耗可以延长电池寿命,提高设备的可用性。
  4. 数据传输与通信,在嵌入式系统中,经常需要进行数据传输和通信,如与外部设备进行串口通信、通过 SPI 或 I2C 总线与传感器或其他芯片进行数据交换等。这些通信接口通常需要特定的时钟频率和相位关系来确保数据的准确传输。正确配置时钟系统可以使不同设备之间的时钟同步,避免数据传输错误和通信故障。在一些复杂的嵌入式系统中,可能存在多个微控制器或处理器协同工作。通过配置时钟系统,可以实现这些处理器之间的时钟同步,确保它们能够正确地协调工作,提高系统的整体性能和可靠性。

总之,时钟系统配置是嵌入式开发中不可或缺的一部分。正确配置时钟系统可以确保系统正常运行、优化系统性能、满足外设同步要求,并适应不同的应用场景。开发人员需要深入了解所使用的微控制器的时钟系统架构和配置方法,根据具体的应用需求进行合理的时钟配置,以实现高效、可靠的嵌入式系统设计。

在这里插入图片描述

注:笔记内容来自正点原子官方HAL库开发教程,配合STM32F407探索者开发板

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

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

相关文章

Spring IDEA 2024 自动生成get和set以及toString方法

1.简介 在IDEA中使用自带功能可以自动生成get和set以及toString方法 2.步骤 在目标类中右键,选择生成 选择Getter和Setter就可以生成每个属性对应的set和get方法, 选择toString就可以生成类的toString方法,

Linux 文件系统(下)

目录 一.文件系统 1.文件在磁盘上的存储方式 a.盘面、磁道和扇区 b.分区和分组 2.有关Block group相关字段详解 a.inode编号 b.inode Table(节点表) c.Data blocks(数据区) d.小结 二.软硬链接 1.软链接 a.软链接的创建…

数据湖 Data Lake-概述

Data Lake 1. 数据湖的定义 数据湖是一种存储系统,用于集中存储大量的原始数据,可以按数据本来的原始格式进行存储,用户可以在需要时提取和分析这些数据。 A data lake is a centralized repository designed to hold vast volumes of data …

OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 Harris 角点检测器。 该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs,对于每个像素 (…

如何将生物序列tokenization为token?

原理讲解 tokenization是自然语言处理领域非常成熟的一项技术,tokenization就是把我们研究的语言转换成计算机能够识别的数字——token。 在生物领域,如何把核苷酸或氨基酸序列tokenization成token呢? 我们可以使用k-mer技术: k-m…

网络设备登录——《路由与交换技术》实验报告

目录 一、实验目的 二、实验设备和环境 三、实验记录 1.通过 Console 登录 步骤1:连接配置电缆。 步骤2:启动PC,运行超级终端。 步骤3:进入Console 配置界面 2.通过 Telnet 登录 步骤1:通过 Console 接口配置 Telnet 用户。 步骤2:配置 super 口令 步骤3:配置登录欢迎…

神经网络构建原理(以MINIST为例)

神经网络构建原理(以MINIST为例) 在 MNIST 手写数字识别任务中,构建神经网络并训练模型来进行分类是经典的深度学习应用。MNIST 数据集包含 28x28 像素的手写数字图像(0-9),任务是构建一个神经网络,能够根据输入的图像…

吉首大学--23级题目讲解

7-1 单链表基本操作 在 C/C 中,.(点)和 ->(箭头)运算符用于访问结构体或类的成员,但它们的使用场景不同。 1. . 运算符 . 运算符用于访问结构体或类的成员,通过对象或结构体变量直接访问。…

es的封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、类和接口介绍0.封装思想1.es的操作分类 二、创建索引1.成员变量2.构造函数2.添加字段3.发送请求4.创建索引总体代码 三.插入数据四.删除数据五.查询数据 前…

Element Plus 中Input输入框

通过鼠标或键盘输入字符 input为受控组件,他总会显示Vue绑定值,正常情况下,input的输入事件会正常被响应,他的处理程序应该更新组件的绑定值(或使用v-model)。否则,输入框的值将不会改变 不支…

windows环境下配置MySQL主从启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘

文章目录 问题解决方法 问题 今天在windows环境下配置MySQL主从同步,在修改my.ini文件后发现MySQL启动失败了 打开my.ini检查参数发现没有问题 [mysqld] #开启二进制日志,记录了所有更改数据库数据的SQL语句 log‐bin mysql‐bin #设置服务id&#x…

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别

重要说明:数据集里面有2/3是增强数据集,请仔细查看图片预览,确认符合要求在下载,分辨率均为640x640 数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件…

Python 二级考试

易错点 电脑基础知识 定义学生关系模式如下:Student (S#, Sn, Ssex,class,monitorS#)(其属性分别为学号、学生名、性别、班级和班长学号) 在关系模式中,如果…

python-SZ斐波那契数列/更相减损数

一:SZ斐波那契数列题目描述 你应该很熟悉斐波那契数列,不是吗?现在小理不知在哪里搞了个山寨版斐波拉契数列,如下公式: F(n) { $\ \ \ \ \ \ \ \ \ \ \ \ $ a,( n1) $\ \ \ \ \ \ \ \ \ \ \ \ $ b,( n2) $\ \ \ \ \ \ …

【优选算法之双指针】No.2--- 经典双指针算法(下)

文章目录 前言一、双指针示例:1.1 ⽔果成篮1.2 和为s的两个数字1.3 三数之和1.4 四数之和 二、双指针总结: 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专…

安装黑群晖系统,并使用NAS公网助手访问教程(好文)

由于正版群晖系统的价格不菲,对于预算有限的用户来说,安装黑群晖系统成为了一个不错的选择(如果您预算充足,建议选择白群晖)。如您对宅系科技比较感兴趣,欢迎查看本文,将详细介绍如何安装黑群晖…

allWebPlugin中间件自定义alert、confirm及prompt使用

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

跨游戏引擎的H5渲染解决方案(腾讯)

本文是腾讯的一篇H5 跨引擎解决方案的精炼。 介绍 本文通过实现基于精简版的HTML5(HyperText Mark Language 5)来屏蔽不同引擎,平台底层的差异。 好处: 采用H5的开发方式,可以将开发和运营分离,运营部门自…

代码随想录Day 51|题目:99.岛屿数量、100.岛屿的最大面积

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 题目一:99. 岛屿数量思路深度优先搜索DFS广度优先搜索BFS 题目二:100. 岛屿的最大面积DFSBFS 总结 题目一:99. 岛屿数量 99. 岛屿数量 (kamacoder.com) 思路 …

Tomcat服务器—Windows下载配置详细教程

一、关于 1.1 简介 Tomcat是一个开源的Java Servlet容器和Web服务器,由Apache软件基金会维护。它实现了Java Servlet和JavaServer Pages (JSP) 规范,用于运行Java Web应用程序。Tomcat支持多种Java EE功能,并提供了高效的性能和可扩展性&am…