学习笔记:通过寄存配置时钟——Stm_Clock_Init 函数

stm_clock_init函数主要用于对stm32时钟的初始化,封装于sys.c文件

6.3.1 时钟控制寄存器(RCC_CR)

位段

名称

复位值

描述

31:26

保留,始终为0

25

PLLRDYPLL

时钟就绪标志 (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’或清’0’来选择PLL输入时钟源。只能在关闭PLL时才能写入此位。 0:HSI振荡器时钟经2分频后作为PLL输入时钟

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

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振荡器开启。

6.3.2 时钟配置寄存器(RCC_CFGR)

位段

名称

复位值

描述

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倍频系数(PLLmultiplication 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时,必须开启预取缓冲器。

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:不可用。

1.8.1 Flash 访问控制寄存器 (FLASH_ACR)

位段

名称

复位值

描述

31:11

必须保持清零

12

DCRST

数据缓存复位 (Data cache reset)

0:数据缓存不复位

1:数据缓存复位 只有在禁止数据缓存时才能在该位中写入值。

11

ICRST

指令缓存复位 (Instruction cache reset)

0:指令缓存不复位

1:指令缓存复位

只有在禁止指令缓存时才能在该位中写入值。

10

DCEN

数据缓存使能 (Data cache enable)

0:禁止数据缓存

1:使能数据缓存

9

ICEN

指令缓存使能 (Instruction cache enable)

0:禁止指令缓存

1:使能指令缓

8

PRFTEN

预取使能 (Prefetch enable)

0:禁止预取

1:使能预取

7:3

保留,必须保持清零。

2:0

LATENCY

延迟 (Latency)

这些位表示 CPU 时钟周期与 Flash 访问时间之比。

000:零等待周期 0<系统时钟≤24MHz

001:一个等待周期 24MHz<系统时钟≤48MHz

010:两个等待周期  48MHz<系统时钟≤72MHz

011:三个等待周期  72MHz<系统时钟≤96MHz

100:四个等待周期

101:五个等待周期

110:六个等待周期

111:七个等待周期

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值