全方位stm32时钟解析,含时钟树解析

首先什么是时钟

众所周知,stm32有众多时钟,那么回到最基本的,什么是时钟呢,那么简单来说,时钟就像是单片机的脉搏,是单片机的驱动源,使用任何一个外设都必须打开相应的时钟。每个时钟一到,系统都会处理一步数据,这样才能让工作不出现紊乱。

时钟产生的原理

简单的说,没有晶振就没有时钟周期,就无法执行程序代码,单片机就无法工作。它主要是由石英晶体做成的,它和外电路产生谐振,用来控制CPU的时钟频率,也就是产生高低电平的周期,一般来说,频率越高处理速度越快。


单片机工作时,是一条一条地取指令,然后一步步地执行。单片机访问一次储存器的时间,称为一个机器周期,这是一个时间基准。一个机器周期包括12个时钟周期。如果单片机选择了12MHz的晶振,它的时钟周期就是1/12us,它的机器周期就是12*(1/12)us,也就是1us访问一次存储器。

为什么要设置不同的时钟呢

首先,任何外设都需要时钟,51单片机,stm32等等。51单片机不需要配置时钟,是因为一个时钟使能之后所有相关的功能都可以用了,而这个时钟是默认开启的。stm32是低功耗的,它将所有的始终都默认设置为disable状态,在你需要用哪个时钟的时候,开哪个时钟就可以,也就是说用到什么外设,只要打开对应外设的时钟就可以,其他的没用到的就还是disable,这样能耗就会减少。


用一个简单的比喻来形容,单片机的资源就好比一个水库里的水,不同的时钟就好比很多个门,每个门都能出水,时钟可以是认为门的开关。在51单片机中一个时钟就把所有用到时钟的外设都控制了,而stm32的时钟是有分工的,而且每类时钟的频率不一样,因为没必要所有时钟都是最高频率的,只要够用就行了,就好比一个门分出来的水流的大小,你只要洗个脸,但是出来的是像洪水一般的水流,那就尴尬了,消耗能源也多,所有不同的时钟会有频率差别,或者在配置的时候可以配置时钟分频。

stm32中时钟的分类

在STM32F1中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL

外部时钟

  • 高速外部时钟(HSE):外部时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。
  • 低速外部时钟(LSE):外部时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。

内部时钟

  • 高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,但不稳定。
  • 低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。

PLL时钟

  • Phase Lock Loop 为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

时钟树理解

在这里插入图片描述
在这里插入图片描述
对于stm32f4的板子

1、LSI低速内部时钟:由内部RC振荡器产生,频率为32kHz。如图区域
2、HSI高速内部时钟:由内部RC振荡器产生,频率为16MHz。如图区域
3、LSE低速外部时钟:一般由外部晶振提供,频率为32.768kHz。如图区域
4、HSE低速外部时钟:一般由外部晶振提供,频率为4~26MHz。如图区域
5、主PLL时钟:由HSE或HSI提供。如图区域
6、PLLI2S时钟:由HSE或HSI提供。如图区域

时钟的流向

我们已经知道了各个时钟源的输入,那么有了输入的时钟源,各个时钟源又是分别输出给哪些外设工作。我们分别从时钟源输入处开始,根据走线和结点,寻找到相应的输出。对应编号如下图中所示。

1、LSI低速内部时钟:供给独立看门狗⑴、实时时钟RTC⑵
2、HSI高速内部时钟:供给系统时钟⑸、时钟输出1MCO1⑷、主PLL时钟⑹、PLLI2S时钟⑺
3、LSE低速外部时钟:供给实时时钟RTC⑵、时钟输出1MCO1⑷
4、HSE低速外部时钟:供给系统时钟⑸、实时时钟RTC⑵、主PLL时钟⑹、PLLI2S时钟⑺、时钟输出1MCO1⑷、时钟输出2MCO2⑶
5、主PLL时钟:供给系统时钟⑸、外设时钟⑻、时钟输出1MCO1⑷、时钟输出2MCO2⑶
6、PLLI2S时钟::供给I2S时钟⑼、时钟输出1MCO1⑷、时钟输出2MCO2⑶

HSI、HSE、主PLL时钟都可以供给系统时钟⑸,STM32的很多外设是挂载在AHB、APB总线桥上的,这些外设的时钟又是怎么样的,这就和系统时钟的流向有关了,系统时钟的流向分析如下:
1、供给时钟输出2MCO2⑶
2、供给以太网PTP时钟⑽
3、经AHBPRESC预分频器⑾后:HCLK到AHB总线、内核、存储器和DMA⒁,到Cortex系统定时器⒂,自由运行时钟⒃
4、经AHBPRESC预分频器⑾、APBxPRESC预分频器⑿后:供给APBx外设时钟⒄
5、经AHBPRESC预分频器⑾、APBxPRESC预分频器后⑿,再经倍频条件判断⒀处理后:供给APBx定时器时钟⒅
在这里插入图片描述

在程序中的配置

在这里插入图片描述
在这里插入图片描述
不同寄存器的作用具体说明参考《stm32 Reference manual》

时钟总结

1:STM32共有5个时钟源。
2:系统始终SYSCLK可来源于三个时钟源:

  • HSI振荡器时钟
  • HSE振荡器时钟
  • PLL时钟

3:用户可以通过多个预分频器配置AHB,高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2的最大频率是72MHz。APB1的最大允许频率是36MHz。
4:当不被使用时,任意一个时钟源都可以被独立地启动或关闭,由此优化系统功耗。




参考:链接1 链接2

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值