首先,应该清楚RCC是什么?用来干嘛的?
RCC(复位和时钟控制 &Reset Clock Controller),用来管理MCU的时钟系统;
STM32的RCC和RTC有什么联系?
RCC是STM32的时钟控制器,可开启或关闭各总线的时钟,在使用各外设功能必须先开启其对应的时钟,没有这个时钟内部的各器件就不能正常运行。
而RTC是STM32内部集成的一个简单的时钟(计时用),如果不用就关闭,用的话先要通过RCC配置其时钟源,可看作是一个外设器件。
其次,要知道STM32的MCU系统初始化之后,才运行我们的main函数,那么,系统初始化做了什么事情,可以查看每款MCU相应的启动文件(例如startup_stm32f10x_hd);
MCU上,C语言运行的基本条件是必须有一个完整的堆栈空间。
所以,这里配置了栈空间的长度(Stack_size)和堆空间的长度(Heap_size),以及栈指针(sp);
接着,这部分代码,说明:
MCU上电时刻,运行在8MHZ,经过systemInit里面的setsysclock,系统最高72MHz工作频率 ,再到__main;
如果在用户的main里面加上RCC_DeInit(),系统时间将恢复默认,运行在8MHZ下;
小结是:RCC影响着MCU程序运行的速率的,即主频。
接下来了解,SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL;
HSE Osc(High Speed External Oscillator),HSI RC(High Speed InternalRC);
时钟树
对于刚接触STM32的时钟树,对时钟树的理解,可以重点先思考两个问题:
1、时钟从哪里来:时钟源。
2、时钟怎么供给STM32的系统工作:时钟的流向(输入——>处理——>输出)
详细可看“STM32时钟树分析”,https://blog.csdn.net/bulebin/article/details/73433677
下面对时钟树进行分析:
如果没有任何配置,MCU上电时刻,将是走绿色这条线路。SW默认打开。提供8MHZ,系统时钟SYSCLK运行在8MHz下。不能走通
如果走HSE这条蓝色路线,也是8MHZ,也不能走通。
所有只能走PLLCLK锁相环时钟这条路线,提供72MHZ,如下图:
这里的/2称为分频,*2.*3.*4.*16称为倍频
在cortex STM32中,存在3条总线,分别是AHB、APB1、APB2
上面推论出的的SYSCLK为AHB提供时钟主频;
AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备;
这里我们对AHB除以1,即一分频,运行72MHZ;
这个时钟树决定了MCU的运行速率;