(注:此为乐某学习记录,若有出错的地方欢迎各位指出!)
前言
本人使用的开发板的芯片是STM32H743XIH6,所以时钟也是根据此芯片来介绍。
一、什么是时钟
时钟是一个具有周期性的脉冲信号,相当于人类的心脏。如果没有脉冲,就像人类没有心跳一样,是时钟信号推动了芯片的运行。那么,芯片运行的速度,也就跟时钟的频率相关。举个例子,当人运动的时候,如果运动的强度越大,那么就心跳就会越快,以推动血液的流通。芯片的外设也会根据时钟的每个时钟节拍来工作。当然,如果我们使用较高的时钟频率,就可以工作的越快,但是相应的功耗也就会越高。就像白天运动之后,晚上就会累得不行...
二、时钟树(时钟系统)
一个芯片本身就是非常复杂的,有各种各样的外设。而任何一个外设想要使用的话,都需要开启对应的时钟通道,让时钟脉冲接入外设。而这些外设,并不是每一个的时钟频率都是跟系统的时钟频率一样高,所以为了兼容不同的外设,就有了时钟树(时钟系统)。具有了时钟树(时钟系统),就能够适应不同的场合,能够对不同的外设进行时钟的开启和关闭,也就能够控制电路的功耗。
三、系统时钟的选择
先看到参考手册的时钟介绍,其中有6个时钟源:HSE、LSE、HSI、HSI48、LSI、CSI。我们要学会的是,根据参考手册提供时钟框图,了解不同的时钟源可以作用在哪些地方。这样,我们就可以根据自己想要的效果,对时钟进行相应的设置。

1.HSE(外部高速时钟:4 MHz 到 48 MHz):
参考手册上对HSE的时钟来源说明:

由下图可知:
(1)可直接使用与系统时钟
(2)可经过PLL倍频之后使用与系统时钟
(3)可驱动至MCO1和MCO2做时钟输出

2.LSE(外部低速时钟:32.768Khz):
参考手册上对HSE的时钟来源说明:

由下图可知:
(1)外部低速时钟仅用于实时时钟(RTC)、自动唤醒(AWU)和时钟安全系统(CSS)。
(2)可驱动之MCO1做时钟输出

3.HSI(内部高速时钟:8M、16M、32M、64M)
参考手册上对HSI的时钟来源说明:

由下图可知:
(1)可直接使用与系统时钟
(2)可经过PLL倍频之后使用与系统时钟
(3)可驱动至MCO1和MCO2做时钟输出

4.HSI48(内部48M时钟)
参考手册上对HSI48的时钟来源说明:

由下图可知:
(1)可直接使用到外设
(2)可驱动至MCO1做时钟输出

5.LSI(内部低速时钟:32K)
参考手册上对LSI的时钟来源说明:

由下图可知:
(1)使用与独立看门狗(IWDG)、实时时钟(RTC)、自动唤醒(AWU)
(2)可驱动至MCO2做时钟输出
(3)可直接接入外设使用

6.CSI(内部低功耗时钟:4M)
参考手册上对CSI的时钟来源说明:

由下图可知:
(1)可直接使用到外设
(2)可驱动至MCO2做时钟输出

四、PLL锁相环(输入1-16Mhz)
简要的描述为:将时钟频率进行翻倍的操作,假如我们目前的最高时钟只有64M,但是我们想要320M的频率,那么就需要使用到PLL,PLL是提高系统时钟的必要条件。但是,当我们看到时钟框图的PLL部分,实际上只有PLL1可以用在系统时钟上。

五、时钟安全系统CSS
在外部时钟发生故障时,CSS会进行一些操作,来做出一些故障标志,或者切换时钟。在HSE故障的情况下,会自动切换回HSI。在LSE故障的情况下,就不会对RTC提供时钟源。这两种情况下,都可以产生中断,以保证MCU会进行救援工作。
六、时钟输出生成MCO1和MCO2
此MCU有两个引脚可用作时钟输出到其他的设备,可以分别选择一个时钟源,也可以用预分配器输出自己想要的时钟频率,但是不能够超过最大的引脚输出速度。
七、时钟通道
我们已经对时钟有了基本的了解,那要怎么去知道对应的外设怎么开启时钟呢?我们需要打开对应芯片的数据手册,而我们不需要去网上下载,只需要我们的Keil下载了对应的芯片包,并创建了一个工程即可。下面就是我们打开数据手册的位置。

我们翻到类似下面的这张图,就可以看到上面有APB、AHB这些字眼,这些就是我们外设的通道了。

例如我们想要开启GPIO的时钟,我们就要知道,AHB4就是GPIO的 时钟通道,我们就要去想办法找到开启方法。

八、个人总结
学到这里最大的感受就是,一定要会看数据手册和参考手册,不然很多都是一知半解的,还有一个就是要会看框图,后面学到的其他外设,其实有对应的框图的。这一篇主要只是介绍了不同的时钟源,以及简单看了一下框图,我们就知道了每个时钟源可以作用到哪里。