浅析STM32F4xx时钟系统

@浅析STM32F4xx时钟系统
#写在前面
本人在CSDN上差不多一年了吧,这还是第一次写一篇自己的文章,有点小激动,希望能通过文章与更多的朋友交流学习。本人也是刚刚开始STM32的起步,之前也没有51的基础,所以如果有什么错误或不足的地方还请各位大佬指点一二。本文算是我学习完STM32系统时钟的一个简单总结吧,比较适合萌新或者是作为备忘录,接下来~进入正题8!
#时钟树的介绍
话不多说,直接上图
STM32时钟树 emmm……这截图的画质…无语了,小伙伴们可以参照STM32中文参考手册中的6.2时钟

通过上图可看出,STM32共有4个时钟源:内部低速(LSI)、外部低速(LSE)、内部高速(HSI)、外部高速(HSE),其中内部低速和内部高速分别为32kHz和16MHz,均由RC振荡器产生。与时钟源同等重要的还有PLL模块(也有人将PLL也直接归为时钟源),PLL也分为主PLL与PLLI2S两部分,负责提供系统时钟SYSCLK、48M外设时钟以及I2S时钟。

根据图中线路,HSI/HSE先通过M分频,之后进入PLL模块,在其内部先后进行N倍频与P/Q/R分频,然后输出。根据分频的操作,可将输出分为以下三种:P分频:输出为PLLCLK,一般以此作为系统时钟;Q分频:输出为PLL48CK,为外设提供48M的时钟;R分频:输出为PLLI2SCLK,专用于I2S时钟。

在这里举一个栗子~由于本系统中系统时钟最大不得超过168MHz,所以我们以输出168M为目标。假设输入的外部高速晶振为8M,则8分频后频率为8/8=1M,经过336倍频后频率为336M,在经过2分频后得到我们所需要的168M,即M、N、P分别为8、336、2。

如何从图中读取外设时钟的来源呢?其实也很简单,举个最简单的例子:在最上面的独立看门狗,其除使能信号外只有内部低速时钟的输入,因此其来源肯定为内部低速时钟。而下面的RTC的输入就有三个来源——LSI、LSE、HSE,也就是说它的时钟来源为这三个中的任意一个,有了这样的初步理解,其他部分的始终来源就可以“同理”啦~

还有一件事!(老爹附体(☆_☆)/~~)每使用一个时钟千万要记得使能……曾经鄙人就因为遗漏了一个使能而被折磨了好久。

#时钟的设置函数
在系统初始化之后呢,我们的时钟会进行默认的设置,此时系统时钟、PLL、AHB总线时钟HCLK均为168M,APB1的时钟PCLK1为系统时钟的四分频,APB2的时钟为系统时钟的二分频。
当然,仅仅靠这种默认的时钟往往很难满足我们的需求,所以我们往往会对其进行针对性的修改:
(1)直接修改默认值
在system_stm32f4xx.c文件中,我们可以修改相关的宏定义来修改M、N、P、Q、R的值,从而修改我们初始化后的默认值。

#define PLL_M   8  //将M改为8

(2) 使用配置函数进行修改
在这种方法中,我们可

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值