STM32时钟系统总结

从51转型到stm32,在前面的GPIO的输入输出读取找到规律就能理解和使用,可以看到stm32中的所有操作无非是操作寄存器来实现的,这也是有51单片机基础的我慢慢意识到的,而且我也深刻理解,要想玩转stm32,就需要对时钟系统、定时器系统、中断系统有一个清晰的认识,在学51的时候并没有深入去理解它,但在stm32中明显他们成了更复杂的系统,所以必须要重点理解了。

这里我想用我的思路来整理在学习STM32的时钟系统时的知识点。

一、首先先介绍STM32的时钟源:

STM32里的时钟源主要有两种分类:内部时钟/外部时钟,高速/低速。
其中内部时钟都是由RC震荡电路产生的方波,主要特性就是不稳定,所以一般不会采用内部时钟作为时钟源,更多的是将其作为一个替补时钟源。

  • HSI(high speed inter):高速内部时钟,具有8M(8000000)的频率。
  • LSI(low speed inter):低速内部时钟,具有40K(40000)的频率。
  • HSE(low speed extern):高速外部时钟,可接4~16M(4000000~16000000)的频率晶振。
  • LSE(low speed extern):低速外部时钟,接32.768kHz(32768)的频率。

STM32时钟系统总结_第1张图片

二、需要配置的时钟

在左图中一共要配置两个重要时钟,SYSCLK系统时钟,以及RTCCLK实时时钟。

  • SYSCLK系统时钟:经过分频和分路,为各个总线和各个部件提供频率。
    这个时钟有什么用呢,首先在stm32中如果一个部件没有提供频率,那么它是不工作的,需要先设定好频率分好周期,规定了这个部件每个周期需要做一个工作,那么他就会按照规定好的频率每个周期进行一次操作,就相当于一个人喊口号,其他人听口号工作。
    而为了降低部件的功耗,可能就需要它的工作效率低一些,这里就需要进行分频了,所以在系统时钟之后还有若干个总线,根据需求进行分频,使得配置出多个不同频率的时钟总线来满足需求。

  • RTC实时时钟:实时时钟本质是一个定时器
    单片机进行计时时使用,比如stm32中需要定时1秒,这就需要实时时钟进行定时完成,不同于系统时钟面向内部所有部件对所有部件进行分配周期,定时器更多的是面向现实世界,实现定时1毫秒这种面向我们现实的时间。

三、时钟的配置

这一步讲述时钟该如何配置,是怎么最终确定SYSCLK和RTCCLK两个时钟系统的频率的。
根据一二步,可以看到我们需要的肯定是一个精准的定时系统,像是内部的HSI和LSI都是不满足我们需求的时钟源,所以正常来说我们都是使用HSELSE作为时钟源的。但是当这两个无法使用的时候就需要内部时钟源上场了,在系统时钟配置时有个叫做CSS的检测装置,如果发现外部时钟HSE失效,则自动启用内部时钟HSI,保证系统时钟一定进行工作。

接着为了具体需求,我们要为SYSCLK设置一个频率,这个频率通过多种来源,可以是HSI,可以是HSE,而中间还有一个PLL倍频器,对频率进行放大的一个元件,通过它时钟源的频率进行放大后提供给SYSCLK,可以设置最大x16,但是最高的频率是72MHz。
所以SYSCLK的频率来源一共有3个:

  1. HSI直接提供
  2. HSE直接提供
  3. HSI÷2或者HSE或者HSE÷2经过PLL最大16倍的放大产生的频率(最大72Mhz)

RTC实时时钟一般就由外部晶振来提供了:

  • 需要一提的是LSE的频率一般是32.768kHz,32768Hz=215即分频15次后为1Hz,周期=1s,经过工程师的经验总结32768Hz,时钟最准确,并且规范统一。所以多采用这种频率的外部晶振作为RTC的时钟源。

四、总线的配置

看到这个图的右边,有大量的分频器,用于根据实际需要对系统时钟进行划分,其中与系统时钟相连的数据总线和系统总线AHBSRAMDMA单元直接与其连接,并且挂着许多独立分频器以输出不同的频率;AHB上又连接着两条先进设备总线APB,APB下也有多条分支和分频器。这样AHB与APB再与下面挂着的分频器共同组成了总线矩阵,给不同的部件提供可自定义的频率:

  1. AHB与SYSTEM时钟直接相连,不经过任何分频,可以达到和系统时钟最高值一样的频率72Mhz。
  2. AHB经过分频器分为分频并分为几条线其中一条引向APB2总线,最高频率为72Mhz,我们之前有多次用到的RCC->APB2ENR寄存器使能IO口就是将这个分频后的频率提供给了IO口使其工作,总线2还可以再经过一个分频器分频给定时器1提供频率,或者另一条分支经过分频器分频给ADC时钟。
  3. 还有一条线引向APB1分配器,和APB2差不多吧,只是最高频率为36Mhz,然后还可以继续分频后给各个通用定时器频率。

五、总结

stm32时钟可以大致分为两个部分,对应图片的左边和右边:

  1. 选择时钟源: SYSTEM时钟一般选择更稳定的外部时钟源,根据功耗需求确定HSE频率和PLL倍频系数,给系统时钟提供合适的频率;
    RTC时钟一般选择定时更准确、更稳定的时钟源,32.768KHz是一般选择。
  2. 总线分频: SYSTEM时钟的频率经过多个总线和分频器给不同的部件提供频率,因为各个部件功耗需求各不相同,就需要经过合理的配置,以达到最优解。

TIPS:

  1. 各个部件如果不提供时钟则不会进行工作,所以每次我们初始化IO口的时候都会通过寄存器使能总线时,比如APB2为该IO口提供频率就要配置寄存器的相应的位。
  2. 一般我们系统时钟设置为72MHz,当我们要考虑到整个系统的功耗问题时,则需要通过分频器对各个总线分配合适的频率。

你可能感兴趣的:(STM32)