打印
[其他ST产品]

STM32 RCC详解

[复制链接]
376|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近看了一下STM32的启动代码,在system_init函数中找到了RCC部分初始化的流程,有许多不解,查了一下资料,基本上搞清楚了RCC的原理。
RCC主要是管理系统复位和时钟控制的,系统复位这里不讨论,主要讲系统时钟。

时钟

STM32可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK):
● HSI 振荡器时钟
● HSE 振荡器时钟
● 主 PLL (PLL) 时钟
器件具有以下两个次级时钟源:
● 32 kHz 低速内部 RC (LSI RC),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用
于停机/待机模式下的自动唤醒。
● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)

下面先看看STM32的时钟树:



我们一般会使用外部无源晶振作为芯片的输入时钟,外部晶振稳定和精确性都比较高,时钟走向如图中箭头所示。
STM32F4系列的单片机内部sysclk可以到168MHZ,所以想要达到这么高速时钟的要求,肯定是需要使用PLL来倍频的。
假设我们的外部晶振源是25M HZ,如箭头所示,进来后先需要分频,这里我们设置分频系数为25,那么vco的输入频率就是25MHZ/25 = 1MHZ。



N用来设置倍频系数:
VCO输入频率的值乘倍频系数(这里假设N为400)得到VCO输出频率:1MHZ*400 = 400MHZ



而后还要再经过P分频才能得到SYSCLK的值:
P设置为4
PLL输出频率= VCO输出频率/4 = 400MHZ/4 = 100MHZ



我使用的是STM32F411系列的单片机,SYSCLK为100MHZ。
AHB这里不做分频,AHB也是100Mhz,APB2也不分频,APB2也是100mhz,APB1做2分频,为50MHZ
这些分频数值需要根据实际需要的频率去计算出来。

注意:
HSE 外部时钟的值是在stm32f4xx.h中定义的:

  • #if !defined  (HSE_VALUE)
  •   #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
  • #endif /* HSE_VALUE */


复制代码


这里一定要改成外部晶振的值,否则标准库在使用它的时候会出现问题。

使用特权

评论回复
沙发
相比于以前51单片机,现在STM32内部集成的时钟模块功能更加丰富,包含时钟选择、倍频、输出、外设总线时钟配置等。

使用特权

评论回复
板凳
cashrwood| | 2023-1-6 12:45 | 只看该作者
STM32怎么设置寄存器来用PLL做系统时钟

使用特权

评论回复
地板
rosemoore| | 2023-1-6 16:55 | 只看该作者
stm32用 16m时钟怎么设置

使用特权

评论回复
5
olivem55arlowe| | 2023-1-6 21:54 | 只看该作者
STM32 RCC系统初始化失败 单片机跑不起来

使用特权

评论回复
6
pl202| | 2023-1-9 10:52 | 只看该作者
RCC_SYSCLKConfig函数的功能是设置系统时钟,输入的参数是32位的RCC_SYSCLKSource用作系统时钟的时钟源。

使用特权

评论回复
7
uiint| | 2023-1-10 19:19 | 只看该作者
打开要使用的外设时钟 RCC              

使用特权

评论回复
8
abotomson| | 2023-1-12 15:41 | 只看该作者
stm32的内部时钟在哪儿配置

使用特权

评论回复
9
beacherblack| | 2023-1-12 20:34 | 只看该作者
RCC主要是管理系统复位和时钟控制的

使用特权

评论回复
10
qiufengsd| | 2023-1-19 18:08 | 只看该作者
RCC即Reset and Clock Control,意思是复位和时钟控制器,它负责单片机的复位以及时钟的配置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

983

主题

3066

帖子

7

粉丝