STM32RCC---时钟讲解以及配置一

前言

系统时钟和配置时钟必须要学会并且了然于胸。
而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 的寄存器描述部分。
在这里插入图片描述
在这里插入图片描述

后记

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值