学习笔记:通过直接操作寄存器配置时钟

本文详细解释了STM32芯片RCC_Init中的时钟配置,包括HSE、HSI、PLL的使用,以及预分频、锁相环等技术在确定系统时钟频率中的作用。
摘要由CSDN通过智能技术生成

 RCC_Init主要用于对STM32芯片的时钟进行初始化,以下以STM32F1系列为例。

在STM32F10xxx参考手册中,我们可以找到:

位31:26保留,始终读为0。
位25

PLLRDY:PLL时钟就绪标志 (PLL clock ready flag)

PLL锁定后由硬件置’1’。

0:PLL未锁定;

1:PLL锁定。

位24

PLLON:PLL使能 (PLL enable)

由软件置’1’或清零。

当进入待机和停止模式时,该位由硬件清零。当PLL时钟被用作或被选择将要作为系统时钟 时,该位不能被清零。

0:PLL关闭;

1:PLL使能。

位23:20保留,始终读为0。
位19

CSSON:时钟安全系统使能 (Clock security system enable)

由软件置’1’或清零以使能时钟监测器。

0:时钟监测器关闭;

1:如果外部4-16MHz振荡器就绪,时钟监测器开启。

位18

HSEBYP:外部高速时钟旁路 (External high-speed clock bypass)

在调试模式下由软件置’1’或清零来旁路外部晶体振荡器。

只有在外部4-16MHz振荡器关闭的情 况下,才能写入该位。

0:外部4-16MHz振荡器没有旁路;

1:外部4-16MHz外部晶体振荡器被旁路。

位17

HSERDY:外部高速时钟就绪标志 (External high-speed clock ready flag)

由硬件置’1’来指示外部4-16MHz振荡器已经稳定。

在HSEON位清零后,该位需要6个外部4- 25MHz振荡器周期清零。

0:外部4-16MHz振荡器没有就绪;

1:外部4-16MHz振荡器就绪。

位16

HSEON:外部高速时钟使能 (External high-speed clock enable)

由软件置’1’或清零。 当进入待机和停止模式时,该位由硬件清零,关闭4-16MHz外部振荡器。当外部4-16MHz振荡 器被用作或被选择将要作为系统时钟时,该位不能被清零。

0:HSE振荡器关闭;

1:HSE振荡器开启。

位15:8

HSICAL[7:0]:内部高速时钟校准 (Internal high-speed clock calibration)

在系统启动时,这些位被自动初始化

位7:3

HSITRIM[4:0]:内部高速时钟调整 (Internal high-speed clock trimming)

由软件写入来调整内部高速时钟,它们被叠加在HSICAL[5:0]数值上。

这些位在HSICAL[7:0]的基础上,让用户可以输入一个调整数值,根据电压和温度的变化调整 内部HSI RC振荡器的频率。

默认数值为16,可以把HSI调整到8MHz±1%;每步HSICAL的变化调整约40kHz。

位2保留,始终读为0。
位1

HSIRDY:内部高速时钟就绪标志 (Internal high-speed clock ready flag)

由硬件置’1’来指示内部8MHz振荡器已经稳定。在HSION位清零后,该位需要6个内部8MHz振 荡器周期清零。

0:内部8MHz振荡器没有就绪;

1:内部8MHz振荡器就绪。

位0

HSION:内部高速时钟使能 (Internal high-speed clock enable)

由软件置’1’或清零。 当从待机和停止模式返回或用作系统时钟的外部4-16MHz振荡器发生故障时,该位由硬件置’1’ 来启动内部8MHz的RC振荡器。当内部8MHz振荡器被直接或间接地用作或被选择将要作为系 统时钟时,该位不能被清零。

0:内部8MHz振荡器关闭;

1:内部8MHz振荡器开启。

位31:27保留,始终读为0。
位26:24

MCO: 微控制器时钟输出 (Microcontroller clock output)

由软件置’1’或清零。 0xx:没有时钟输出;

100:系统时钟(SYSCLK)输出;

101:内部RC振荡器时钟(HSI)输出;

110:外部振荡器时钟(HSE)输出;

111:PLL时钟2分频后输出。

注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。 - 在系统时钟作为输出至MCO引脚时,请保证输出时钟频率不超过50MHz (I/O口最高频率)。

位22

USBPRE:USB预分频 (USB prescaler)

由软件置’1’或清’0’来产生48MHz的USB时钟。在RCC_APB1ENR寄存器中使能USB时钟之 前,必须保证该位已经有效。如果USB时钟被使能,该位不能被清零。

0:PLL时钟1.5倍分频作为USB时钟

1:PLL时钟直接作为USB时钟

位21:18

PLLMUL:PLL倍频系数 (PLL multiplication factor)

由软件设置来确定PLL倍频系数。只有在PLL关闭的情况下才可被写入。

注意:PLL的输出频率不能超过72MHz

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倍频输出

位17

PLLXTPRE:HSE分频器作为PLL输入 (HSE divider for PLL entry)

由软件置’1’或清’0’来分频HSE后作为PLL输入时钟。只能在关闭PLL时才能写入此位。

0:HSE不分频

1:HSE 2分频

位16

PLLSRC:PLL输入时钟源 (PLL entry clock source)

由软件置’1’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。

0:HSI振荡器时钟经2分频后作为PLL输入时钟

1:HSE时钟作为PLL输入时钟。

位15:14

ADCPRE[1:0]:ADC预分频 (ADC prescaler)

由软件置’1’或清’0’来确定ADC时钟频率

00:PCLK2 2分频后作为ADC时钟

01:PCLK2 4分频后作为ADC时钟

10:PCLK2 6分频后作为ADC时钟

11:PCLK2 8分频后作为ADC时钟

位13:11

PPRE2[2:0]:高速APB预分频(APB2) (APB high-speed prescaler (APB2))

由软件置’1’或清’0’来控制高速APB2时钟(PCLK2)的预分频系数。

0xx:HCLK不分频

100:HCLK 2分频

101:HCLK 4分频

110:HCLK 8分频

111:HCLK 16分频

位10:8

PPRE1[2:0]:低速APB预分频(APB1) (APB low-speed prescaler (APB1))

由软件置’1’或清’0’来控制低速APB1时钟(PCLK1)的预分频系数。

警告:软件必须保证APB1时钟频率不超过36MHz。

0xx:HCLK不分频

100:HCLK 2分频

101:HCLK 4分频

110:HCLK 8分频

111:HCLK 16分频

位7:4

HPRE[3:0]: AHB预分频 (AHB Prescaler)

由软件置’1’或清’0’来控制AHB时钟的预分频系数。

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分频

注意:当AHB时钟的预分频系数大于1时,必须开启预取缓冲器。详见闪存读取(第2.3.3节)。

位3:2

SWS[1:0]:系统时钟切换状态 (System clock switch status)

由硬件置’1’或清’0’来指示哪一个时钟源被作为系统时钟。

00:HSI作为系统时钟;

01:HSE作为系统时钟;

10:PLL输出作为系统时钟;

11:不可用。

位1:0

SW[1:0]:系统时钟切换 (System clock switch)

由软件置’1’或清’0’来选择系统时钟源。 在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE出现故障时,由硬件强制选择 HSI作为系统时钟(如果时钟安全系统已经启动)

00:HSI作为系统时钟;

01:HSE作为系统时钟;

10:PLL输出作为系统时钟;

11:不可用

同时,在ST公司Flashprogramming manual中,我们可以找到:

位31~6

保留。必须保持为清除状态‘0’

位5

PRFTBS:预取缓冲区

该位指示预取缓冲区的状态

0:预取缓冲区关闭;

1:预取缓冲区开启。

位4

PRFTBE:预取缓冲区使能

0:关闭预取缓冲区;

1:开启预取缓冲区。

位3

HLFCYA:闪存半周期访问使能

0:禁止半周期访问;

1:启用半周期访问。

位2~0

LATENCY:时延

这些位表示SYSCLK(系统时钟)周期与闪存访问时间的比例

000:零等待状态,当0<SYSCLK≤24MHz

001:一个等待状态,当24MHz<SYSCLK≤48MHz

010:两个等待状态,当48MHz<SYSCLK≤72MHz 

对照上述几个寄存器,我们可以配出代码:

按上述配置,我们可以得到一个由外部高速时钟HSE输入的8MHz频率,经锁相环9倍频后得到72MHz频率,并以此为系统时钟的时钟配置。若要更改配置,可以参照上述数据手册进行自行更改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值