电子产业一站式赋能平台

PCB联盟网

搜索
查看: 58|回复: 0
收起左侧

一千余字解读stm32时钟树

[复制链接]

337

主题

342

帖子

2433

积分

三级会员

Rank: 3Rank: 3

积分
2433
发表于 2024-12-30 21:00:00 | 显示全部楼层 |阅读模式
第一节 概述
* A$ \  [* A1 ~9 y9 R  
时钟树的概念可以类比于人体的心脏和血液循环系统。就像心脏通过周期性的收缩将血液泵向身体各处一样,MCU的运行依赖于周期性的时钟脉冲来驱动。这些脉冲通常由外部晶体振荡器提供时钟输入,并最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径类似于大树的养分由主干流向各个分支,因此被称为时钟树。5 E: ?7 J; Q/ `5 V* U% S
STM32内部也是由多种多样的电路模块组合在一起实现的。当一个电路越复杂,在达到正确的输出结果前,它可能因为延时会有一些短暂的中间状态,而这些中间状态有时会导致输出结果会有一个短暂的错误,这叫做电路中的“毛刺现象”,如果电路需要运行得足够快,那么这些错误状态会被其它电路作为输入采样,最终形成一系列的系统错误。为了解决这个问题,在单片机系统中,设计时以时序电路控制替代纯粹的组合电路,在每一级输出结果前对各个信号进行采样,从而使得电路中某些信号即使出现延时也可以保证各个信号的同步,可以避免电路中发生的“毛刺现象”,达到精确控制输出的效果。
( F5 U9 r$ l8 v% W9 \由于时序电路的重要性,因此在MCU设计时就设计了专门用于控制时序的电路,在芯片设计中称为时钟树设计。由此设计出来的时钟,可以精确控制我们的单片机系统。对于STM32WLE5,正常工作的主频可以达到48Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十Khz的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的MCU一般都是采取多时钟源的方法来解决这些问题。   2 ?6 o  c% L' h8 d' m" L
STM32本身非常复杂,外设非常的多,为了保持低功耗工作,STM32的主控默认不开启这些外设功能。用户可以根据自己的需要决定STM32芯片要使用的功能,这个功能开关在STM32主控中也就是各个外设的时钟。- r* n6 w9 B, o$ e! o" q( x0 b5 o( w
第二节 时钟源            . Q- F) ^  A, }& A1 C: o

jbiqxeiowvc64039687811.png

jbiqxeiowvc64039687811.png
% b/ j8 o* P+ l- H$ d- X
对于STM32,输入时钟源主要包括HSI,HSE,LSI,LSE。其中,从时钟频率来分可以分为高速时钟源和低速时钟源,其中HSI和HSE是高速时钟,LSI和LSE 是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中HSE和LSE是外部时钟源;其他是内部时钟源,芯片上电即可产生,不需要借助外部电路。两个外部时钟源建议使用外部晶振产生,这样的时钟精度高且稳定。
1 m  f$ Q6 ^" K* w% K# p) B/ t9 x           
( N$ S7 X& b6 i% l, c- r1 }以下是各时钟源的说明:   
2 [: V* p; a6 m1 t8 ?5 q6 S" F1,高速外部振荡器HSE (High Speed External Clock signal):外接石英/陶瓷谐振器,频率为4MHz~32MHz。' S# L7 T* L6 Z
2,低速外部振荡器LSE (Low Speed External Clock signal):外接32.768kHz石英晶体,主要作用于RTC和IWDG的时钟源。
1 G7 ^+ q9 n! j2 {$ t! o3,高速内部振荡器HSI(High Speed Internal Clock signal):由内部RC振荡器产生,频率为16MHz。
) p$ K) |6 R% Q: G- J4,低速内部振荡器LSI(Low Speed Internal Clock signal):由内部RC振荡器产生,频率为31~32kHz。
/ R# G& s0 H) q5 L6 c/ a  a0 C芯片上电时默认由内部的 HSI 时钟启动,如果进行了硬件和软件的配置,芯片才会根据配置调试尝试切换到对应的时钟源
. n- x" \$ t) n' c
4 B" S! ?2 k, q  `4 X  Q第三节 锁相环   锁相环是自动控制系统中常用的一个反馈电路,在STM32主控中,锁相环的作用主要有两个部分:输入时钟净化和倍频。前者是利用锁相环电路的反馈机制实现,后者我们用于使芯片在更高且频率稳定的时钟下工作。如图所示:    $ u: L4 m& }3 O+ `5 P- L

ok4e3afdwnk64039687912.png

ok4e3afdwnk64039687912.png
2 V0 a6 S0 Q( [
PLL时钟的时钟源要先经过一个分频系数为PLLM的分频器,然后经过倍频系数为N的倍频器出来之后的时候还需要经过一个分频系数为P或者Q或者R的分频器分频之后,最后才生成最终的主PLL时钟。
  O0 o6 P4 {0 Y例如我们的外部晶振选择32MHz。同时我们设置相应的分频器PLLM=8,倍频器倍频系数N=6,分频器分频系数R=2,那么PLL输出高速时钟PLLP为:32MHZ/2*6/2,即48MHZ。: ~6 H& ^" ?. `7 Y; G9 {0 m
3 k+ Z9 O1 p0 }' c$ _) o& L
第四节 系统时钟
$ ?  i# m+ h4 H2 p2 E  
STM32的系统时钟SYSCLK为整个芯片提供了时序信号。讲解PLL作为系统时钟时,讲到了如何把主频通过PLL设置为48MHz。从时钟树图可知,AHB、APB1、APB2、内核时钟等时钟通过系统时钟分频得到。根据得到的这个系统时钟,下面我们结合外设来看一看各个外设时钟源:   
; L8 G2 r! G7 H& b9 q: O( t, g
! Z9 l4 R" T, Z) O+ h9 b0 k可以看到,系统时钟输入源可选时钟信号有外部高速时钟HSE32、内部高速时钟HSI16、经过倍频的PLLCLK和MSI。这里选择PLLCLK作为系统时钟,此时系统时钟的频率为48MHz。之后变成APB1,APB2和APB3。7 h1 c0 \7 R. j  K0 y! x# W
第五节 时钟输出
8 |% \$ b3 D! l% s7 h3 I) V: i9 `" M  
MCO时钟输出的作用是为外部器件提供时钟。STM32允许通过设置,通过MCO引脚输出一个稳定的时钟信号。    * A1 V' k1 u- d5 t# I+ ^

mdjs1ti3jjj64039688012.png

mdjs1ti3jjj64039688012.png

+ ~4 i  \- u# h, M% `6 \  E4 X3 K    MCO时钟输出的时钟来源从上向下依次为:LSE,LSI,HSE,HSI,PLLCLK,SYSCLK,MSI,PLLP和PLLQ。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表