关于STM32时钟系统的配置

关于STM32时钟系统的配置
广西●河池学院
广西高校重点实验室培训基地
系统控制与信息处理重点实验室
本篇博客来自河池学院:智控无人机小组
写作时间:2020.8.22

关于STM32时钟系统的配置

关于STM32时钟系统的配置

在 STM32 中,有五个时钟源,为
HSI、HSE、LSI、LSE、PLL,系统时钟(SYSCLK)相当于神经中枢系统,一般为72M,可经过AHB预分频器、APB1预分频器、APB2预分频器后作为一系列外设时钟。系统时钟(SYSCLK)可以由HSI振荡器时钟、HSE振荡器时钟、PLL(锁相环)时钟驱动。HSE为外部晶振提供产生时钟源(416MHZ),HSI时钟信号由内部8MHz的RC振荡器产生,具有睡眠情况下继续工作的特点,为备用时钟源。PLL可以选择HIS振荡器/2或HSE振荡器(可选择HSE/2或者直接HSE直接输入)为PLL的输入时钟,倍频可选择为216 倍,但是其输出频率最大不得超过 72MHz,可经过USB分频器分频后作为USB时钟的时钟源。当外部晶振受损时可由CSS(时钟监视系统)自动切换HIS时钟为时钟源。RTC(实时时钟)可由LSE、HSE/128分频、LSI驱动。LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体,为实时时钟(RTC)或者其他定时功能提供 一个低功耗且精确的时钟源。LSI 是低速内部时钟,RC 振荡器,频率约为 40kHz,作为独立看门狗时钟源。MCO为输出内部时钟,可输出系统时钟(SYSCLK)、HSI、HSE、或者/2分频PLL(锁相环),MCO为一个引脚,可用示波器对内部的时钟进行波形检测。

下面我将对SystemInit ()函数进行刨析

关于STM32时钟系统的配置

打开HIS

关于STM32时钟系统的配置
将寄存器所有位置零即关闭,相当于初始化
关于STM32时钟系统的配置

接下来我们将进入SetSysClock()函数

运用#ifdef语法调用不同频率时钟配置函数,可选择不同时钟,只在system_stm32f10x.c的开头选择所需的时钟即可。

关于STM32时钟系统的配置

通过选择了不同分频时钟的函数我们将进入时钟的配置,以SetSysClockTo72()配置72M为例。

关于STM32时钟系统的配置

首先打开外部高速时钟(HSE)

关于STM32时钟系统的配置

等待HSE时钟稳定

关于STM32时钟系统的配置

判断是否稳定

关于STM32时钟系统的配置

然后通过操作CFGR寄存器的位对AHB、APB1、APB2进行分频处理

关于STM32时钟系统的配置
关于STM32时钟系统的配置

选择PLL为时钟源,并选择9倍频的HSE为输入时钟,所以倍频之后的系统时钟为72MHz

之后便是操作CR寄存器使能PLL时钟(RCC->CR |= RCC_CR_PLLON;)

然后等待PLL时钟就绪并操作CFGR寄存器选择PLL为系统时钟。
(系统时钟默认为72M,在启动文件中已经调用了SystemInit()函数不需要自己配置,如果需要其他频率的时钟修改倍频因子即可)