RCC

Reset and Clock Control
复位和时钟控制、管理内核外的外设

RCC . h

开启外设时钟

//最常使用的三个函数
//   (总线外设Periph,ENABLE/DISABLE)

void RCC_AHBPeriphClockCmd (uint32_t RCC_AHBPeriph, FunctionalState NewState);
//Enables or disables the AHB peripheral clock.
void RCC_APB2PeriphClockCmd (uint32_t RCC_APB2Periph, FunctionalState NewState);
//Enables or disables the High Speed APB (APB2) peripheral clock.
void RCC_APB1PeriphClockCmd (uint32_t RCC_APB1Periph, FunctionalState NewState);
//Enables or disables the Low Speed APB (APB1) peripheral clock.

可以按位或,开启多个外设时钟

RCC 时钟树

RCC 产生时钟并将配置好的时钟发送到各个外设的系统
时钟是所有外设运行的基础,所以也应该是最先要配置好的东西
SystemInit( )

Pasted image 20240718232416.png

1. 时钟产生电路

基本原理
基本

首先启动内部时钟,暂时以 8MHz 的时钟运行
然后再启动外部时钟,8MHz 时钟信号进入 PLLMUL 锁相环进行倍频
倍频 9 倍得到 72MHz,等到锁相环输出稳定后,选择锁相环输出作为系统时钟

如果外部晶振出现问题,系统时钟就无法切换到 72MHz ,就只能以 8MHz 运行

CSS(Clock Security System)时钟安全系统,负责切换时钟
可以检测外部时钟的运行状态,一旦外部时钟失效,就会自动切换为内部时钟,保证时钟运行,防止程序卡死出现事故

时钟源
注意

两个高速晶振来提供系统时钟
AHB、APB1、APB2 的时钟都来源于此

外部晶振比内部 RC 振荡器更加稳定,一般使用外部晶振
如果系统简单,也不需要很精确的时钟,也可使用内部 RC 振荡电路

2. 时钟分配电路

首先系统时钟 72MHz 进入到 AHB 总线
SystemInit() 配置 AHB 总线中预分频器的分频系数

2.1. APB1 总线

APB1 外设总线有预分频器(系统默认初始化分频系数为 2),总线时钟最大为 722=36MHz

但是 APB1 分出一条支路给定时器 TIM

2.2. APB2总线

APB1 外设总线有预分频器(系统默认初始化分频系数为 1)
分出一条支路给定时器TIM 的时钟频率也为 72MHz

注意

APB1 与 APB2 都有外设时钟使能 Clock Enable 信号与时钟输出相
所以要软件上 RCC_APB2PeriphClockCmd RCC_APB1PeriphClockCmd

CSS 时钟安全系统

Clock Security System
负责切换时钟