对于一个MCU来说,最重要的就是时钟、供电、复位,这也是单片机的最小系统组成。下面介绍STM32F4xx系列单片机的复位和时钟控制RCC.
复位
分为三种,分别是系统复位、电源复位和备份域复位。
系统复位
除了时钟控制寄存器 CSR 中的复位标志和备份域中的寄存器外,系统复位会将其它全部寄 存器都复位为复位值
只要发生以下事件之一,就会产生系统复位:
1.NRST 引脚低电平(外部复位)
2. 窗口看门狗计数结束(WWDG 复位)
3. 独立看门狗计数结束(IWDG 复位)
4. 软件复位(SW 复位)
5. 低功耗管理复位
软件复位
要对器件进行软件复位,必须将 Cortex™-M4F 应用中断和复位控制寄存器中的 SYSRESETREQ 位置 1
电源复位
只要发生以下事件之一,就会产生电源复位:
1.上电/掉电复位(POR/PDR 复位)或欠压 (BOR) 复位
2. 在退出待机模式时
除备份域内的寄存器以外,电源复位会将其它全部寄存器设置为复位值(请参见图 4)
这些源均作用于 NRST 引脚,该引脚在复位过程中始终保持低电平。RESET 复位入口向量 在存储器映射中固定在地址 0x00000004。
芯片内部的复位信号会在 NRST 引脚上输出。脉冲发生器用于保证最短复位脉冲持续时间, 可确保每个内部复位源的复位脉冲都至少持续 20 μs。对于外部复位,在 NRST 引脚处于低电平时产生复位脉冲。
备份域复位
备份域复位会将所有 RTC 寄存器和 RCC_BDCR 寄存器复位为各自的复位值。BKPSRAM 不受 此复位影响。BKPSRAM 的唯一复位方式是通过 Flash 接口将 Flash 保护等级从 1 切换到 0。
只要发生以下事件之一,就会产生备份域复位:
1.软件复位,通过将 RCC 备份域控制寄存器 (RCC_BDCR) 中的 BDRST 位置 1 触发。
2. 在电源 VDD 和 VBAT 都已掉电后,其中任何一个又再上电。
时钟
可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK):
● HSI 振荡器时钟
● HSE 振荡器时钟
● 主 PLL (PLL) 时钟
器件具有以下两个次级时钟源:
● 32 kHz 低速内部 RC (LSI RC),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用
于停机/待机模式下的自动唤醒。
● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)
对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗。
时钟控制器为应用带来了高度的灵活性,用户在运行内核和外设时可选择使用外部晶振或者使用振荡器,既可采用最高的频率,也可为以太网、USB OTG FS 以及 HS、I2S 和 SDIO 等需要特定时钟的外设保证合适的频率。
可通过多个预分频器配置 AHB 频率、高速 APB (APB2) 和低速 APB (APB1)。AHB 域的最 大频率为 168 MHz。高速 APB2 域的最大允许频率为 84 MHz。低速 APB1 域的最大允许频率为 42 MHz。
除以下时钟外,所有外设时钟均由系统时钟 (SYSCLK) 提供:
● 来自于特定 PLL 输出 (PLL48CLK) 的 USB OTG FS 时钟 (48 MHz)、基于模拟技术的随机数发生器 (RNG) 时钟 (48 MHz) 和 SDIO 时钟 (48 MHz)。
● I2S 时钟,要实现高品质的音频性能,可通过特定的 PLL (PLLI2S) 或映射到 I2S_CKIN 引脚的外部时钟提供 I2S 时钟。
● 由外部 PHY 提供的 USB OTG HS (60 MHz) 时钟
● 由外部 PHY 提供的以太网 MAC 时钟(TX、RX 和 RMII)。当使用以太网时,AHB时钟频率至少应为 25 MHz。
RCC 向 Cortex 系统定时器 (SysTick) 馈送 8 分频的 AHB 时钟 (HCLK)。SysTick 可使用 此时钟作为时钟源,也可使用 HCLK 作为时钟源。
STM32F405xx/07xx 和 STM32F415xx/17xx 的定时器时钟频率由硬件自动设置。分为两种情况:
1.如果 APB 预分频器为 1,定时器时钟频率等于 APB 域的频率。
2. 否则,等于 APB 域的频率的两倍 (×2)。
HSE 时钟
高速外部时钟信号 (HSE) 有 2 个时钟源:
● HSE 外部晶振/陶瓷谐振器
● HSE 外部用户时钟
谐振器和负载电容必须尽可能地靠近振荡器的引脚,以尽量减小输出失真和起振稳定时间。
外部源(HSE 旁路)
在此模式下,必须提供外部时钟源。此模式通过将 RCC 时钟控制寄存器 (RCC_CR) 中的 HSEBYP 和 HSEON 位置 1 进行选择。必须使用占空比约为 50% 的外部时钟信号(方波、 正弦波或三角波)来驱动 OSC_IN 引脚,同时 OSC_OUT 引脚应保持为高阻态 (hi-Z)
外部晶振/陶瓷谐振器(HSE 晶振)
HSE 的特点是精度非常高。
RCC 时钟控制寄存器 (RCC_CR) 中的 HSERDY 标志指示高速外部振荡器是否稳定。在启动 时,硬件将此位置 1 后,此时钟才可以使用。
如在 RCC 时钟中断寄存器 (RCC_CIR) 中使能 中断,则可产生中断。
HSE 晶振可通过 RCC 时钟控制寄存器 (RCC_CR) 中的 HSEON 位打开或关闭。
HSI 时钟
HSI 时钟信号由内部 16 MHz RC 振荡器生成,可直接用作系统时钟,或者用作 PLL 输入。
HSI RC 振荡器的优点是成本较低(无需使用外部组件)。此外,其启动速度也要比 HSE 晶 振块,但即使校准后,其精度也不及外部晶振或陶瓷谐振器
校准
因为生产工艺不同,不同芯片的 RC 振荡器频率也不同,因此 ST 会对每个器件进行出厂校 准,达到 TA= 25 °C 时 1% 的精度。
复位后,工厂校准值将加载到 RCC 时钟控制寄存器 (RCC_CR) 的 HSICAL[7:0] 位中。
PLL 配置
STM32F4xx 器件具有两个 PLL:
● 主 PLL (PLL) 由 HSE 或 HSI 振荡器提供时钟信号,并具有两个不同的输出时钟:
— 第一个输出用于生成高速系统时钟(最高达 168 MHz)
— 第二个输出用于生成 USB OTG FS 的时钟 (48 MHz)、随机数发生器的时钟
(48 MHz) 和 SDIO 时钟 ( 48 MHz)。
● 专用 PLL (PLLI2S) 用于生成精确时钟,从而在 I2S 接口实现高品质音频性能。
由于在 PLL 使能后主 PLL 配置参数便不可更改,所以建议先对 PLL 进行配置,然后再使能 (选择 HSI 或 HSE 振荡器作为 PLL 时钟源,并配置分频系数 M、N、P 和 Q)
PLLI2S 使用与 PLL 相同的输入时钟(PLLM[5:0] 和 PLLSRC 位为两个 PLL 所共用)。但 是,PLLI2S 具有专门的使能/禁止和分频系数(N 和 R)配置位。在 PLLI2S 使能后,配置 参数便不能更改。
当进入停机和待机模式后,两个 PLL 将由硬件禁止;如将 HSE 或 PLL(由 HSE 提供时钟 信号)用作系统时钟,则在 HSE 发生故障时,两个 PLL 也将由硬件禁止.
LSE 时钟
LSE 晶振是 32.768 kHz 低速外部 (LSE) 晶振或陶瓷谐振器,可作为实时时钟外设 (RTC) 的 时钟源来提供时钟/日历或其它定时功能,具有功耗低且精度高的优点。
LSE 晶振通过 RCC 备份域控制寄存器 (RCC_BDCR) 中的 LSEON 位打开和关闭。
RCC 备份域控制寄存器 (RCC_BDCR) 中的 LSERDY 标志指示 LSE 晶振是否稳定。在启动 时,硬件将此位置 1 后,LSE 晶振输出时钟信号才可以使用
外部源(LSE 旁路)
在此模式下,必须提供外部时钟源,最高频率不超过 1 MHz。此模式通过将 RCC 备份域控制
寄存器 (RCC_BDCR) 中的 LSEBYP 和 LSEON 位置 1 进行选择。必须使用占空比约为 50% 的外部时钟信号(方波、正弦波或三角波)来驱动 OSC32_IN 引脚,同时 OSC32_OUT 引脚 应保持为高阻态 (Hi-Z)。
LSI 时钟
LSI RC 可作为低功耗时钟源在停机和待机模式下保持运行,供独立看门狗 (IWDG) 和自动唤 醒单元 (AWU) 使用。时钟频率在 32 kHz 左右
LSI RC 可通过 RCC 时钟控制和状态寄存器 (RCC_CSR) 中的 LSION 位打开或关闭。
RCC 时钟控制和状态寄存器 (RCC_CSR) 中的 LSIRDY 标志指示低速内部振荡器是否稳定。在启动时,硬件将此位置 1 后,此时钟才可以使用
系统时钟 (SYSCLK) 选择
在系统复位后,默认系统时钟为 HSI。在直接使用 HSI 或者通过 PLL 使用时钟源来作为系统 时钟时,该时钟源无法停止。
只有在目标时钟源已就绪时(时钟在启动延迟或 PLL 锁相后稳定时),才可从一个时钟源切 换到另一个。如果选择尚未就绪的时钟源,则切换在该时钟源就绪时才会进行。RCC 时钟 控制寄存器 (RCC_CR) 中的状态位指示哪个(些)时钟已就绪,以及当前哪个时钟正充当系 统时钟。
RTC/AWU 时钟
一旦选定 RTCCLK 时钟源后,要想修改所做选择,只能复位电源域。
RTCCLK 时钟源可以是 HSE 1 MHz(HSE 由一个可编程的预分频器分频)、LSE 或者 LSI 时钟
如果选择 LSE 作为 RTC 时钟,则系统电源丢失时 RTC 仍将正常工作。如果选择 LSI 作为 AWU 时钟,则在系统电源丢失时将无法保证 AWU 的状态。如果 HSE 振荡器通过一个介于 2 和 31 之间的值进行分频,则在备用或系统电源丢失时将无法保证 RTC 的状态。
LSE 时钟位于备份域中,而 HSE 和 LSI 时钟则不是。因此:
● 如果选择 LSE 作为 RTC 时钟:
— 只要 VBAT 电源保持工作,即使 VDD 电源关闭,RTC 仍可继续工作。
● 如果选择 LSI 作为自动唤醒单元 (AWU) 时钟:
— 在 VDD 电源掉电时,AWU 的状态将不能保证
● 如果使用 HSE 时钟作为 RTC 时钟:
— 如果 VDD 电源掉电或者内部调压器关闭(切断 1.2 V 域的供电),则 RTC 的状态将不能保证。
注意:要在 APB1 时钟频率低于 RTC 时钟频率的七倍时 (fAPB1 < 7xfRTCLCK) 读取 RTC 日历寄存 器,软件必须两次读取日历时间寄存器和日期寄存器。如果对 RTC_TR 的第二次读取访问 得到的结果与第一次相同,则表明数据正确无误。否则必须执行第三次读取访问。
看门狗时钟
如果独立看门狗 (IWDG) 已通过硬件选项字节或软件设置的方式启动,则 LSI 振荡器将强制 打开且不可禁止。在 LSI 振荡器稳定后,时钟将提供给 IWDG。
时钟输出功能
共有两个微控制器时钟输出 (MCO) 引脚:
● MCO1
用户可通过可配置的预分配器(从 1 到 5)向 MCO1 引脚 (PA8) 输出四个不同的时钟源:
— HSI 时钟
— LSE 时钟
— HSE 时钟
— PLL 时钟
所需的时钟源通过 RCC 时钟配置寄存器 (RCC_CFGR) 中的 MCO1PRE[2:0] 和 MCO1[1:0]位选择。
MCO2
用户可通过可配置的预分配器(从 1 到 5)向 MCO2 引脚 (PC9) 输出四个不同的时钟源:
— HSE 时钟
— PLL 时钟
— 系统时钟 (SYSCLK)
— PLLI2S 时钟
所需的时钟源通过 RCC 时钟配置寄存器 (RCC_CFGR) 中的 MCO2PRE[2:0] 和 MCO2位选择。
对于不同的 MCO 引脚,必须将相应的 GPIO 端口在复用功能模式下进行设置。
MCO 输出时钟不得超过 100 MHz(最大 I/O 速度)。
RCC 寄存器
RCC 时钟控制寄存器 (RCC_CR)
位 27 PLLI2SRDY:PLLI2S 时钟就绪标志 (PLLI2S clock ready flag)由硬件置 1,用以指示 PLLI2S 已锁定。
0:PLLI2S 未锁定
1:PLLI2S 已锁定
位 26 PLLI2SON:PLLI2S 使能 (PLLI2S enable)由软件置 1 和清零,用于使能 PLLI2S。当进入停机或待机模式时由硬件清零。
0:PLLI2S 关闭
1:PLLI2S 开启
位 25 PLLRDY:主 PLL (PLL) 时钟就绪标志 (Main PLL (PLL) clock ready flag)由硬件置 1,用以指示 PLL 已锁定。
0:PLL 未锁定
1:PLL 已锁定
位 24 PLLON:主 PLL (PLL) 使能 (Main PLL (PLL) enable)
由软件置 1 和清零,用于使能 PLL。当进入停机或待机模式时由硬件清零。如果 PLL 时钟用作系统时钟,则此位不可清零。
0:PLL 关闭
1:PLL 开启
位 19 CSSON:时钟安全系统使能 (Clock security system enable)
由软件置 1 和清零,用于使能时钟安全系统。当 CSSON 置位时,时钟监测器将在 HSE 振荡器就绪时由硬件使能,并在检出振荡器故障时由硬件禁止。
0:时钟安全系统关闭(时钟监测器关闭)
1:时钟安全系统打开(如果 HSE 振荡器稳定,则时钟监测器打开;如果不稳定,则关闭)
位 18 HSEBYP:HSE 时钟旁路 (HSE clock bypass)
由软件置 1 和清零,用于用外部时钟旁路振荡器。外部时钟必须通过 HSEON 位使能才能为器件使用。HSEBYP 只有在 HSE 振荡器已禁止的情况下才可写入。
0:不旁路 HSE 振荡器
1:外部时钟旁路 HSE 振荡器
位 17 HSERDY:HSE 时钟就绪标志 (HSE clock ready flag)
由硬件置 1,用以指示 HSE 振荡器已稳定。在将 HSEON 位清零后,HSERDY 将在 6 个HSE 振荡器时钟周期后转为低电平。
0:HSE 振荡器未就绪
1:HSE 振荡器已就绪
位 16 HSEON:HSE 时钟使能 (HSE clock enable)
由软件置 1 和清零。由硬件清零,用于在进入停机或待机模式时停止 HSE 振荡器。如果 HSE 振荡器直接或间接用于作为系统时钟,则此位不可复位。
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[7:0] 位基础上实现可由用户编程的微调值。可通过编程使其适应电压和温度的差异,使内部 HSI RC 的频率更为准确。位 2 保留,必须保持复位值。
位 1 HSIRDY:内部高速时钟就绪标志 (Internal high-speed clock ready flag)由硬件置 1,用以指示 HSI 振荡器已稳定。在将 HSION 位清零后,HSIRDY 将在 6 个 HSI时钟周期后转为低电平。
0:HSI 振荡器未就绪
1:HSI 振荡器已就绪
位 0 HSION:内部高速时钟使能 (Internal high-speed clock enable)由软件置 1 和清零。由硬件置 1,用于在脱离停机或待机模式时或者在直接或间接用作系统时钟的 HSE 振荡器发生故障时强制 HSI 振荡器打开。如果 HSI 直接或间接用于作为系统时钟,则此位不可清零。
0:HSI 振荡器关闭
1:HSI 振荡器打开
RCC PLL 配置寄存器 (RCC_PLLCFGR)
此寄存器用于根据公式配置 PLL 时钟输出:
● f(VCO 时钟) = f(PLL 时钟输入) × (PLLN / PLLM)
● f(PLL 常规时钟输出) = f(VCO 时钟) / PLLP
● f(USB OTG FS, SDIO, RNG 时钟输出) = f(VCO 时钟) / PLLQ
位 27:24 PLLQ:主 PLL (PLL) 分频系数,适用于 USB OTG FS、SDIO 和随机数发生器时钟 (Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks)由软件置 1 或清零,用于控制 USB OTG FS 时钟、随机数发生器时钟和 SDIO 时钟的频率。这些位应仅在 PLL 已禁止时写入。
小心:为使 USB OTG FS 能够正常工作,需要 48 MHz 的时钟。对于 SDIO 和随即数生成器,频率需要低于或等于 48 MHz 才可正常工作。
USB OTG FS 时钟频率 = VCO 频率 / PLLQ,并且 2 PLLQ 15
0000:PLLQ = 0,错误配置
0001:PLLQ = 1,错误配置
0010:PLLQ = 2
0011:PLLQ = 3
0100:PLLQ = 4
...
1111:PLLQ = 15
位 22 PLLSRC:主 PLL(PLL) 和音频 PLL (PLLI2S) 输入时钟源 (Main PLL(PLL) and audio PLL(PLLI2S) entry clock source)由软件置 1 和清零,用于选择 PLL 和 PLLI2S 时钟源。此位只有在 PLL 和 PLLI2S 已禁止时才可写入。
0:选择 HSI 时钟作为 PLL 和 PLLI2S 时钟输入
1:选择 HSE 振荡器时钟作为 PLL 和 PLLI2S 时钟输入
位 17:16 PLLP:适用于主系统时钟的主 PLL (PLL) 分频系数 (Main PLL (PLL) division factor for main system clock)由软件置 1 和清零,用于控制常规 PLL 输出时钟的频率。这些位只能在 PLL 已禁止时写入。
小心:软件必须正确设置这些位,使其在此域中不超过 168 MHz。
PLL 输出时钟频率 = VCO 频率 / PLLP 并且 PLLP = 2、4、6 或 8
00:PLLP = 2
01:PLLP = 4
10:PLLP = 6
11:PLLP = 8
位 14:6 PLLN:适用于 VCO 的主 PLL (PLL) 倍频系数 (Main PLL (PLL) multiplication factor for VCO)由软件置 1 和清零,用于控制 VCO 的倍频系数。这些位只能在 PLL 已禁止时写入。写入这些位时只允许使用半字和字访问。
小心:软件必须正确设置这些位,确保 VCO 输出频率介于 192 和 432 MHz 之间。
VCO 输出频率 = VCO 输入频率 × PLLN 并且 192 PLLN 432
000000000:PLLN = 0,错误配置
000000001:PLLN = 1,错误配置
...
011000000:PLLN = 192
...
110110000:PLLN = 432
110110001:PLLN = 433,错误配置
...
111111111:PLLN = 511,错误配置
位 5:0 PLLM:主 PLL (PLL) 和音频 PLL (PLLI2S) 输入时钟的分频系数 (Division factor for the main
PLL (PLL) and audio PLL (PLLI2S) input clock)
由软件置 1 和清零,用于在 VCO 之前对 PLL 和 PLLI2S 输入时钟进行分频。这些位只有在PLL 和 PLLI2S 已禁止时才可写入。
小心:软件必须正确设置这些位,确保 VCO 输入频率介于 1 和 2 MHz 之间。建议选择2 MHz 的频率,以便限制 PLL 抖动。
VCO 输入频率 = PLL 输入时钟频率 / PLLM 并且 2 PLLM 63
000000:PLLM = 0,错误配置
000001:PLLM = 1,错误配置
000010:PLLM = 2
000011:PLLM = 3
000100:PLLM = 4
...
111110:PLLM = 62
111111:PLLM = 63
RCC 时钟配置寄存器 (RCC_CFGR)
只有在时钟源切换期间进行访问时才会插入 1 或 2 个等待周期
位 31:30 MCO2[1:0]:微控制器时钟输出 2 (Microcontroller clock output 2)由软件置 1 和清零。时钟源选择可能会造成对 MCO2 的干扰。强烈建议仅在复位后但在使能外部振荡器和 PLL 之前来配置这些位。
00:选择系统时钟 (SYSCLK) 输出到 MCO2 引脚
01:选择 PLLI2S 时钟输出到 MCO2 引脚
10:选择 HSE 振荡器时钟输出到 MCO2 引脚
11:选择 PLL 时钟输出到 MCO2 引脚
位 27:29 MCO2PRE:MCO2 预分频器 (MCO2 prescaler)
由软件置 1 和清零,用于配置 MCO2 的预分频器。对此预分频器进行修改可能会对 MCO2造成干扰。强烈建议仅在复位后且在使能外部振荡器和 PLL 之前进行此分频器的更改。
0xx:无分频
100:2 分频
101:3 分频
110:4 分频
111:5 分频
位 24:26 MCO1PRE:MCO1 预分频器 (MCO1 prescaler)由软件置 1 和清零,用于配置 MCO1 的预分频器。对此预分频器进行修改可能会对 MCO1造成干扰。强烈建议仅在复位后且在使能外部振荡器和 PLL 之前进行此分频器的更改。
0xx:无分频
100:2 分频
101:3 分频
110:4 分频
111:5 分频
位 23 I2SSRC:I2S 时钟选择 (I2S clock selection)由软件置 1 和清零。通过此位可在 PLLI2S 时钟和外部时钟之间选择 I2S 时钟源。强烈建议仅在复位之后使能 I2S 模块之前对此位进行更改。
0:PLLI2S 时钟用作 I2S 时钟源
1:在 I2S_CKIN 引脚上映射的外部时钟用作 I2S 时钟源
位 22:21 MCO1:微控制器时钟输出 1 (Microcontroller clock output 1)
由软件置 1 和清零。时钟源选择可能会造成对 MCO1 的干扰。强烈建议仅在复位后且在使能外部振荡器和 PLL 之前来配置这些位。
00:选择 HSI 时钟输出到 MCO1 引脚
01:选择 LSE 振荡器输出到 MCO1 引脚
10:选择 HSE 振荡器时钟输出到 MCO1 引脚
11:选择 PLL 时钟输出到 MCO1 引脚
位 20:16 RTCPRE:适用于 RTC 时钟的 HSE 分频系数
由软件置 1 和清零,用于对 HSE 时钟输入时钟进行分频,进而为 RTC 生成 1 MHz 的时钟。小心:软件必须正确设置这些位,确保提供给 RTC 的时钟为 1 MHz。在选择 RTC 时钟源之前必须配置这些位。
00000:无时钟
00001:无时钟
00010:HSE/2
00011:HSE/3
00100:HSE/4
...
11110:HSE/30
11111:HSE/31
位 15:13 PPRE2:APB 高速预分频器 (APB2) (APB high-speed prescaler (APB2))由软件置位和清零,用于控制 APB 高速时钟分频系数。
小心:软件必须正确设置这些位,使其在此域中不超过 84 MHz。在 PPRE2 写入后,时钟将通过 1 AHB 到 16 AHB 周期新预分频系数进行分频。
0xx:AHB 时钟不分频
100:AHB 时钟 2 分频
101:AHB 时钟 4 分频
110:AHB 时钟 8 分频
111:AHB 时钟 16 分频
位 12:10 PPRE1:APB 低速预分频器 (APB1) (APB Low speed prescaler (APB1))由软件置位和清零,用于控制 APB 低速时钟分频系数。
小心:软件必须正确设置这些位,使其在此域中不超过 42 MHz。在 PPRE1 写入后,时钟将通过 1 AHB 到 16 AHB 周期新预分频系数进行分频。
0xx:AHB 时钟不分频
100:AHB 时钟 2 分频
101:AHB 时钟 4 分频
110:AHB 时钟 8 分频
111:AHB 时钟 16 分频
7:4 HPRE:AHB 预分频器 (AHB prescaler)
由软件置位和清零,用于控制 AHB 时钟分频系数。
小心:在 HPRE 写入后,时钟将通过 1 AHB 到 16 AHB 周期新预分频系数进行分频。小心:当使用以太网时,AHB 时钟频率必须至少为 25 MHz。
0xxx:系统时钟不分频
1000:系统时钟 2 分频
1001:系统时钟 4 分频
1010:系统时钟 8 分频
1011:系统时钟 16 分频
1100:系统时钟 64 分频
1101:系统时钟 128 分频
1110:系统时钟 256 分频
1111:系统时钟 512 分频
位 3:2 SWS:系统时钟切换状态 (System clock switch status)
由硬件置 1 和清零,用于指示用作系统时钟的时钟源。
00:HSI 振荡器用作系统时钟
01:HSE 振荡器用作系统时钟
10:PLL 用作系统时钟
11:不适用
位 1:0 SW:系统时钟切换 (System clock switch)
由软件置 1 和清零,用于选择系统时钟源。
由硬件置 1,用于在退出停机或待机模式时或者在直接或间接用作系统时钟的 HSE 振荡器发生故障时强制 HSI 的选择。
00:选择 HSI 振荡器作为系统时钟
01:选择 HSE 振荡器作为系统时钟
10:选择 PLL 作为系统时钟
11:不允许
与flash相关的控制寄存器参考下图
RCC 时钟中断寄存器 (RCC_CIR)
位 23 CSSC:时钟安全系统中断清零 (Clock security system interrupt clear)
此位由软件置 1,用于将 CSSF 标志清零。
0:无操作
1:将 CSSF 标志清零
位 22 保留,必须保持复位值。
位 21 PLLI2SRDYC:PLLI2S 就绪中断清零 (PLLI2S ready interrupt clear)
此位由软件置 1,用于将 PLLI2SRDYF 标志清零。
0:无操作
1:清零 PLLI2SRDYF
位 20 PLLRDYC:主 PLL(PLL) 就绪中断清零 (Main PLL(PLL) ready interrupt clear)
此位由软件置 1,用于将 PLLRDYF 标志清零。
0:无操作
1:清零 PLLRDYF
位 19 HSERDYC:HSE 就绪中断清零 (HSE ready interrupt clear)
此位由软件置 1,用于将 HSERDYF 标志清零。
0:无操作
1:清零 HSERDYF
位 18 HSIRDYC:HSI 就绪中断清零 (HSI ready interrupt clear)
此位由软件置 1,用于将 HSIRDYF 标志清零。
0:无操作
1:清零 HSIRDYF
位 17 LSERDYC:LSE 就绪中断清零 (LSE ready interrupt clear)
此位由软件置 1,用于将 LSERDYF 标志清零。
0:无操作
1:清零 LSERDYF
位 16 LSIRDYC:LSI 就绪中断清零 (LSI ready interrupt clear)
此位由软件置 1,用于将 LSIRDYF 标志清零。
0:无操作
1:清零 LSIRDYF
位 13 PLLI2SRDYIE:PLLI2S 就绪中断使能 (PLLI2S ready interrupt enable)
由软件置 1 和清零,用于使能/禁止由 PLLI2S 锁定引起的中断。
0:禁止 PLLI2S 锁定中断
1:使能 PLLI2S 锁定中断
位 12 PLLRDYIE:主 PLL (PLL) 就绪中断使能 (Main PLL (PLL) ready interrupt enable)
由软件置 1 和清零,用于使能/禁止由 PLL 锁定引起的中断。
0:禁止 PLL 锁定中断
1:使能 PLL 锁定中断
位 11 HSERDYIE:HSE 就绪中断使能 (HSE ready interrupt enable)
由软件置 1 和清零,用于使能/禁止由 HSE 振荡器稳定所引起的中断。
0:禁止 HSE 就绪中断
1:使能 HSE 就绪中断
位 10 HSIRDYIE:HSI 就绪中断使能 (HSI ready interrupt enable)
由软件置 1 和清零,用于使能/禁止由 HSI 振荡器稳定所引起的中断。
0:禁止 HSI 就绪中断
1:使能 HSI 就绪中断
位 9 LSERDYIE:LSE 就绪中断使能 (LSE ready interrupt enable)
由软件置 1 和清零,用于使能/禁止由 LSE 振荡器稳定所引起的中断。
0:禁止 LSE 就绪中断
1:使能 LSE 就绪中断
位 8 LSIRDYIE:LSI 就绪中断使能 (LSI ready interrupt enable)
由软件置 1 和清零,用于使能/禁止由 LSI 振荡器稳定所引起的中断。
0:禁止 LSI 就绪中断
1:使能 LSI 就绪中断
位 7 CSSF:时钟安全系统中断标志 (Clock security system interrupt flag)
当在 HSE 振荡器中检出故障时由硬件置 1。
CSSC 位置 1 时由软件清零。
0:当前未因 HSE 时钟故障而引起时钟安全中断
1:因 HSE 时钟故障而引起时钟安全中断
位 5 PLLI2SRDYF:PLLI2S 就绪中断标志 (PLLI2S ready interrupt flag)
当 PLLI2S 锁定并且 PLLI2SRDYDIE 置 1 时由硬件置 1。
PLLRI2SDYC 位置 1 时由软件清零。
0:当前未因 PLLI2S 锁定而引起时钟就绪中断
1:因 PLLI2S 锁定而引起时钟就绪中断
位 4 PLLRDYF:主 PLL (PLL) 就绪中断标志 (Main PLL (PLL) ready interrupt flag)
当 PLL 锁定并且 PLLRDYDIE 置 1 时由硬件置 1。
PLLRDYC 位置 1 时由软件清零。
0:当前未因 PLL 锁定而引起时钟就绪中断
1:因 PLL 锁定而引起时钟就绪中断
位 3 HSERDYF:HSE 就绪中断标志 (HSE ready interrupt flag)
当外部高速时钟变为稳定且 HSERDYDIE 置 1 时由硬件置 1。
HSERDYC 位置 1 时由软件清零。
0:当前未因 HSE 振荡器引起时钟就绪中断
1:因 HSE 振荡器引起时钟就绪中断
位 2 HSIRDYF:HSI 就绪中断标志 (HSI ready interrupt flag)
当内部高速时钟变为稳定且 HSIRDYDIE 置 1 时由硬件置 1。
HSIRDYC 位置 1 时由软件清零。
0:当前未因 HSI 振荡器引起时钟就绪中断
1:因 HSI 振荡器引起时钟就绪中断
位 1 LSERDYF:LSE 就绪中断标志 (LSE ready interrupt flag)
当外部低速时钟变为稳定且 LSERDYDIE 置 1 时由硬件置 1。
LSERDYC 位置 1 时由软件清零。
0:当前未因 LSE 振荡器引起时钟就绪中断
1:因 LSE 振荡器引起时钟就绪中断
位 0 LSIRDYF:LSI 就绪中断标志 (LSI ready interrupt flag)
当内部低速时钟变为稳定且 LSIRDYDIE 置 1 时由硬件置 1。
LSIRDYC 位置 1 时由软件清零。
0:当前未因 LSI 振荡器引起时钟就绪中断
1:因 LSI 振荡器引起时钟就绪中断
以上寄存器就是比较常用的时钟配置寄存器。还有一部分是时钟使能寄存器以及低功耗模式下的时钟使能寄存器,请大家自行查阅STM32F4xx参考手册。
RCC 备份域控制寄存器 (RCC_BDCR)
RCC 备份域控制寄存器 (RCC_BDCR) 中的 LSEON 位、LSEBYP 位、RTCSEL 位和 RTCEN 位在备份域中。因而复位后,这些位受写保护,必须在这些位可修改前将 Power control register (PWR_CR) 中的 DBP 位置 1。只有备份域复位后,这些位才将复位。内部复位和 外部复位对这些位不会有任何影响。
位 16 BDRST:备份域软件复位 (Backup domain software reset)
由软件置 1 和清零。
0:复位未激活
1:复位整个备份域
注意:BKPSRAM 不受此复位影响,只能在 Flash 保护级别从级别 1 更改为级别 0 时复位BKPSRAM。
位 15 RTCEN:RTC 时钟使能 (RTC clock enable)
由软件置 1 和清零。
0:RTC 时钟禁止
1:RTC 时钟使能
位 9:8 RTCSEL[1:0]:RTC 时钟源选择 (RTC clock source selection)
由软件置 1,用于选择 RTC 的时钟源。选择 RTC 时钟源后,除非备份域复位,否则其不可再更改。可使用 BDRST 位对其进行复位。
00:无时钟
01:LSE 振荡器时钟用作 RTC 时钟
10:LSI 振荡器时钟用作 RTC 时钟
11:由可编程预分频器分频的 HSE 振荡器时钟(通过 RCC 时钟配置寄存器 (RCC_CFGR)中的 RTCPRE[4:0] 位选择)用作 RTC 时钟
位 7:3 保留,必须保持复位值。
位 2 LSEBYP:外部低速振荡器旁路 (External low-speed oscillator bypass)
由软件置 1 和清零,用于旁路调试模式下的振荡器。只有在禁止 LSE 时钟后才能写入该位。
0:不旁路 LSE 振荡器
1:旁路 LSE 振荡器
位 1 LSERDY:外部低速振荡器就绪 (External low-speed oscillator ready)
由硬件置 1 和清零,用于指示外部 32 kHz 振荡器已稳定。在 LSEON 位被清零后,LSERDY将在 6 个外部低速振荡器时钟周期后转为低电平。
0:LSE 时钟未就绪
1:LSE 时钟就绪
位 0 LSEON:外部低速振荡器使能 (External low-speed oscillator enable)
由软件置 1 和清零。
0:LSE 时钟关闭
1:LSE 时钟开启
RCC 时钟控制和状态寄存器 (RCC_CSR)
31 LPWRRSTF:低功耗复位标志 (Low-power reset flag)
发生低功耗管理复位时,由硬件置 1。通过写入 RMVF 位清零。
0:未发生低功耗管理复位
1:发生低功耗管理复位
有关低功耗管理复位的详细信息,请参见低功耗管理复位。
位 30 WWDGRSTF:窗口看门狗复位标志 (Window watchdog reset flag)
发生窗口看门狗复位时,由硬件置 1。通过写入 RMVF 位清零。
0:未发生窗口看门狗复位
1:发生窗口看门狗复位
位 29 IWDGRSTF:独立看门狗复位标志 (Independent watchdog reset flag)发生来自 VDD 域的独立看门狗复位时,由硬件置 1。通过写入 RMVF 位清零。
0:未发生看门狗复位
1:发生看门狗复位
位 28 SFTRSTF:软件复位标志 (Software reset flag)发生软件复位时,由硬件置 1。通过写入 RMVF 位清零。
0:未发生软件复位
1:发生软件复位
位 27 PORRSTF:POR/PDR 复位标志 (POR/PDR reset flag)发生 POR/PDR 复位时,由硬件置 1。通过写入 RMVF 位清零。
0:未发生 POR/PDR 复位
1:发生 POR/PDR 复位
位 26 PINRSTF:引脚复位标志 (PIN reset flag)发生来自 NRST 引脚的复位时,由硬件置 1。通过写入 RMVF 位清零。
0:未发生来自 NRST 引脚的复位
1:发生来自 NRST 引脚的复位
位 25 BORRSTF:BOR 复位标志 (BOR reset flag)通过软件写入 RMVF 位清零。发生 POR/PDR 复位或 BOR 复位时,由硬件置 1。
0:未发生 POR/PDR 复位或 BOR 复位
1:发生 POR/PDR 复位或 BOR 复位
位 24 RMVF:清除复位标志 (Remove reset flag)由软件置 1,用于将复位标志清零。
0:无操作
1:清零复位标志
位 23:2 保留,必须保持复位值。
位 1 LSIRDY:内部低速振荡器就绪 (Internal low-speed oscillator ready)
由硬件置 1 和清零,用于指示内部 RC 40 kHz 振荡器已稳定。在 LSION 位被清零后,LSIRDY 将在 3 个 LSI 时钟周期后转为低电平。
0:LSI RC 振荡器未就绪
1:LSI RC 振荡器就绪
位 0 LSION:内部低速振荡器使能 (Internal low-speed oscillator enable)
由软件置 1 和清零。
0:LSI RC 振荡器关闭
1:LSI RC 振荡器开启
RCC 扩频时钟生成寄存器 (RCC_SSCGR)
RCC PLLI2S 配置寄存器 (RCC_PLLI2SCFGR)
此寄存器用于根据公式配置 PLLI2S 时钟输出:
● f(VCO 时钟) = f(PLLI2S 时钟输入) × (PLLI2SN / PLLM)
● f(PLL I2S 时钟输出) = f(VCO 时钟) / PLLI2SR