STM32RCC—时钟讲解以及配置一

  • Post author:
  • Post category:其他




前言

系统时钟和配置时钟必须要学会并且了然于胸。

而STM32f03时钟这部分。是难点。

时钟树单纯讲理论的话会比较枯燥,如果选取一条主线,并辅以代码,先主后次讲解的话 会很容易 ,而且记忆还 更深刻。 我们这里选取库函数时钟系统时钟函数:

SetSysClockTo72(); 以这个函数的编写流程来讲解时钟树

下面是STM32时钟树。

时钟树



1.CRC相关寄存器

要了解并配置时钟树,首先需要认识有关寄存器



1.1 时钟控制寄存器(RCC_CR)

偏移地址: 0x00

复位值: 0x000 XX83, X代表未定义

访问: 无等待状态, 字, 半字 和字节访问

RCC_CR

在这里插入图片描述

在这里插入图片描述



1.1 时钟配置寄存器(RCC_CFGR)

偏移地址: 0x04

复位值: 0x0000 0000

访问: 0到2个等待周期,字,半字和字节访问

只有当访问发生在时钟切换时,才会插入1或2个等待周期。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



2.系统时钟讲解

对应于图中黄色部分



2.1 HSE:高速外部时钟

无源晶振(4-16M),通常使用8M,对应于

RCC_CR寄存器中位16(控制)和位17(就绪标志)

PLLXTPRE,确定 PLL 时钟来源的时候, HSE 可以不分频或者 2 分频,这个由时钟配置寄存器

CFGR 的位 17

来控制



2.2 PLL 时钟源

PLLSRC,PLL 时钟来源可以有两个,一个来自 HSE,另外一个是 HSI/2,具体用哪个由时钟配置寄存器

CFGR 的位 16: PLLSRC 设置。


HSI 是内部高速的时钟信号,频率为 8M,根据

温度和环境的情况频率会有漂移,一般不作为 PLL 的时钟来源。这里我们选 HSE 作为PLL 的时钟来源。



2.3 PLL 时钟 PLLCLK

PLLMUC为PLL倍频系数,设置成多少, 由时钟配置寄存器

CFGR 的位21-18

: PLLMUL[3:0]设置。我们这里设置为 9 倍频。


注意:PLL时钟源头使用HIS/2的时候,PLLMUL最大只能为16,这个时候PLLCLK最大只能是64M,小于ST官方推荐的最大时钟72M。



2.4 系统时钟 SYSCLK

系统时钟来源可以是: HSI、 PLLCLK、 HSE,具体的时钟配置寄存器

CFGR 的位 1-0

:SW[1:0]设置。我们这里设置系统时钟: SYSCLK = PLLCLK = 72M。



2.5 AHB 总线时钟 HCLK

由时钟配置寄存器

CFGR的位 7-4

: HPRE[3:0]设置。

我们这里设置为 1 分频,即 HCLK=SYSCLK=72M。



2.6 APB2 总线时钟 HCLK2

由时钟配置寄存器

CFGR 的位 13-11

: PPRE2[2:0]决定。

们这里设置为 1 分频,即 PCLK2= HCLK = 72M。



2.7 APB1 总线时钟 HCLK1

由时钟配置寄存器

CFGR 的位 10-8

:PRRE1[2:0]决定。

最高为36M。



3.时钟树其他部分讲解

通过对系统时钟设置的讲解,整个时钟树我们已经把握的有六七成,剩下的时钟部分我们讲解几个重要的。

对应图中字母部分



3.1 A、 USB 时钟

USB 时钟是由 PLLCLK 经过 USB 预分频器得到,分频因子可以是: [1,1.5], 具体的由时钟配置寄存器

CFGR 的位 22: USBPRE 配置

。 USB 的时钟最高是 48M,根据分频因子

反推过来算 , PLLCLK 只能是 48M 或者是 72M。一般我们设置 PLLCLK=72M,USBCLK=48M。 USB 对时钟要求比较高,所以 PLLCLK 只能是由 HSE 倍频得到,不能使用 HSI 倍频



3.2 B、 Cortex 系统时钟

Cortex 系统时钟由 HCLK 8 分频得到,等于 9M, Cortex 系统时钟用来驱动内核的系统定时器 SysTick, SysTick 一般用于操作系统的时钟节拍,也可以用做普通的定时。



3.3 C、 ADC 时钟

ADC 时钟由 PCLK2 经过 ADC 预分频器得到,分频因子可以是[2,4,6,8],具体的由时钟配置寄存器

CFGR 的位 15-14

: ADCPRE[1:0]决定。 很奇怪的是怎么没有 1 分频。 ADC

时钟最高只能是 14M,如果采样周期设置成最短的 1.5 个周期的话, ADC 的转换时间可以达到最短的 1us。如果真要达到最短的转换时间 1us 的话,那 ADC 的时钟就得是 14M,反推 PCLK2 的时钟只能是: 28M、 56M、 84M、 112M,鉴于 PCLK2 最高是 72M,所以只能取 28M 和 56M。



3.4 D、 RTC 时钟、独立看门狗时钟

RTC 时钟可由 HSE/128 分频得到,也可由低速外部时钟信号 LSE 提供,频率为32.768KHZ,也可由低速内部时钟信号 HSI 提供,具体选用哪个时钟由备份域控制寄存器

BDCR 的位 9-8

: RTCSEL[1:0]配置。 独立看门狗的时钟由 LSI 提供,且只能是由 LSI 提供,LSI 是低速的内部时钟信号,频率为 30~60KHZ 直接不等,一般取 40KHZ。



3.5 E、 MCO 时钟输出

MCO 是 microcontroller clock output 的缩写,是微控制器时钟输出引脚,在 STM32 F1系列中 由 PA8 复用所得,主要作用是可以对外提供时钟,相当于一个有源晶振。 MCO 的时钟来源可以是: PLLCLK/2、 HSI、 HSE、 SYSCLK,具体选哪个由时钟配置寄存器

CFGR 的位 26-24

: MCO[2:0]决定。 除了对外提供时钟这个作用之外, 我们还可以通过示波器监控 MCO 引脚的时钟输出来验证我们的系统时钟配置是否正确。



3.6 F、 HSI高速的内部时钟。

来源:芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。

控制: RCC_CR 时钟控制寄存器的位0:HSION控制



4.设置系统时钟库函数

设置系统时钟库函数如下,该函数是直接操作寄存器的,有关寄存器部分请参考数据手册的 RCC 的寄存器描述部分。

在这里插入图片描述

在这里插入图片描述



后记

时钟树这块配置还是很重要的,一定要掌握。



版权声明:本文为bsqetuo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。