【学习笔记】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.xdnf.cn/news/1541312.html

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

相关文章

Qt-QLabel 添加图片并设置 GIF 图动态效果

Qt-QLabel 添加图片并设置 GIF 图动态效果 一、添加图片资源并设置图片 选择标签,拖拉到界面上,然后选择器属性 picmap   选择设置,在这里添加图片资源   点击左边的加号符号按钮添加前缀,并设置前缀名,如果已经…

Nginx静态资源优化、压缩、缓存处理

一、静态资源优化配置语法 Nginx对静态资源如何进行优化配置。这里从三个属性配置进行优化: sendfile on; tcp_nopush on; tcp_nodeplay on; (1)sendfile,用来开启高效的文件传输模式。 语法sendfile on |off;默认值sendfile …

奥比中光深度相机相关使用内容

奥比中光深度相机相关使用内容 Windows平台测试官方软件关于python环境的配置1、安装CMake2、安装Visual Studio3、项目地址下载4、配置Visual Studio5、完成基于Python的SDK配置官网教学视频地址 3D视觉开发者社区 官方文档地址 效果: Windows平台测试官方软件 Window…

一文让你了解微服务契约测试

谈到微服务,大家都想到契约测试,到底什么是契约测试呢,为什么要使用契约测试呢,关于这样的文章很多,本文将结合Spring Boot让你了解微服务契约测试。 首先我们来看一下微服务,微服务是一种分布式结构&…

详细介绍MES系统的生产监控模块

MES系统的监控模块是系统的重要组成部分,它负责实时监控生产过程中的各项关键指标和数据,以确保生产活动的顺利进行和高效管理。以下是MES系统监控模块的详细介绍: 一、MES系统监控模块的主要功能 实时数据采集: 监控模块通过传…

解决uniapp开发的app,手机预览,上下滑动页面,页面出现拉伸,抖动的效果问题,

在pages.json文件里“globalStyle”下面的"app-plus"里加入"bounce": "none"即可 "app-plus": { "bounce": "none", //关闭窗口回弹效果 }

MFC -文件类控件

前言 各位师傅大家好,我是qmx_07,今天给大家讲解MFC中的文件类 MFC文件类 在MFC中,CFILE 是基本的文件操作类,提供了读取、写入、打开、关闭等操作方法主要成员函数:Open(用于打开文件,设置模式 例如 只读 只写 读…

(done) 声音信号处理基础知识(1)

来源:https://www.youtube.com/watch?viCwMQJnKk2c 声学处理应用场景如下 这个系列的内容包括如下: 作者的 slack 频道 油管主的 github repo: https://github.com/musikalkemist/AudioSignalProcessingForML

滑动条QSlider

可以在一个范围内拖动。 常用属性和方法 值 包括当前值、最大值、最小值 // 获取和设置当前值 int value() const; void setValue(int);// 获取和设置最大值 int maximum() const; void setMaximum(int);// 获取和设置最小值 int minimum() const; void setMinimum(int);//…

【深度学习】聊一聊正则化

在机器学习中,正则化是一种常用的技术,用于控制模型的复杂度,减少过拟合的风险。它通过在损失函数中引入额外的项来对模型的参数进行约束或惩罚,使模型更加简单、平滑或稀疏。我们在实际应用中,经常使用的是L1和L2正则…

内网渗透之中间人欺骗攻击-ARP攻击

ARP攻击 ARP协议简介 ARP全称为Address Resolution Protocol,即地址解析协议,它是一个根据IP地址获取物理地址的TCP/IP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定…

李宏毅2023机器学习作业HW07解析和代码分享

ML2023Spring - HW7 相关信息: 课程主页 课程视频 Kaggle link 回来了 : ) Sample code HW07 视频 HW07 PDF 个人完整代码分享: GitHub | Gitee | GitCode P.S. HW7 的代码都很易懂,可以和 2024 年的新课:生成式AI导论做一个很好的衔接&#…

高性能string库-stringzilla

这段时间在优化服务耗时问题,其中perf打出来的热点显示,有一部分热点集中在string find. 由于之前看到sonic-cpp在使用simd加速string的一些操作,所以当时我想使用AVX2实现一版strstr来加速这个过程。但是在实现过程中,碰到一些问…

【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField

前言: 上篇博客我们讲到redis五大基本数据类型(也是就下图的第一列)。 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客文章浏览阅读1k次,点赞24次,收藏10次。该篇适用于速成redis。本篇我们将讲解&#…

Innodb存储架构

Innodb整体存储架构 Innodb是一款兼顾性能及可靠性的存储引擎,主要分为内存存储结构和磁盘存储结构,二者分别扮演着提高性能和数据持久化的工作 内存结构中定义了缓冲池、变更缓冲区、日志缓冲区、自适应哈希四个缓冲区,它们均是为提升查询…

linux网络-----传输层

前言 一.传输层: 数据要交接应用层先通过传输层(给哪个程序发数据) 传输层作用:负责数据能够从发送端传输接收端。对于应用层来说有许多服务,传输层怎么知道把数据发给那个应用服务? 这时就有了端口号&am…

kubernetes中的认证授权

目录 一、kubernetes API访问控制 1、UserAccount与ServiceAccount (1)ServiceAccount (2)示例 二、认证(在k8s中建立认证用户) 1、创建UserAccount 2、RBAC(Role Based Access Control&…

Redis——redispluspls库——通用命令以及String类型相关接口使用

文章目录 通用命令get,setkeys插入迭代器 expire和ttltype string 类型接口set和getset NX和XXmset 和 mgetgetrange 和 setrangeincr 和 decr 通用命令 get,set void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringV…

Iterative Regularized Policy Optimization with Imperfect Demonstrations

ICML 2024 paper code Intro 利用基于次优专家数据的专家策略,通过policy constraint的形式引导智能体的在线优化,同时通过利用在线高质量数据扩展专家数据,并有监督得对专家策略进行矫正。二者交替优化实现目标策略的迭代更新 Method 上述…

51单片机-红外遥控器(NEC标准)-实验(红外遥控及调速电机)

作者:Whappy 时间:2024.9.20 总结一下!基础实验到这儿里就圆满结束,历经25天,将51单片机学完并亲自手敲代码近5000行,在手敲代码过程中,明显感觉的看和敲,明显就是不同的感觉&…