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

news2024/11/16 6:31:14

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

  • 1 F407_CubeMX时钟树配置(传送门)
  • 2 STM32F407时钟树
    • 2.1 STM32F407时钟系统图
    • 2.2 STM32F103时钟树简图
      • 2.2.1 高速部分
      • 2.2.2 低速部分
    • 2.3 时钟源
      • 2.3.1 外部时钟源
      • 2.3.2 内部时钟源:
    • 2.4 PLL锁相环
      • 2.4.1 PLL Source Mux:PLL时钟源选择器
      • 2.4.2 PLLM:HSE分频器作为PLL输入(HSE divider for PLL entry)
      • 2.4.3 PLLMUL:PLL倍频系数(PLL multiplication factor)
    • 2.5 系统时钟SYSCLK
    • 2.6 函数配置
    • 2.7 STM32CubeMX时钟树配置(F407)
    • 2.8 F407 的时钟配置的意义
    • 2.9 F407 相较于 F103

在这里插入图片描述

1 F407_CubeMX时钟树配置(传送门)

在这里插入图片描述
在这里插入图片描述

  1. 宏定义 HSE_VALUE;
  2. 调用HAL_RCC_OscConfig()函数,配置输入时钟源;
  3. 调用HAL_RCC_ClockConfig()函数,配置系统时钟源以及 SYSCLK、AHB、APB1 和 APB2 相关参数;
  4. 在main函数中调用sys_stm32_clock_init()函数并设置形参;

注意:第2点和第3点中的函数均在sys_stm32_clock_init()函数中调用,main函数中只调用sys_stm32_clock_init()函数,且sys_stm32_clock_init()函数的描述在sys.c中,main.c中只配置该函数的四个形参。

为便于查找,在后续新项目的时钟系统配置时可以直接按照下图参数进行配置。具体详解见后文。

2 STM32F407时钟树

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

由于时序电路的重要性,因此在MCU设计时就设计了专门用于控制时序的电路,在芯片设计中称为时钟树设计。由此设计出来的时钟,可以精确控制我们的单片机系统,这也是我们这节要展开分析的时钟分析。为什么是时钟树而不是时钟呢?一个MCU越复杂,时钟系统也会相应地变得复杂,如STM32F4的时钟系统比较复杂,不像简单的51单片机一个系统时钟就可以解决一切。

对于STM32F4系列的芯片,正常工作的主频可以达到168Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十Khz的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的MCU一般都是采取多时钟源的方法来解决这些问题。

2.1 STM32F407时钟系统图

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

如下图为一个简化的STM32F4时钟系统。图中已经把我们主要关注几处标注出来。

在这里插入图片描述

A部分表示输入时钟源,可分为外部时钟源和内部时钟源;
B为锁相环“PLL”;
C为我们重点需要关注的系统时钟源选择器,此项决定了MCU的系统主时钟“SYSCLK”的大小;AHB预分频器将SYSCLK分频或不分频后分发给其它外设进行处理,包括到D部分的Cortex-M内核系统的时钟和使能单元。
E为定时器以及其它外设的时钟源APB1/APB2。F是STM32的MCO时钟输出功能。

2.2 STM32F103时钟树简图

2.2.1 高速部分

在这里插入图片描述
HSE 4~26 MHz,HIS 16 MHz,F407的SYSCLK最大168MHz,无法达到,所以要/M分频之后,通过PLL锁相环,F1系列的锁相环只有一个2-16倍频器,F4的PLL中首先会经过一个*N的倍频器,再经过一个/P分频,作为系统时钟SYSCLK,经过/Q分频可以作为其他外设的时钟。
SYSCLK系统时钟,经过一个“/”分频器(分频系数一般为1,不分频),来到AHB系统总线时钟(HCLK)。
AHB1经过“/”分频之后,经过桥接到达APB1 / APB2,APB1中,最大频率为42MHz。

2.2.2 低速部分

在这里插入图片描述

2.3 时钟源

对于STM32F4,输入时钟源(Input Clock)主要包括HSI,HSE,LSI,LSE。其中,从时钟频率来分可以分为高速时钟源和低速时钟源,其中HSI、HSE高速时钟,LSI和LSE是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中HSE和LSE是外部时钟源;其他是内部时钟源,芯片上电即可产生,不需要借助外部电路。下面我们看看STM32的时钟源。

在这里插入图片描述
H: high 高
L: low
S: speed 速
I:internal
E: external 外部

2.3.1 外部时钟源

① 高速外部振荡器HSE (High Speed External Clock signal),外接石英/陶瓷谐振器,频率为4MHz~26MHz。本开发板使用的是8MHz。
② 低速外部振荡器LSE (Low Speed External Clock signal),外接32.768kHz石英晶体,主要作用于RTC的时钟源。
外部时钟源都是芯片外部晶振产生的时钟频率,故而都有精度高的优点。

2.3.2 内部时钟源:

① 高速内部振荡器HSI(High Speed Internal Clock signal),由内部RC 振荡器产生,频率为16MHz。
② 低速内部振荡器LSI(Low Speed Internal Clock signal),由内部RC振荡器产生,频率为32kHz,可作为独立看门狗的时钟源。
芯片上电时默认由内部的HSI时钟启动,如果用户进行了硬件和软件的配置,芯片才会根据用户配置调试尝试切换到对应的外部时钟源,所以同时了解这几个时钟源信号还是很有必要的。如何设置时钟的方法我们会在后文提到。

2.4 PLL锁相环

锁相环是自动控制系统中常用的一个反馈电路,在STM32主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。前者是利用锁相环电路的反馈机制实现,后者我们用于使芯片在更高且频率稳定的时钟下工作。
在STM32中,锁相环的输出也可以作为芯片系统的时钟源。根据图F407的时钟结构,使用锁相环时只需要进行三个部分的配置。为了方便查看,截取了使用PLL作为系统时钟源的配置部分,如图所示。

在这里插入图片描述

2.4.1 PLL Source Mux:PLL时钟源选择器

图中标号①表示的是PLL时钟源的选择器,由寄存器RCC_PLLCFGR的bit22位进行控制,关于该寄存器的描述可参考《STM32F4xx参考手册_V4(中文版).pdf》第116页,如下图所示:

在这里插入图片描述
它有两种可选择的输入源:一个是内部时钟HSI信号,另一个是外部时钟HSE信号。

2.4.2 PLLM:HSE分频器作为PLL输入(HSE divider for PLL entry)

即图在标号②的地方,主PLL输入时钟的分频系数,并把它的控制功能放在RCC_PLLCFGR寄存器中,我们引用如下图。

在这里插入图片描述
从F407参考手册可得到它的值范围是:0~63。

2.4.3 PLLMUL:PLL倍频系数(PLL multiplication factor)

图中③所表示的配置锁相环倍频系数,同样地可以查到在STM32F4系列中,ST设置它的有效倍频范围为2~16倍。
要实现168MHz的主频率,我们通过选择HSE分频作为PLL输入的时钟信号,输入8Mhz,8分频,即1MHz,通过标号③选择倍频因子,我们选择336倍频,这样可以得到时钟信号为1*336=336MHz,然后经过2分频,得到168MHz。

2.5 系统时钟SYSCLK

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

讲解PLL作为系统时钟时,根据我们开发板的资源,可以把主频通过PLL设置为168MHz。从上面的时钟树图可知,AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频得到。根据得到的这个系统时钟,下面我们结合外设来看一看各个外设时钟源。

在这里插入图片描述

2.6 函数配置

在这里插入图片描述
时钟源、PLL:

HAL_RCC_OscConfig()

系统时钟、总线

HAL_RCC_ClockConfig()

使能外设时钟

_HAL_RCC_PPP_CLK_ENABLE()

扩展外设时钟(PLLI2S/I2S/LTDC/RTC等)

HAL_RCCEx_PeriphCLKConfig()

2.7 STM32CubeMX时钟树配置(F407)

在这里插入图片描述
标号①表示的是 PLL 时钟源的选择器,可选HSI 信号,或HSE信号;
标号②表示主PLL输入时钟的分频系数,可选0~63;
标号③表示配置锁相环倍频系数,即选择倍频因子,有三个参数PPL_N、PPL_N、PPL_Q;
在这里插入图片描述
标号④为系统时钟输入源选择,可选HSI、PLLCLK、HSE中的一个;

标号⑤为AHB预分频器,可选择分频系数:1,2,4,8,16,32,64,128,256,512;

AHB总线时钟直接作为 GPIO(A\B\C\D\E\F\G\H\I)、以太网、DCMI、FSMC、AHB总线、Cortex内核、存储器和 DMA 的 HCLK时钟,并作为 Cortex 内核自由运行时钟FCLK。
标号⑥为APB1预分频器,分频因子可以选择 1, 2,4,8,16,

#注意:与APB1低速总线连接的外设有:看门狗定时器、定时器2/3/4/5/6/7、RTC 时钟、USART2/3/4/5、SPI2(I2S2)、SPI3(I2S3)、I2C1~3、CAN 、2个DAC。

标号⑦为APB2预分频器,分频因子可以选择 1, 2,4,8,16,

#注意:与 APB2高速总线连接的外设有:定时器1/8/9/10/11、SPI1、USART1和USART6、3个ADC和SDIO接口。

标号⑧决定了定时器时钟频率,该位由硬件自动设置,分为两种情况:

1、如果APB预分频器为 1,则定时器时钟频率等于APB域的频率;

2、否则,等于APB域的频率的两倍(×2)。

标号⑨是RTC时钟,其时钟源有三个途径:HSE/x(x = 2~31)、LSE 或 LSI。

2.8 F407 的时钟配置的意义

  1. 确保系统正常运行:时钟为 STM32F407 工作提供稳定的机器周期,是系统运行的基础。就像人的心脏为身体各器官提供动力一样,时钟为 CPU 及各种外设提供基本的时序信号,使其能按照预定节奏执行指令和操作。若时钟配置不正确,CPU 无法正常执行指令,整个系统将无法工作,例如时钟频率设置异常可能导致系统性能下降或不稳定,甚至无法满足实时性要求。

  2. 优化系统性能:通过合理配置时钟,可以优化系统性能。一方面,可根据应用需求调整时钟频率来提高处理速度,在对性能要求高的场景(如实时图像处理、高速数据采集等),适当提高时钟频率能加快数据处理速度,但需注意提高频率可能会带来功耗增加和散热问题,要在性能和功耗间权衡;另一方面,在一些低功耗应用中,可通过降低时钟频率、关闭不必要的时钟源或使用时钟门控技术来降低功耗,例如在电池供电的设备中,降低功耗可延长电池寿命。

  3. 满足外设同步要求:嵌入式系统中,数据传输与通信(如串口通信、SPI、I2C 总线等)以及多处理器系统协作都需要时钟同步。不同的通信接口和多处理器之间通常需要特定的时钟频率和相位关系来确保数据准确传输和协调工作,正确配置时钟系统能使这些设备和处理器之间的时钟同步,避免数据传输错误和通信故障。

  4. 适应不同应用场景:在实时性要求严格的控制系统中,时钟配置要确保系统能满足对时间准确性和响应速度的高要求,以及时处理各种事件和中断;而对于低功耗的便携式设备或物联网设备,需通过合理的时钟配置在满足系统功能的前提下降低功耗,延长设备续航时间。

2.9 F407 相较于 F103

  1. STM32F407:有四个时钟源,即高速内部时钟(HSI)频率为 16MHz、高速外部时钟(HSE)频率范围为 4 - 26MHz、低速内部时钟(LSI)频率约为 32kHz、低速外部时钟(LSE)频率为 32.768kHz。HSE 可作为系统时钟和 PLL 锁相环输入,还能分频后输入给 RTC;LSI 可作为独立看门狗和 RTC 的时钟源;HSI 可作为系统时钟或 PLL 锁相环的输入。此外,STM32F407 有两个 PLL(锁相环),主 PLL 用于生成高速的系统时钟(最高 168MHz)等,另一个 PLL 用于生成特定的时钟信号。

  2. STM32F103:也有四个时钟源,高速外部时钟(HSE)一般采用 8MHz 晶振,高速内部时钟(HSI)为 8MHz,低速外部时钟(LSE)主要用于实时时钟模块,一般为 32.768kHz,低速内部时钟(LSI)约为 40kHz。STM32F103 只有一个 PLL,用于倍频输出,其输出频率最高为 72MHz,可为 USB 提供时钟,系统时钟(SYSCLK)可由内部或外部高速时钟直接提供,也可由内、外部高速时钟经 PLL 倍频后提供。

  3. 总线架构与性能不同:STM32F407:GPIO 挂载在 AHB1 总线上。AHB 是高速总线,性能相对更好,数据传输速度快,能够满足更高的数据吞吐量和更快的外设响应需求,这对于需要处理大量数据或对实时性要求较高的应用非常有利STM32F103:GPIO 挂载在 APB2 总线时钟上。APB 总线相对 AHB 总线速度较低,适用于对性能要求不那么极致的常规外设控制。

  4. 时钟配置灵活度不同:STM32F407:时钟配置更加灵活复杂,有更多的时钟源选择和 PLL 配置选项,能满足更复杂的应用场景和多样化的性能需求。例如,通过配置主 PLL 的相关参数(如 PLL_M、PLL_N、PLL_P 等),可以得到不同频率的系统时钟,以适应各种对系统时钟频率有不同要求的任务。STM32F103:相对来说时钟配置选项较少,灵活性稍低,但对于一些简单的应用场景,其时钟配置相对更简洁明了,容易上手和掌握。

  5. 最高系统时钟频率不同:STM32F407:系统时钟频率更高,官方推荐使用的最高稳定时钟频率可达 168MHz,能够支持更高的运算处理能力和更快的系统响应速度,可胜任对性能要求苛刻的复杂应用。STM32F103:系统时钟频率一般最高为 72MHz,在一些对性能要求极高的应用中,可能无法满足需求,但对于许多常规的嵌入式应用来说,也能够提供足够的处理能力。

在这里插入图片描述

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

参考文章:
https://blog.csdn.net/weixin_47040031/article/details/138626580
https://blog.csdn.net/Williamair/article/details/124069175
https://blog.csdn.net/aElect/article/details/141719876
https://blog.csdn.net/fzf1996/article/details/88647016
https://m.eeworld.com.cn/ic_article/482/468265.html

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

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

相关文章

SOCKS5、HTTP 代理IP协议有何区别?

在网络通信领域,代理服务器的选择对于数据安全和传输效率至关重要。SOCKS5代理和HTTP代理作为两种常用的代理类型,各自具有独特的特点和适用场景。本文将深入探讨SOCKS5代理与HTTP代理的区别、特性及应用场景,为用户提供选择指南。 一、SOCK…

数据结构:二叉树(一)

ps:偷懒了几天,接着更新 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的…

MODIS/Landsat/Sentinel下载教程详解【常用网站及方法枚举】

⛄前言 在当今快速发展的地球观测时代,遥感技术作为获取地球表面及其环境信息的重要手段,正以前所未有的广度和深度改变着我们对自然界的认知与管理方式。MODIS(Moderate-resolution Imaging Spectroradiometer,中分辨率成像光谱…

【全网最全】2024华为杯研赛D题完整代码建模过程+py代码(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 点击链接加入【2024华为杯研赛资料汇总】:https://qm.qq.com/q/XzdIsvbiM0 https://qm.qq.com/q/XzdIsvbiM0 问题一 .在众多描述地理环境的变…

科研绘图系列:R语言箱线图和连线图(boxplot linechart)

文章目录 介绍加载R包导入数据画图1画图2画图3画图4系统信息介绍 箱线图表示组间差异,连线图表示数据波动。 加载R包 library("here") library("tidyverse") library("ggpubr") library("scales"

Git从了解到操作

Git常用命令 基本的linux命令 ls / ll 查看当前目录( ls 是查看目录有哪些文件夹,ll 是查看隐藏文件)cat 查看文件内容touch 创建文件vi vi编辑器 (使用 vi 编辑器是为了方便展示效果,也可以记事本、editPlus、notPad等其它编辑器) 备注 Git GUl: Gi…

数值计算 --- 平方根倒数快速算法(0x5f3759df,这是什么鬼!!!)

平方根倒数快速算法 --- 向Greg Walsh致敬&#xff01; 写在最前面&#xff1a; 上图中的这段代码出自一个早期的3D游戏<雷神之锤>的源代码&#xff0c;它实现的功能就是计算一个数x的平方根的倒数&#xff1a; 这段代码之所以称之为经典&#xff0c;私以为主要是因为以下…

51单片机——LED灯篇

一、LED与单片机P2管脚相连 二、点亮一个LED灯 #include <STC89C5xRC.H> void main() { P2 0xFE; //1111 1110 } P2有8个管脚&#xff0c;对应8个二进制位。 LED灯右侧接电源是正极&#xff08;1&#xff09;&#xff0c;左侧给负极&#xff08;0&#xff09;即可…

SpringBoot教程(三十) | SpringBoot集成Shiro权限框架(shiro-spring 方式)

SpringBoot教程&#xff08;三十&#xff09; | SpringBoot集成Shiro权限框架&#xff08;shiro-spring方式&#xff09; 一、 什么是Shiro二、Shiro 组件核心组件其他组件 三、流程说明shiro的运行流程 四、SpringBoot 集成 Shiro1. 添加 Shiro 相关 maven2. 添加 其他 maven3…

链表(3)链表的基本操作

单链表的基本操作主要有;①创建链表;②输出链表;③査我结点;④插入结点,⑤鹏除结点;⑥重组链表。下面分别进行介绍。 一.创建链表 创建链表是指在程序运行时,进行动态内存分配,创建若千个结点,并把这些结点连接成串,形成一个链表。在进行动态内存分配时,需要使用在&#xff08…

QT快速安装使用指南

在Ubuntu 16.04上安装Qt可以通过多种方式进行。以下是使用Qt在线安装程序和apt包管理器的两种常见方法&#xff1a; 方法一&#xff1a;使用Qt在线安装程序 下载Qt在线安装程序 访问Qt官方网站&#xff1a;Try Qt | Develop Applications and Embedded Systems | Qt找到并下载…

Swift里的数值变量的最大值和最小值

Swift里有很多种数值变量&#xff0c;如Int&#xff0c;Int8&#xff0c;Float&#xff0c;Double等。和绝大多数编程语言一样&#xff0c;由于是在计算机上运行&#xff0c;内存有限&#xff0c;所以必有最大值和最小值&#xff0c;而计算机无法处理超过该值的数。 在Swift中…

【Linux】POSIX信号量、基于环形队列实现的生产者消费者模型

目录 一、POSIX信号量概述 信号量的基本概念 信号量在临界区的作用 与互斥锁的比较 信号量的原理 信号量的优势 二、信号量的操作 1、初始化信号量&#xff1a;sem_init 2、信号量申请&#xff08;P操作&#xff09;&#xff1a;sem_wait 3、信号量的释放&#xff08…

网络安全-webshell绕过,hash碰撞,webshell绕过原理

目录 一、题目 1.1 1.2 1.3 1.4 1.5 二、绕过动态检测引擎的一次尝试 三、一个比赛中的webshell 四、webshell绕过的原理以及哈希碰撞 五、JSP解释流程导致的绕过&#xff08;QT比赛&#xff09; 5.1环境 5.2例子 一、题目 这里我们通过几道题目来给大家讲解 1.…

UI自动化测试框架搭建详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过…

【HTML样式】加载动画专题 每周更新

加载动画专题 煎蛋加载动画方块移动加载动画电子风变脸正方体组合跳跃式加载动画 煎蛋加载动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

计算机毕业设计之:基于微信小程序的校园流浪猫收养系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

6种解决msvcp140_ATOMIC_WAIT.dll丢失的方法分享

日常生活工作中&#xff0c;电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用过程中&#xff0c;我们也会遇到各种问题&#xff0c;其中之一就是电脑中的msvcp140_ATOMIC_WAIT.dll文件丢失。这个问题可能会导致电脑运行不稳定&#xff0c;甚至无法正常启动…

数据结构之线性表——LeetCode:328. 奇偶链表,86. 分隔链表,24. 两两交换链表中的节点

328. 奇偶链表 题目描述 328. 奇偶链表 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。…

华为全联接大会HC2024 观会感

9/19-21于上海&#xff0c;华为举办了他一年一届也是最重要的华为系展会-Huawei Connect 华为全联接大会&#xff0c;今天有幸赶在展会最后一天来参观一下 上午照常是keynote&#xff0c;由华为计算线总裁进行了今天的KN开场&#xff0c;介绍了华为在“算”方面的进展&#x…