基于野火的STM32学习笔记——RCC系统时钟

基于野火的STM32学习笔记——RCC系统时钟

前言

新年后在家疯狂摸鱼。。。然后就把之前学的忘了。。。
所以就赶紧写几篇博客恢复一下记忆 orz

一、时钟的理解

时钟是一个单片机的心脏与脉搏,就像心脏跳动时,血液才能循环流动一样,当时钟跳动(震荡)时,单片机内部的代码才能正常运行。每句代码的运行时间一般是输出的震荡频率取反(不详细展开)。

二、时钟工作框图

工作流程图

为便于讲解,讲流程图用不同颜色圈起来。
在这里插入图片描述

红色部分位

即为系统产生震荡的来源。有内部RC振荡器产生震荡频率的LSI和HSI,同时也有外部晶振产生频率的HSE和LSE。

HSE:可由4-16Mhz的外部晶振产生信号。且其精度较高,作为各类总线的主要输出信号源。

LSE:LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为*实时时钟(RTC)*或者其他定时功能提供一个低功耗且精确的时钟源。

HSI:HSI时钟信号由内部8MHz的RC振荡器产生,其功能与HSE功能相似,但因其精度较差。常作为HSE出问题后的备用晶振。

LSI:

LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。
—— (stm32f10x中文手册)

黄色部分位

黄色圆圈部分位为PLL,其可在途中所圈位置下通过分或乘控制晶振所传来的频率。
黄色下划线部分为PLLCLK,即经过PLL分屏后得到的时钟。

PLL相关设置因子在RCC_CR(时钟控制寄存器)和RCC_CFGR(时钟配置寄存器)中,如图:
在这里插入图片描述
PLLON:PLL使能,1为使能,0为关闭
PLLRDY:只读,读取该位,为1时PLL功能开启状态,为0时PLL功能关闭状态

在这里插入图片描述
PLLSRC: 选择PLL输入时钟源。只能在关闭PLL时才能写入此位
0: HSI振荡器时钟经2分频后作为PLL输入时钟
1: HSE时钟作为PLL输入时钟。
PLLMUL:设置PLL倍频系数。只能在关闭PLL时才能写入此位
0000: PLL 2倍频输出 1000: PLL 10倍频输出
0001: PLL 3倍频输出 1001: PLL 11倍频输出
0010: PLL 4倍频输出 1010: PLL 12倍频输出
0011: PLL 5倍频输出 1011: PLL 13倍频输出
0100: PLL 6倍频输出 1100: PLL 14倍频输出
0101: PLL 7倍频输出 1101: PLL 15倍频输出
0110: PLL 8倍频输出 1110: PLL 16倍频输出
0111: PLL 9倍频输出 1111: PLL 16倍频输出
PLLXTPRE: 分频HSE后作为PLL输入时钟。只能在关闭PLL时才能写入此位。0: HSE不分频 ,1: HSE 2分频

蓝色部分位

蓝色圆圈部分位:通过寄存器选择传入时钟将其转化为系统时钟(sysclk)。
蓝色横线部分位:SYSCLK系统时钟。

SW由时钟配置寄存器(RCC_CFGR)的1,0位控制
在这里插入图片描述
SW:选择系统时钟SYSCLK。
00: HSI作为系统时钟;01: HSE作为系统时钟;
10: PLL输出作为系统时钟;11:不可用。
CSS检测到HSE时钟出现问题时,则强制使HSI作为系统时钟SYSCLK!

绿色部分位

绿色部分位三种总线分频,分别为AHB,APB1,APB2。

AHB的时钟(HCLK)分频可由时钟配置寄存器(RCC_CFGR)的HPRE[3:0]控制。图中线上大部分时钟都为AHB分频后的时钟(HCLK)。
APB2的时钟(PCLK2)由AHB的时钟(HCLK)分频得到,由时钟配置寄存器(RCC_CFGR)的PPRE2[2:0]控制。
APB1的时钟(PCLK1)由AHB的时钟(HCLK)分频得到,由时钟配置寄存器(RCC_CFGR)的PPRE1[2:0]控制。HCLK1 属于低速的总线时钟,最高为 36M。
在这里插入图片描述
HPRE:AHB预分频
当AHB时钟的预分频系数大于1时,必须开启预取缓冲器。
0xxx: SYSCLK不分频
1000: SYSCLK 2分频 1100: SYSCLK 64分频
1001: SYSCLK 4分频 1101: SYSCLK 128分频
1010: SYSCLK 8分频 1110: SYSCLK 256分频
1011: SYSCLK 16分频 1111: SYSCLK 512分频
PPRE1:APB1预分频
警告:软件必须保证APB1时钟频率不超过36MHz。
0xx: HCLK不分频
100: HCLK 2分频
101: HCLK 4分频
110: HCLK 8分频
111: HCLK 16分频
PPRE2:APB2预分频
0xx: HCLK不分频
100: HCLK 2分频
101: HCLK 4分频
110: HCLK 8分频
111: HCLK 16分频

各设备时钟

常见

由图可知
在APB2总线上的外设,遵循PCLK2的时钟。
在APB1总线上的外设,遵循PCLK1的时钟。
在AHB总线上的外设,遵循HCLK的时钟。

特殊

不在三种总线上的设备通常使用其它时钟,如图中粉色所圈。

USB时钟(USBCLK):直接用PLL时钟经USB预分频固定为48Mhz的频率作为时钟。
RTC时钟(RTCCLK):用LSE震荡信号经过RTCSEL[1,0] (备份域控制寄存器 (RCC_BDCR)中) 选择后得到。
独立看门狗时钟(IWDGCLK):直接用LSI震荡产生。
外设时钟(I2S2CLK&I2S3CLK):由系统时钟SYSCLK直接产生。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值