打印
[应用相关]

系统时钟RCC详解(超详细,超全面)

[复制链接]
1355|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1什么是时钟
时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能够做其他的处理 (点灯,串口,ADC),时钟的重要性不言而喻。



为什么 STM32 要有多个时钟源呢?

STM32本身十分复杂,外设非常多  但我们实际使用的时候只会用到有限的几个外设,使用任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费   并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。所以便有了STM32的时钟系统和时钟树

使用特权

评论回复
沙发
发给她更好fh|  楼主 | 2021-4-27 13:35 | 只看该作者
总括:
STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的耗能。
系统时钟,是处理器运行时间基准(每一条机器指令一个时钟周期)
时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。
一个单片机内提供多个不同的系统时钟,可以适应更多的应用场合。
不同的功能模块会有不同的时钟上限,因此提供不同的时钟,也能在一个单片机内放置更多的功能模块。
对不同模块的时钟增加开启和关闭功能,可以降低单片机的功耗
STM32为了低功耗,他将所有的外设时钟都设置为disable(不使能),用到什么外设,只要打开对应外设的时钟就可以, 其他的没用到的可以还是disable(不使能),这样耗能就会减少。  这就是为什么不管你配置什么功能都需要先打开对应的时钟的原因
————————————————
版权声明:本文为CSDN博主「Z小旋」的原创**,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/as480133937/article/details/98845509

使用特权

评论回复
板凳
发给她更好fh|  楼主 | 2021-4-27 13:42 | 只看该作者
STM32的时钟系统框图

使用特权

评论回复
地板
发给她更好fh|  楼主 | 2021-4-27 13:43 | 只看该作者
乍一看很吓人,但其实很好理解,我们看系统时钟SYSCLK 的左边  系统时钟有很多种选择,而左边的部分就是设置系统时钟使用那个时钟源,   

系统时钟SYSCLK 的右边,则是系统时钟通过AHB预分频器,给相对应的外设设置相对应的时钟频率

 

从左到右可以简单理解为  各个时钟源--->系统时钟来源的设置--->各个外设时钟的设置

使用特权

评论回复
5
发给她更好fh|  楼主 | 2021-4-27 13:47 | 只看该作者
时钟系统
1各个时钟源    (左边的部分)
STM32 有4个独立时钟源:HSI、HSE、LSI、LSE。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。  
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

使用特权

评论回复
6
发给她更好fh|  楼主 | 2021-4-27 13:51 | 只看该作者
其中LSI是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源 而独立使用 

而HSI高速内部时钟 HSE高速外部时钟 PLL锁相环时钟  这三个经过分频或者倍频 作为系统时钟来使用

 

PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。  通过倍频之后作为系统时钟的时钟源

使用特权

评论回复
7
发给她更好fh|  楼主 | 2021-4-27 13:59 | 只看该作者
举个例子:Keil编写程序是默认的时钟为72Mhz,其实是这么来的:外部晶振(HSE)提供的8MHz(与电路板上的晶振的相关)通过PLLXTPRE分频器后,进入PLLSRC选择开关,进而通过PLLMUL锁相环进行倍频(x9)后,为系统提供72MHz的系统时钟(SYSCLK)。之后是AHB预分频器对时钟信号进行分频,然后为低速外设提供时钟。

或者内部RC振荡器(HSI) 为8MHz  /2 为4MHz 进入PLLSRC选择开关,通过PLLMUL锁相环进行倍频(x18)后 为72MHz

 
PS:  网上有很多人说是5个时钟源,这种说法有点问题,学习之后就会发现PLL并不是自己产生的时钟源,而是通过其他三个时钟源倍频得到的时钟

使用特权

评论回复
8
发给她更好fh|  楼主 | 2021-4-27 14:04 | 只看该作者
2系统时钟SYSCLK
系统时钟SYSCLK可来源于三个时钟源:
①、HSI振荡器时钟
②、HSE振荡器时钟
③、PLL时钟

使用特权

评论回复
9
发给她更好fh|  楼主 | 2021-4-27 14:05 | 只看该作者
最大为72Mhz

使用特权

评论回复
10
发给她更好fh|  楼主 | 2021-4-27 14:06 | 只看该作者
3USB时钟

使用特权

评论回复
11
发给她更好fh|  楼主 | 2021-4-27 14:12 | 只看该作者
STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取(唯一的),,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz

使用特权

评论回复
12
发给她更好fh|  楼主 | 2021-4-27 14:15 | 只看该作者
4把时钟信号输出到外部

使用特权

评论回复
13
发给她更好fh|  楼主 | 2021-4-27 14:15 | 只看该作者
STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。可以把时钟信号输出供外部使用

使用特权

评论回复
14
发给她更好fh|  楼主 | 2021-4-27 14:19 | 只看该作者
5系统时钟通过AHB分频器给外设提供时钟(右边的部分)  重点


从左到右可以简单理解为  系统时钟--->AHB分频器--->各个外设分频倍频器 --->   外设时钟的设置

使用特权

评论回复
15
发给她更好fh|  楼主 | 2021-4-27 14:20 | 只看该作者
右边部分为:系统时钟SYSCLK通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用:

 ①内核总线:送给AHB总线、内核、内存和DMA使用的HCLK时钟。

使用特权

评论回复
16
发给她更好fh|  楼主 | 2021-4-27 14:21 | 只看该作者
②Tick定时器:通过8分频后送给Cortex的系统定时器时钟。

使用特权

评论回复
17
发给她更好fh|  楼主 | 2021-4-27 14:27 | 只看该作者
③I2S总线:直接送给Cortex的空闲运行时钟FCLK。

使用特权

评论回复
18
发给她更好fh|  楼主 | 2021-4-27 14:28 | 只看该作者
④APB1外设:送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给通用定时器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2-7使用。

使用特权

评论回复
19
发给她更好fh|  楼主 | 2021-4-27 14:29 | 只看该作者
⑤APB2外设:送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给高级定时器。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用。

使用特权

评论回复
20
发给她更好fh|  楼主 | 2021-4-27 14:31 | 只看该作者
另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。 

需要注意的是,如果 APB 预分频器分频系数是 1,则定时器时钟频率 (TIMxCLK) 为 PCLKx。否则,定      时器时钟频率将为 APB 域的频率的两倍:TIMxCLK = 2xPCLKx。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

546

帖子

1

粉丝