深入浅出地了解STM32中的时钟树

1 本文的目标

弄明白下面这个图,也就是时钟树
在这里插入图片描述

在这里插入图片描述

2 到底什么是时钟信号?

可以这么说:
In electronics and especially synchronous digital circuits, a clock signal is a particular type of signal that oscillates between a high and a low state and is utilized like a metronome to coordinate actions of circuits.

 时钟信号是一种特殊类型的信号,它在高低状态之间振荡,并像节拍器一样被用来协调电路的动作。
在这里插入图片描述

3 时钟信号是怎么产生的?

 之前写的这篇文章,略有设计:在 keil 建立基于STM32开发的工程模板–详细步骤

4 时钟信号有几类

STM32Fl03 相关时钟 可以分为以下 3 种:
(1) 输入时钟
(2) 系统时钟
(3) 其他时钟:由系统时钟分频得到

4.1 输入时钟

 STM32Fl03 的 输入时钟可以来自不同的时钟源。
从频率和源角度来分,分类如下:
在这里插入图片描述
 高速时钟为 STM32Fl03 的主时钟提供时钟信号,

 低速时钟仅为实时时钟 (Real Time Clock, RTC) 和独立看门狗(Independent Watch Dog, IWDG)提供时钟信号。

 从芯片角度来分,可以分为内部时钟(片内时钟)和外部时钟源(片外时钟)。内部时钟由芯片内部 RC振荡器产生,起振较快,因此系统主时钟在芯片刚上电时默认采用内部高速时钟。而外部时钟通常由外部晶振输入,在精度和稳定性上都具有很大的优势。
 因此,通常上电之后通过软件配置将主时钟转而采用外部高速时钟信号。

(1)高速外部时钟

 高速外部时钟 (High Speed External clock signal, HSE)通常以外部晶振作为时钟源,晶振频 率可取范围为 4 ~ 16MHz, ST 官方推荐选取 8MHz 外接晶振作为
STM32Fl03 微控制器的 HSE。

 下面即以外接8MHz晶振作为高速外部时钟为例,沿着下图的STM32F103时钟树,介绍STM32F103的时钟系统是如何从高速外部时钟(8MHz晶振)开始一步步得到系统时钟SYSCLK。

在这里插入图片描述

OSC_IN 和 OSC_0UT : 从最左端的 osc_IN 和 OSC_ OUT 开 始,
STM32Fl03 的这两个引脚分别连接到 8MHz 外部晶振的两端。

PLLXTPRE: 8M 的 HSE 遇到多路选择器 PLLXTPRE(HSE divider for PLL entry)。 通过编程配置寄存器,可以选择 PLLXTPRE的输出 : 对输入时钟的二分频或不分频。 通常选择不分频,因此,经过 PLLXTPRE 后,输出仍然是 8MHz 的时钟信号。

PLLSRC: 8MHz的HSE遇到多路选择器PLLSRC (PLL entry clock source)。 同
样可以通过配置寄存器,选择PLLSRC 的输出是高速外部时钟HSE或高速内部时钟
HSI。 通常,选择输出为高速外部时钟HSE。

PLL: 8MHz的HSE遇到锁相环CPLL ),经过PLL 后,输出时钟称为PLLCLK。 通
过配置PLL 寄存器,选择倍频系数 PLLMUL (PLL mul tipli cation factor),可以决定
PLLCLK输出频率。 通常,为了使STM32Fl03满频工作,通常将倍频系数设为9。 于是,经过PLL后,原来8MHz的时钟HSE变成了72MHz的时钟PLLCLK。

SW: 72MHz的PLLCLK遇到多路选择器SW。 通过配置寄存器,可以选择SW输
出为PLLCLK、HSE或HSI。 SW输出就是STM32Fl03的系统时钟SYSCLK,通常选
择PLLCLK作为SW输出。 因此,STM32Fl03的系统时钟SYSCLK 为72MHz。

(2) 高速内部时钟

高速内部时钟(High Speed Internal clock signal, HSI)由片内RC振荡器产生,频率
为8MHz,但不稳定。 STM32Fl03从上电开始即采用HSI作为初始的系统时钟。

(3)低速外部时钟

低速外部时钟(Low Speed External clock signal , LSE)通常以外部晶振作为时钟源,
主要提供给实时时钟模块,所以一般采用32. 768 kHz。

(4) 低速内部时钟

低速内部时钟(Low Speed Internal clock signal, LSI)由片内RC振荡器产生,可以
提供给实时时钟模块和看门狗模块,频率为40 kHz。

4.2 系统时钟

 从上可知,系统时钟SYSCLK 由多路选择器SW根据用户设置选择PLLCLK、HSE或HSI中的一路输出而得。 SYSCLK的最高频率可达72MHz(通常也工作在72MHz), 是STM32Fl03大部分 部件的时钟来源。

 通常,STM32Fl03从上电开始 ,选用HSI作为初始的系统时钟。 在完成初始化后,一般选用更加稳定可靠的HSE作为系统时钟的来源。为了让用户能够实时检测时钟系统是否运行正常,ST 在STM32Fl03 系列微控制器上专门提供了引脚MCO(M ai nC lock Output,主时钟输出)。 用户可以通过软件编程,选择SYSCLK、PLLCLK、HSE或HSI中的一路在MCO上输出。

4.3 其他时钟

系统时钟SYSCLK 经过AHB预分频器输出到STM32Fl03的各个部件:

(1)HCLK: 高速总线AHB的时钟,由系统时钟SYSCLK 经AHB预分频器后直接得到。 通常, 将AHB预分频系数设置为1,HCLK即 为72MHz,最高 也为72MHz。 HCLK为Cortex-M3内核存储器和DMA提供时钟信号。 它 是Cortex-M3内核的运行时钟。 由此可见, CPU主频就是这个时钟信号通常情况下 CPU运行于 高 , STM32Fl03的频率72MHz。
在这里插入图片描述

(2)FCLK: Cortex-M3内核的 “自由运行” 时钟,同样由系统时钟SYSCLK经AHB预分频器后直接得到。 它与HCLK互相同步,最大 也 是72MHz。 所谓的不来自 HCLK 。 因 此在HCLK停止时FCLK仍能继续运行。 这样 ,可以保证即使在Cortex-M3内核睡眠时也能采样到中断和跟踪休眠事件。
在这里插入图片描述

(3)PCLK1: 外设时钟,由系统时钟SYSCLK经AHB预分频器,再经APBl预分频器后得到。 通常情况下,将AHB的预分频系数设置为1,将APB1 的预分频系数设置为2, PCLK1 即为36MHz,它的最大频率也为36MH 。 PCLK1为挂载在APB1 总线上的外设提供时钟信号,如USART2、USART3、UART4、UART5、SPI2/I2S、SPI3/I2S、I2C1、I2C2、USB、RTC、CAN、DAC、PWR、BKP、IWDG、WWDG等。类似地,如需使用以上挂载在APB2总线上的外设,必须先开启APB2总线上该外设的时钟。
在这里插入图片描述

(4)PCLK2: 外设时钟,由系统时钟SYSCLK经AHB预分频器,再经APB2预分频器后得到。 通常情况下 ,将AHB预分频系数和APB2的预分频系数都设置为1,PCLK2即为72MHz,它的最大频率也为72MH 。PCLK2为挂载在APB2总线上的外设提供时钟信号,如GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG、USART1、SPI1、EXTI、AFIO等。 尤其需要注意的 是,如需使用以上 挂载在APB2总线上的外设 ,必须先开启APB2总线上该外设的时钟。
在这里插入图片描述

(5)SDIOCLK: SDIO外设的时钟,由系统时钟SYSCLK经AHB预分频器后直接得
SDI 到。 类似地,如需使用SDIO外设,必须先开启SDIOCLK 。
在这里插入图片描述
(6)FSMCCLK: 可变静态存储控制器的时钟,由系统时钟SYSCLK经AHB预分频器
后直接得到。类似地 ,如需使用 FSMC外接存储器,必须先开启FSMCCLK 。
在这里插入图片描述

(7)STCLK: 系统定时器 SYSTICK的外部时钟源,由系统时钟SYSCLK 经 AHB 预分频器,再经过 8分频后得到, 等千HCLK/8。除了外部时钟源 STCLK , 系 统定时器SYSTICK还可以将FCLK作为内部时钟源 。
在这里插入图片描述

(8)TIMXCLK: 定时器 2到定时器 7的内部时钟源,由APBl总线上的时钟PCLK1 经
过倍频后得到。 类似地,如需使用定时器 2到定时器 7 中的任意一个或多个,必须先开
启APB2总线上对应的定时器时钟。
在这里插入图片描述

(9)TIMxCLK: 定时器 1和定时器8的内部时钟源,由APB2总线上的时钟PCLK2经
过倍频后得到。 类似地,如需使用定时器1或定时器8 ,必须先开启APBl总线上定时器
1或定时器8的时钟。
在这里插入图片描述

(10)ADCCLK : ADC1、ADC2、ADC3的时钟, 由APB2总线上的时钟 PCLK2 经 ADC 预分频器得到。 ADCCLK最大为14MHz。
在这里插入图片描述

5 why so complication?

 最后,为什么STM32Fl03的时钟系统 会显得如此复杂呢?因为有倍频、分频和一系列外设时钟的开关。 首先,倍频是考虑到电磁兼容性,如果直接外接一个 72MHz的晶振, 过高的振荡频率会给制作电路板带来难度。
 其次,分频是因为STM32Fl03各个片上外设的工作频率不尽相同,既有高速外设又有 低速外设, 需要把高速外设和低速外设分开管理。
 最后,每个 STM32F103外设都配备了时钟开关。 当使用某个外设时, 一定要打开该外设的时钟;而当不使用某个外设时,可以把这个外设时钟关闭,从而降低STM32的整体功耗。

  • 20
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32时钟树配置是指通过配置相关寄存器来设置STM32微控制器的时钟源和时钟分频。时钟树的配置对于STM32设备的正常运行和性能优化非常重要。时钟树配置决定了各个模块的时钟频率和时钟源的选取,包括系统时钟、外设时钟和总线时钟等。 在STM32CubeMX软件,提供了可视化的方式来配置STM32时钟树,方便开发人员进行定制化的设置。通过STM32CubeMX,我们可以选择不同的时钟源以及设置时钟分频器来满足具体的需求。可以根据具体的应用要求,合理配置时钟树,以获得最佳的性能和功耗平衡。 配置STM32时钟树的步骤包括: 1. 打开STM32CubeMX软件并创建新的工程。 2. 在时钟树配置界面,选择合适的时钟源,例如内部RC振荡器、外部晶体振荡器或者外部时钟源等。 3. 根据实际需求配置各个模块的时钟频率和时钟源,例如CPU、外设、总线等。 4. 设置时钟分频器,根据需求进行精确的时钟分频,以满足系统的性能和功耗要求。 5. 生成代码并导出配置文件,以便在开发环境使用。 通过合理配置STM32时钟树,可以实现对系统时钟的灵活控制,提高系统的稳定性和性能。同时,时钟树配置也是低功耗和EMC设计的关键,可以有效降低功耗和电磁干扰。 引用提供了详细介绍STM32时钟树配置和原理的文档,引用介绍了时钟树STM32的重要性,引用推荐了可视化配置STM32时钟树的工具。这些资料可以帮助开发人员更好地理解和配置STM32时钟树

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三十二画生H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值