首页/文章/ 详情

嵌入式学习(七)—STM32复位和时钟控制RCC

1年前浏览4271

对于一个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

来源:不懂幽默的秦二
System电源芯片控制工厂SCL
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-21
最近编辑:1年前
点墨设计
本科 | 高级硬件工程... 十年饮冰,难凉热血!
获赞 0粉丝 6文章 48课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈