目录

  • 一、STM32F103时钟树
    • 1.1 HSE、HSI、PLL、SYSCLK
    • 1.2 LSE、LSI、RTC
    • 1.3 重要提示
    • 1.4 HCLK、PCLK1、PCLK2
    • 1.5 时钟树小结
  • 二、程序配置(以之前新建的工程为例)
  • 三、小结

  写在前面的话:说到时钟,相信大家在学习的过程中一定是很迷茫的,看了无数遍学习视频还是没能很好的了解,每次学习的第一遍总是会感到困然后就去睡觉了,记得我第一次学习STM32的时钟系统时也是这样,刚开始什么都听不懂,懵懂的知道了什么SYSCLK这些的名词,但是其中的关系和配置原理不是很清楚,写本文也是抱着再梳理一遍的想法记录下来,记得一键三连哦~。

一、STM32F103时钟树

  首先先放一张STM32参考手册中的一张时钟树,对照着来讲,如图所示:

  首先对图里出现的几个名词做个介绍:

名称 含义
HSE 高速外部时钟信号
HSI 高速内部时钟信号
LSE 低速外部时钟信号
LSI 低速内部时钟信号
PLL 锁相环
SYSCLK 系统时钟
AHB 高性能总线
HCLK 、PCLK1、PCLK2 外设时钟
APB1 低速外设
APB2 高速外设
RTC 实时时钟

  为了更加清晰直观,再放上一张STM32CUBEMX里配置时钟系统的图:

  首先先明确一点我们的STM32有HSE、HSI、LSE、LSI、PLL五个时钟源,接下来会对这五个时钟源进行介绍。

1.1 HSE、HSI、PLL、SYSCLK

  我们想要配置的时钟是SYSCLK即系统时钟,我们一般说的STM32F103时钟72M就是指这个SYSCLK系统时钟,从图里可以看到,配置系统时钟的时钟来源主要有三个:

  分别是HSI、HSE、PLLCLK,我们配置系统时钟的来源可以是外部高速时钟、内部高速时钟和锁相环PLL出来的时钟信号,我们都知道在MCU没有超过最高时钟频率运行之前,时钟频率越高,系统运行更加稳定,故我们配置时钟时一般都是希望配置的时钟频率接近上限。
  在STM32F103芯片里HSI给定了是内部8M的高速时钟,HSE可以是从4~16M之间自己选择焊接任意频率的晶振,而PLL锁相环是可以将时钟频率倍频提高可以实现稳定且高频的时钟信号。我们先来看一下PLL锁相环的时钟线:

  PLL锁相环的输入可以是经过二分频的HSI也就是4M的内部时钟提供的信号,还有外部高速时钟HSE可以不分频或者二分频的信号,一般来说我们都会采用外部的时钟信号更加的稳定和准确,这里我们单片机外部焊接的是8M的晶振故我们选择PLL输入来源是HSE,在PLL内是经过*PLLMul(*9)来实现达到72M的频率,最后输出给到SYSCLK。

1.2 LSE、LSI、RTC

  讲到这里HSE、HSI、PLL、SYSCLK相信大家都有了认识,接下来还有两个LSI和LSE有什么作用呢,我们看到STM32参考手册里有这样一段话:

  我们的芯片内部低速时钟LSI是40khz的,用来驱动看门狗或者是RTC时钟的,外部的低速时钟是32.768khz可以用来驱动RTC,很遗憾我没有做过关于RTC的实验,故对实时时钟的解释不是很充分,没有特殊要求一般不会去用到,如图所示:

1.3 重要提示

  上面介绍了五个时钟源,我们在不使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗,比如说我只用了一个HSE和PLL来配置SYSCLK,那么其他的时钟源可以不需要开启,以此降低功耗。

1.4 HCLK、PCLK1、PCLK2

  配置完SYSCLK算是完成了时钟配置的一半,我们接着看时钟图后面,如图所示:

  SYSCLK系统时钟出来后可以看到会经过一个AHB预分频器,将分频后的信号给至HCLK高速外设时钟,STM32规定最大的时钟信号是72MHz,和我们配置的SYSCLK一致,一般都是将SYSCLK配置为最高的HCLK时钟频率之后预分频器分频系数给1,将SYSCLK和HCLK时钟信号频率配置最高,以此达到系统高稳定性高性能状态,HCLK出来的时钟信号会给至AHB总线、核心存储器、DMA:

  STM32还设置了两条外设时钟线,一条是PCLK1低速时钟,另一条是PCLK2高速时钟,PCLK1经过AHB1预分频器分频最高可达36M,PCLK2经过AHB2预分频器分频最高可达72M,如图所示:

  在外设中存在着比较特殊的比如定时器,如上图所示,在APB1/2分频完成后有对搭载的定时器TIMER进行了分频那么怎么确定应该是多少呢,可以在STM32参考手册中找到这样一段:

  为什么需要这么多外设的时钟呢,我们都知道在操作STM32外设之前都需要打开对应的外设时钟,比如我要操作GPIOA01输出高电平,我需要先打开GPIOA的外设时钟,才能对引脚进行操作,如下图所示是STM32F103各个外设时钟搭载的外设:
  AHB搭载了DMA1/2、SRAM、核心存储器等都在HCLK提供的时钟频率下运行,比如想要用DMA1就需要通过打开AHB下的DMA1时钟,时钟频率就是HCLK,才能使用DMA1。

  APB2搭载了例如GPIOA~G、ADC等

  APB1搭载了通用定时器、USART、CAN等外设

1.5 时钟树小结

  一条较为完整的时钟配置路线大致为:HSE–PLL–SYSCLK–AHB–HCLK–AHB1–PCLK1(/–AHB2–PCLK2),综上就是STM32配置时钟树的大部分内容,相信大家对时钟树的理解进一步加深,接下来我们讲怎么在标准库中配置我们的时钟系统。

二、程序配置(以之前新建的工程为例)

  第一步打开我们的工程文件定位到startup文件夹,双击打开我们的启动文件,如图所示:

  第二步我们知道STM32程序都是在启动文件里开始执行的,所以我们下拉代码找到程序运行的入口SystemInit,选中SystemInit鼠标右键单击Go To Definition…或者选中后按下快捷键F12进行跳转,如图所示:

  第三步 SystemInit函数刚开始是初始化了很多与时钟相关的寄存器,将RCC时钟配置重置为默认的重置状态,往下看会找到一个SetSysClock()的函数,再次跳转,找到函数主体:

  第四步跳转后可以看到这里通过判断标识符的方式将会执行SetSysClockTo72()函数,我们设置了72M的系统时钟,可以点击宏定义标识符查看,根据需要可以选择不同的时钟频率,如下两图:


  第五步再次点击跳转SetSysClockTo72()函数,可以看到,我们进入了真正的配置系统时钟的地方,该函数起到设置“系统时钟频率”为72MHz,并配置“HCLK”、“PCLK2”和PCLK1预分压器的作用。整个系统时钟配置的过程是先启动外部晶振等待稳定然后设置好AHB,APB1,APB2,PLL相关的系数再启动PLL维持稳定后完成时钟配置,可以通过官方提供的注释看到,比较关键的一段如图:

  可以看到,HCLK配置为分频系数为1和SYSCLK频率相等,PCLK2分频系数也是1和HCLK频率相等,PCLK1分频系数为2是HCLK频率的二分频,但是注释却打了相等可能是注释打错了。

  这里是PLL锁相环的配置,需要留意的是RCC_CFGR_PLLMULL9这个参数,最后HSE出来的信号会乘上9提供给我们的SYSCLK信号。
  第六步到这里为止所有的分频系数参数都设置完毕,最后要等待PLL提供稳定的时钟信号,整个系统完成时钟配置,如图所示:

  :那我们通过程序查询比如HCLK的时钟,程序怎么知道HSE是多少呢,我们可以看到在stm32f10x.h里有一个HSE_VALUE的参数,这个参数定义的是我们使用的外部晶振的频率,这是8M,如图所示:

三、小结

  这一讲我们认识并强化了对系统时钟的概念和理解,对程序的配置上有了进一步的认识,大家可以在自己研读一下设置时钟的程序,这里程序讲的比较省略了关注点在时钟配置上了,下一讲会教大家如何运用keil5的DEBUG功能查询我们设置好的时钟频率究竟对不对。

STM32F103时钟系统讲解(精)相关推荐

  1. stm32f103 时钟系统

    1 简介 stm32的时钟系统不像51单片机那样单一,时钟系统对于cpu而言比较重要,还是有必要好好了解一下的.在这里我基于<stm32中文参考手册>和网上的资料,对这部分进行总结. st ...

  2. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  3. STM32工作笔记0037---STM32时钟系统精讲-M3

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 时钟系统类似于,芯片的脉搏.

  4. 正点原子STM32F103学习笔记(六)——时钟系统

    时钟系统 RCC: reset clock control 复位和时钟控制器. 注意: 任何一个外设在使用之前,必须首先使能其相应的时钟 时钟系统框图 图形含义 梯形灰色方块:选择器 蓝色框:时钟源 ...

  5. stm32f103最小系统的组成及各部分功能

    今天来跟大家普及一下stm32f103单片机的最小系统组成和各部分功能. 一.什么叫最小系统 最小系统就像我们人,我们活着每天都要吃饭,喝水. 饭和水就是我们的"燃料",离开它们我 ...

  6. 【STM32】标准外设库,系统架构,时钟系统

    文章目录 标准外设库 系统架构 时钟系统 标准外设库 官方库目录列表如下:STM32 标准外设库 工程结构:STM32 不完全手册中新建出来的工程模板 系统架构 STM32 系统架构的知识可以在< ...

  7. 【STM32】STM32F4时钟系统

    00. 目录 文章目录 00. 目录 01. STM32F4时钟系统概述 02. STM32F4时钟系统图 03. STM32F4时钟初始化配置 04. 时钟配置总结 05. 预留 06. 附录 07 ...

  8. STM32 时钟系统

    STM32时钟系统的基本概念 概念及意义 (1)概念:时钟系统是由振荡器(信号源).定时唤醒器.分频器等组成的电路.常用的信号源有晶体振荡器和RC振荡器. (2)意义:时钟对数字电路而言非常重要,没有 ...

  9. 基于51单片机的时钟系统

     这一次带来的项目是课程设计级别的基于51单片机的时钟系统,本次的项目共有两种,一种是基础功能时钟,上电后自动从00-00-00开始计时,另一种加上了调时功能,上电后自动从00-00-00开始,当需要 ...

最新文章

  1. SAP WM高阶之Storage Type上架策略L下的Mixed Storage
  2. Python爬虫入门教程 21-100 网易云课堂课程数据抓取
  3. [Python人工智能] 七.加速神经网络、激励函数和过拟合
  4. 二值图像--形态学处理3 开操作和闭操作
  5. 新监管形势下的数据流通合规技术解最新探究 (连载一)
  6. MySQL(17)--- LIKE 子句
  7. 关于http协议中的服务器状态情况
  8. linux 启动网络服务,Linux下网络启动服务器安装和配置方法(pxe+tftp+dhcpd)
  9. 基于深度极限学习机DELM的回归预测
  10. tcpdump高级过滤
  11. 登陆界面上下左右居中自适应屏幕显示的简单实现
  12. python实现小型搜索引擎设计_Python实现:设计克隆模式
  13. SAP 月末结账步骤
  14. 反转链表(leetcode 206)
  15. C#实现在图片上添加文字和二维码
  16. 设备综合效率OEE:基于数采的OEE优化分析
  17. 设计师思维模式你get到多少个?
  18. java 消息队列_JAVA-消息队列
  19. 计算机屏幕最小值,虚拟内存最大值最小值如何设置好?
  20. 记一次阿里云k8s部署-测试存储

热门文章

  1. Linux服务器卡顿如何排查
  2. Android EditText限制输入表情和特殊符号的处理
  3. python自省与反射
  4. UltraISO使用和U盘安装原版系统指南
  5. 小白的测试人生(三)小白如何进入IT行业及如何选择培训机构
  6. ArcGIS制作矢量动图
  7. 【plang 1.4.4】编写贪吃蛇脚本
  8. APP上短信验证码如何验证?
  9. 实战 Java 第8天:开发商品详情查询接口
  10. 进程管理系统的设计与实现 SDUT 操作系统实训 项目 Java