STM32 RCC详解

STM32 RCC理解学习

最近看了一下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 */

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tony++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值