带着问题去学习:🤔
- 1. 什么是时钟树,它在系统中的作用是什么?
- 2. 时钟树中各个组成部分(如时钟源、PLL、分频器和时钟输出)是如何协同工作的?
- 3. 在 STM32 中,如何配置系统时钟 SYSCLK 并确保它的正确设置?
- 4. 如何通过 RCC 初始化来配置 STM32 的时钟系统?
1. 前言
时钟树是啥 ❓
时钟树就像是一个交通指挥系统,它从一个“主时钟”开始,之后通过各种“分配器”把信号传给其他地方,让系统的每个部分都能按时工作。
2. 什么是时钟树
2.1 时钟树的作用
时钟树是指通过不同的时钟源、时钟生成模块(如 PLL)以及时钟分频器,将时钟信号分发到整个微控制器内部各个模块的体系结构。其作用是确保系统中的各个模块在适当的时钟频率下运行,以保证系统的正常工作。
STM32 微控制器的
时钟树提供了灵活的时钟配置选项,可以在不同的时钟源和频率下调整以适应不同的应用需求。
通过配置时钟树,可以实现以下目标:
- 精确控制
系统时钟频率,从而优化性能。节能模式,通过降低时钟频率来减少功耗。同步各个模块,确保数据传输和处理的准确性。
2.2 时钟树的基本概念
时钟树的核心是时钟信号的分配和管理。
STM32 微控制器通常包括多个
时钟源,如外部晶振(HSE)、内部晶振(HSI)、低速内部振荡器(LSI)和低速外部振荡器(LSE),以及通过锁相环(PLL)将时钟信号倍增的功能。
时钟树的管理包括:
时钟源选择:确定系统使用的时钟来源。时钟分频:通过分频器调整时钟频率,以适应不同的外设和应用场景。时钟输出:向外设提供适当的时钟信号。
3. 时钟树的组成部分
3.1 时钟源(Clock Source)
时钟源是时钟树的起点。
STM32 微控制器常见的时钟源包括:
HSI(High-Speed Internal Oscillator,高速内部振荡器):内置的高速振荡器,频率通常为 8 MHz。HSE(High-Speed External Oscillator,高速外部振荡器):通过外部晶振提供的时钟源,频率可以根据外部晶振的不同而变化。LSI(Low-Speed Internal Oscillator,低速内部振荡器):内置的低速振荡器,频率通常为 32.768 kHz。LSE(Low-Speed External Oscillator,低速外部振荡器):通过外部晶振提供的低速时钟,常用于 RTC 模块。
3.2 PLL(Phase-Locked Loop,锁相环)
PLL是一个用于**倍频**的电路,可以将时钟频率提高到更高的值。
STM32 中的
PLL可以通过外部时钟源(如 HSE)进行倍频,或者将内部时钟源(如 HSI)与外部时钟源相结合,以得到所需的时钟频率。通过配置PLL,可以实现非常灵活的时钟管理。
3.3 分频器(Clock Dividers)
分频器用于将输入的时钟信号降低到所需的频率。
STM32 时钟树中常见的分频器包括:
AHB 分频器:用于主系统总线时钟(AHB)。APB 分频器:用于外设总线时钟(APB)。独立外设分频器:用于个别外设的时钟频率调整。
3.4 时钟输出
时钟输出是指将时钟信号输出到外部或其他模块。
STM32 支持将时钟信号输出到外部设备或其他模块,以实现系统内部与外部设备之间的
同步。
4. 系统时钟 SYSCLK
SYSCLK是整个系统的主时钟,是所有时钟信号的基准。
SYSCLK是通过PLL或者直接通过时钟源(如 HSE、HSI)来生成的,且通常是 STM32 微控制器中最高的时钟频率。
在 STM32 中,
系统时钟(SYSCLK)会驱动系统总线(AHB)和外设总线(APB)的时钟,并且影响着 CPU 的运行速度和系统性能。
4.1 SYSCLK的作用
CPU 运行:SYSCLK 直接驱动 CPU,决定了 CPU 的处理速度。外设时钟:各个外设的时钟频率通常由 SYSCLK 通过分频器来产生。系统性能:SYSCLK 越高,系统的运算和外设的响应速度越快。
4.2 如何设置 SYSCLK
SYSCLK的来源可以是HSI、HSE或PLL,具体由用户在RCC(复位时钟控制器)中进行配置。
通过设置不同的时钟源、倍频等,可以精确控制 SYSCLK 的频率。
4.3 系统时钟(SYSCLK)左边与右边分析
4.3.1 左边:
HSI (内部振荡器):
HSI是 8 MHz 的内部高速振荡器。当不连接外部晶体时,系统会使用 HSI 作为默认时钟源。
使用 HSI 时,SYSCLK将直接来自于 HSI,并且频率为 8 MHz。
HSE (外部振荡器):
如果系统连接了外部晶体或时钟源,则可以通过
HSE使用外部时钟。
HSE频率通常为 8 MHz 到 25 MHz,可作为时钟源供给系统。HSE 提供的时钟频率可以通过PLL提升。
PLL (相位锁环):
PLL是一个非常重要的时钟源,它可以将HSI或HSE的时钟频率倍增。例如,HSE 输入时可以设置**倍频因子(如 2 到 16),使得 SYSCLK 输出更高的频率。
通过PLL,外部时钟频率可以被提升到最大 72 MHz** 的频率。
HSE → PLL → SYSCLK,这是最常见的使用方式。
4.3.2 右边:
APB1 时钟(外设总线时钟):
APB1 时钟是系统时钟(SYSCLK)经过分频器后的时钟。通过**预分频器(APB1 Divider),SYSCLK 的频率可以被降低。APB1 时钟用于控制低速外设**,如定时器、串口等。
APB1 Divider分频器可以将 SYSCLK 降低为 1/2、1/4、1/8 或 1/16。
APB2 时钟(外设总线时钟):
APB2 时钟是另一个外设总线时钟,通常用于高速外设,如 GPIO、USART、SPI、TIM、ADC 等。
与 APB1 时钟类似,APB2 时钟也通过分频器来调整,虽然 APB2 的分频器通常不同于 APB1。
AHB 时钟(高级总线时钟):
AHB 时钟用于更高级的外设,如内存访问、DMA、闪存等。其频率与 SYSCLK 相同,或者可能会通过额外的分频器来降低。
4.3.3 时钟分频与倍频的分析:
SYSCLK 到 AHB 总线时钟(AHBCLK):
AHB 分频器:AHB 时钟是系统的高级总线时钟,用于闪存、内存访问等模块。它的频率可以与 SYSCLK 相同,或者通过分频器降低。
分频方式:STM32F103C8T6 的AHB 分频器可选择分频系数,常见的分频系数有 1、2、4、8 和 16。
SYSCLK 到 APB1 总线时钟(APB1CLK):
APB1 分频器:APB1 时钟用于较低速的外设(如定时器、USART 等)。默认情况下,APB1 时钟频率为 SYSCLK 的一半(通过分频器)。
分频方式:APB1 分频器通常选择 1、2、4、8 或 16 来进行分频。
SYSCLK 到 APB2 总线时钟(APB2CLK):
APB2 分频器:APB2 时钟用于高速外设(如 GPIO、USART、SPI、TIM、ADC 等)。通常,APB2 时钟频率与 SYSCLK 相同,或者通过分频器降低。
5. STM32 时钟树的配置
5.1 配置时钟源
配置
时钟源是时钟树配置的第一步。
可以选择使用内部时钟源(如
HSI或HSE),也可以选择外部时钟源(如LSE)。
选择合适的时钟源可以确保系统的时钟频率稳定,并提供足够的精度。
5.2 配置PLL
通过配置
PLL,用户可以将时钟源的频率倍增到所需的频率。
PLL配置非常灵活,可以选择不同的输入时钟源、倍频因子、输出分频器等参数。正确配置 PLL 可以显著提升系统性能。
5.3 配置分频器
通过配置分频器,可以将时钟信号按比例降低,以满足不同外设的时钟需求。
例如,
APB 外设可能需要比AHB 总线更低的时钟频率,合理的分频配置可以减少功耗并提高稳定性。
5.4 配置时钟输出
在某些应用中,可能需要将系统时钟输出到外部设备或其他模块。
配置
时钟输出时需要选择合适的输出时钟源、频率和分频参数,确保外部设备能够同步工作。
6. RCC 初始化
RCC(Reset and Clock Control)是 STM32 中的时钟管理模块,负责配置和管理所有的时钟源、时钟分频器以及复位控制。🛸
RCC 初始化是 STM32 启动时的关键步骤,它决定了系统时钟的来源、外设时钟的分配等。
6.1 RCC 初始化步骤
以下是 RCC 初始化 的基本步骤:
- 选择
时钟源:根据应用需求,选择HSI、HSE或LSI等时钟源。- 配置
PLL(如果需要) :配置PLL 输入源(如 HSE)和**倍频因子**。- 启用
时钟源:启动HSE、HSI或LSE等时钟源。- 配置
AHB、APB 分频器:设置AHB和APB总线的时钟分频值。- 配置
外设时钟:根据外设的需要,配置其时钟来源和分频。- 切换
系统时钟源(如果需要) :可以通过切换时钟源来调整系统的性能。
7. [ 举例 ]:《家庭电力系统》🛖
7.1 电源的选择 - 选择时钟源
在家里,你有不同的电力来源:
市电(HSE - 外部晶振):是最常用、最稳定的电力源,像是外面的电网。家用发电机(HSI - 内部振荡器):如果市电停了,你可以使用家里自己的发电机,虽然不如市电稳定,但勉强能应付。备用电池(LSE - 外部低速晶振):在停电的情况下,你家可能有备用电池,可以保持一些设备运行,但只适合轻负载。
7.2 电压调节 - 锁相环(PLL)
你家里不同的电器可能需要不同的电压。
例如,冰箱需要 220V 的电,电视可能只需要 110V 的电。而家里可能只有一个电压为 220V 的市电供电系统。为了满足不同电器的需求,你可以通过
电压变压器(就像 STM32 中的PLL)来转换电压。
例如,把 220V 电压通过变压器转换成适合电视使用的 110V 电压。
所以,
PLL就是一个“电压变压器”,它的作用是把你从市电(比如 8 MHz 的外部晶振)得到的电压(时钟)变高,变成更高的电压(时钟频率),比如 72 MHz,让你家里的高功耗设备可以顺利运行。
7.3 电力分配 - 分配时钟
家里每个房间的电器都需要电力,但不同的电器可能需要不同的电压或电流。
- 冰箱、空调等高功率设备 需要的电压比较高,类似于系统中的核心部分(如 CPU),它们需要的“电力”比较强。
- 电视、灯泡这些低功率设备 需要的电压较低,类似于外设(如传感器、LED 灯),它们的需求不高。
所以,在 STM32 中,你需要通过
分配器(如AHB 分频器、APB 分频器)来调节和分配电力。
例如,核心部分的时钟(CPU)需要较高的时钟频率,而外设(如 UART、ADC)可能只需要较低的频率。
7.4 家里的电路配置 - 时钟初始化
在安装电力系统的时候,你首先需要选择一个电力来源(市电、发电机、备用电池),然后可能需要配置一些电压变压器,最后通过开关和电线分配电力到各个房间。
STM32 中的
时钟初始化就是类似这个过程:你选择时钟源(HSE、HSI),配置PLL(倍频器),然后设置AHB和APB总线来分配“电力”(时钟频率)到不同的外设。
版权归属原作者,如有问题,欢迎留言联系删除。⚠️
STM32 时钟树系统讲解&spm=1001.2101.3001.5002&articleId=146486229&d=1&t=3&u=7d8d0aa282ab4fb28c60c0eee7d7a376)
4568

被折叠的 条评论
为什么被折叠?



