STM32的时钟体系可以直接以图概括(摘自STM32F10X参考手册)

下面就此图做分析

1. STM32输入时钟源

1.1 时钟源的作用

无论是小型单片机还是像STM32这样高级单片机,它们工作的核心都是大规模的时序逻辑电路,而驱动时序逻辑电路的关键则是准确而又稳定的时钟源。它的作用就像小学在操场上做广播体操时候播放的背景音乐,用于协调和同步各单元运行,为时序电路提供基本的脉冲信号。

1.2 STM32时钟源的设计

在51单片机中,一般都外接一个11.0592MHz的晶振,注意,提供时钟的不是晶振,而是RC时钟电路,而晶振只是时钟电路的元件之一。同理,在STM32中,时钟源也是由RC时钟电路产生,与51单片机的区别是区别在于,RC电路的位置。根据RC电路的位置,可以将STM32的时钟源分为内部时钟电路和外部时钟、内外部时钟电路。

(1)内部时钟电路:
晶体振荡器和RC时钟电路都在STM32芯片内部,如图中标注1、标注4。
标注1处是产生8MHz的时钟源,称为HSI,高速内部时钟源(H意为高速,S意为源,I意为内部);
标注4处是产生32KHz的时钟源,称为LSI,低速内部时钟源;

(2)内外部时钟电路:
晶体振荡器在STM32芯片外部,RC时钟电路在STM32芯片内部,如图中标注2、标注3。
标注2处是产生4-16MHz的时钟源,称为HSE,高速外部时钟源;
标注3是产生32.768KHz的时钟源,称为LSE,低速外部时钟源;
OSC_OUT和OSC_IN、OSC32_OUT和OS32_IN分别接晶振的两个引脚。前者一般接8MHz晶振;后者一定接32.768KHz,因为这个时钟源是供给RTC实时时钟使用的。在51单片机中没有集成RTC模块,在做电子时钟时用到的DS1302集成芯片时,也是为其提供的也是32.768KHz的晶振。

(3)外部时钟电路
晶体振荡电路和RC时钟电路都在STM32芯片外部。如图中标注2、标注3。
OSC_OUT和OSC_IN、OSC32_OUT和OS32_IN除了分别接晶振的两个引脚,对于OSC_IN和OSC32_IN引脚,还可以接入外部的RC时钟电路,其时钟源直接由外部供给,不过这种方案少见。

综上所述,STM32的时钟源有4个: HSI、HSE和LSI、LSE。

HSI时钟源,它是在由STM32在内部用RC振荡电路实现的高速内部时钟源。HIS RC振荡器能够在不需要任何外部期间的条件下提供系统时钟,它的启动时间比HSE晶体振荡器短,但是不精准,即使在校准之后它的时钟频率精度仍较差。在手册中还明确说,当HSI被用作PLL时钟输入时,系统时钟能得到的最大频率是61MHz,这显然不能发挥STM32最极致的性能。

1.3 时钟信号通道选择

虽然HSI不精准,但是鉴于启动速度原因考虑,STM32上电复位,默认是采用HSI时钟源的,当然开发者可以不修改这个时钟源,那么系统将一直工作在一个时钟源不稳定不精准的环境下。
然而一般做法是改变时钟源,将时钟源改为HSE。改变时钟源的通道是在相关寄存器设置的,在图中的PLLSRC可以实现对这两个频率的切换。

1.4 锁相环倍频器PLL/预分频器Prescaler

STM32的cpu的工作常规频率是72MHZ(超过72MHz工作称为超频工作,CPU耗电加剧,且会发烫),但是我们接入的晶振是8MHz,这就需要一个对频率加倍的操作,即倍频。如图中的PLLMUL,PLLMULL实现对接入时钟源的倍频,如x2、x3、x4…倍频后的时钟源为PLLCLK。

预分频器是实现对频率削减作用的。倍频器将HSE倍频之后提供给cpu,但是除了cpu之外,其他片内外设,如SPI控制模块、IIC控制模块等的工作同样需要时钟源,这些外设的时钟源肯定是低于cpu运行时钟的,例如USB通讯才需要48MHz,所以需要对倍频后的时钟源进行分频。一般芯片的分频做法都是对一个时钟源倍频后供给某些部件,其他低于此倍频后的时钟都是基于此时钟源来分频的。用户可通过多个预分频器配置AHB,高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHz。APB1域的最大允许频率是36MHz。SDIO接口的时钟频率固定在HCLK / 2。
经过时钟源的选择、分频/倍频,就可以到HCLK(高性能总线AHB用)、FCLK(供给cpu内核的用,常说的cpu主频)、PCLK(高性能外设总线APB)、USBCLK、TIMXCLK、TIM1CLK、RTCCLK等,外设是挂载STM32的总线上的,具体哪个外设挂载哪个总线,看下图:

在软件开发中,我们要做的也无非设置门电路以选择时钟源输入、倍频/分频系数和打开/关闭对应外设所在总线的时钟。

2. STM32输出时钟源

图中的MCO功能模块,可以将PLLCLK / 2、HSI、HSE、SYSCLK输出,供给其他系统作为输入时钟源,对这一功能模块也是又相应的寄存器,图中以MCO标注。

3. 系统滴答Systick

Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断,称之为滴答中断操作系统进行运转的时候,也会有时间节拍。它会根据节拍来工作,把整个时间段分成很多小小的时间片,而每个任务每次只能运行一个时间片的时间长度,超时就退出给别的任务运行,这样可以确保任何一个任务都不会霸占操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统的节拍。只要不把它在SysTick控制及状态寄存器中的使能位清除,就一直执行。

RCC(复位与时钟控制器)通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟(后者图中没画出)。另外,还有其他时钟,如USB时钟,ADC时钟、独立看门狗时钟等,它们各自的时钟源通过前面学习,也可以轻易分析出来,这里不再赘述。

4. 时钟相关的寄存器

时钟体系涉及到的寄存器有

RCC_CR
RCC_CFGR
RCC_CIR
RCC_APB2RSTR
RCC_APB1RSTR
RCC_AHBENR
RCC_APB2ENR
RCC_APB1ENR
RCC_BDCR
RCC_CSR

这些寄存器的作用直接看数据可知,编程使用部分后续补充。

STM32时钟体系结构相关推荐

  1. STM32 时钟与外设总线

    声明:本篇为转载,侵删 一.概括 首先,说点不靠谱的,APB和AHB总线,我个人感觉这个类似于个人PC系统里的北桥和南桥总线. 南桥总线上挂接的都是鼠标.键盘这些慢速的设备,北桥上挂接显卡等高速设备. ...

  2. esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树

    时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行.时钟系统犹如人的心脏,一旦有问题整个系统就崩溃.我们知道STM32属于高级单片机,其内部有很多的外设,但不是 ...

  3. STM32 时钟系统

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

  4. STM32——时钟系统

    STM32--时钟系统 宗旨:技术的学习是有限的,分享的精神是无限的. 一.时钟树 普通的MCU,一般只要配置好GPIO 的寄存器,就可以使用了.STM32为了实现低功耗,设计了非常复杂的时钟系统,必 ...

  5. stm32时钟配置总结

    stm32时钟配置时钟源: 1,HSE(高速外部时钟)即常见的外接8M晶振方案: 2,HSI(高速内部时钟) 即8M内部振荡时钟方案: 3,LSE(低速外部时钟)即常见的32.768Khz晶振方案: ...

  6. stm32时钟初始化过程浅析

    stm32时钟初始化过程浅析 (大致梳理了一下32启动过程中时钟的初始化过程) 加载main函数之前(启动代码中LDR R0, =__main之前),HCLK总线时钟默认上电是上一次断电前配置的频率 ...

  7. STM32时钟系统的概念及意义

    STM32时钟系统的基本概念 概念及意义 概念 时钟系统是由振荡器(信号源).定时唤醒器.分频器等组成的电路.常用的信号源有晶体振荡器和RC振荡器 意义 时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下 ...

  8. STM32 时钟总结

    STM32 时钟源 HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高. HSE是高速外部时钟,可以由有源晶振或者无源晶振提供,频率从 4-26MHZ不等.当使用有源晶振时,时钟从 OSC_I ...

  9. 2021.4.14 第四次 STM32时钟系统

    STM32时钟系统 一. STM32时钟系统介绍 二. 时钟系统框图 三. 时钟配置相关函数 1.1 时钟系统介绍: 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令.STM32本身 ...

最新文章

  1. [置顶]       jQuery乱谈(六)
  2. OpenStack安装过程备忘
  3. win7下.NET 2.0未在web服务器上注册的问题
  4. DWZ-JUI 树形Checkbox组件 无法一次获取所有选中的值的解决方法
  5. WKViewManager iOS 弹窗架构
  6. os.path vs pathlib
  7. LA 3695 Distant Galaxy
  8. 助农两年销量千万 “李佳琦公益”实现“造血式”帮扶
  9. PS5国行版本周六开售 索尼:PS5将缺货至明年
  10. C#中的Boolean类型
  11. Altium Designer 学习记录3
  12. 2345等浏览器主页劫持的解决办法
  13. 计算机用户没有管理员权限,电脑没有管理员权限怎么办
  14. 脑语言2500令v0.5.5
  15. Hive3.1.2安装指南
  16. python循环次数教程_Python基础教程-循环
  17. ISA-95第二部分-互操作性-B2MML用例
  18. 旺盛型人格特征和优劣势,旺盛型性格的职业发展方向
  19. 移动硬盘损坏如何恢复数据
  20. Android模拟请求调页-广工操作系统课设

热门文章

  1. 微信小程序单行文本溢出部分省略号显示无效
  2. Tiktok如何利用Shopify开展分销模式!
  3. memoQ中如何显示html预览,Trados、MemoQ和Wordfast 5文件实时预览查看及大批量查找和替换...
  4. 【数据挖掘】数据异质性的理解
  5. matlab许可证_人大MATLAB许可证即将过期?如何更新个人版MATLAB许可证
  6. 解决 SpringBoot 没有主清单属性
  7. 打造一款自己的XCode
  8. cad图形展示 html5,web html页面显示autocad等dwg格式图形文件方法
  9. flyve-mdm docker环境安装问题记录
  10. bluestacks 爬虫_如何将Android Studio连接到Bluestacks