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:七个等待周期 |