时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行。时钟系统犹如人的心脏,一旦有问题整个系统就崩溃。我们知道STM32属于高级单片机,其内部有很多的外设,但不是所有外设都使用同一时钟频率工作,比如内部看门狗和RTC,它只需30KHz的时钟频率即可工作,所以内部时钟源就有多种选择。在前面章节的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,将STM32F1系统时钟设置为72MHz,然后进入主函数。那么这个系统时钟大小如何得来,其他外设的时钟又如何划分,可以通过一张时钟树图找到答案,只要理解好时钟树,STM32一切时钟的来龙去脉就会非常清楚。下面就来了解下时钟树,如下图所示。

在STM32时钟系统中,有5个重要的时钟源,分别是LSI、LSE、HSI、HSE、PLL。按照时钟频率分可分为高速时钟源和低速时钟源,在这5个中HSI、HSE以及PLL属于高速时钟,LSI和LSE属于低速时钟。按照时钟来源可分为外部时钟源和内部时钟源,外部时钟源就是在STM32晶振管脚处接入外部晶振的方式获取时钟源,其中HSE和LSE是外部时钟源,其他的是内部时钟源。下面我们就按照上图中数字顺序来介绍。
(1)图标1中HSI是内部高速时钟,RC振荡器,频率为8MHz。可作为系统时钟或PLL锁相环的输入。
(2)图标2中HSE是外部高速时钟,可通过外接一个频率范围是4-16MHz的时钟或者晶振,HSE可以作为系统时钟和PLL锁相环输入,还可以经过128分频后输入给RTC。
(3)图标3中LSI是内部低速时钟,RC振荡器,频率大约为40K,可供独立看门狗和RTC使用,并且独立看门狗只能使用LSI时钟。
(4)图标4的LSE是外部低速时钟,通常在外部低速时钟管脚上外接一个32.768KHz的晶振,供RTC使用。

(5)图标5的PLL是锁相环,用于倍频输出,因为开发板外部高速晶振也只有8M,如果要使芯片的最大时钟频率是72M,可通过PLL锁相环来倍频。从图标5中可以看到,PLL时钟输入源可选择为HSI/2、HSE或者HSE/2,时钟源经过2-16倍频后输入给PLLCLK,如果系统时钟选择由PLLCLK提供,则PLLCLK最大值不要超过72M。

那么它是怎么倍频产生72MHz系统时钟的呢?我们看到在主PLL内有倍频器和分频器,PLL时钟源的输入信号要先经过一个PLLMUL倍频器,将HSE或HSI倍频2-16后输入给PLLCLK,如果系统时钟源SYSCLK选择PLLCLK作为它的来源,则最大值不能超过72M。虽然可以做超频处理,但会打破系统的稳定性,这个是不划算的。假如PLLSRC的时钟来源由HSE提供,开发板使用的HSE是8M晶振,经过PLLMUL的9倍频后可以输出72M时钟频率给PLLCLK。
如果我们选择的HSE是PLL的时钟源,PLL是SYSCLK的时钟源,即SYSCLK为72MHz,这个也是我们库函数模板中SystemInit所配置的最终系统时钟。

上面简单介绍了下STM32的5个时钟源,那么它们是怎么给其他外设和系统提供时钟的呢?在上面时钟树图中常用的时钟用字母框起来,按照它们顺序依次介绍。
(A)MCO是STM32的一个时钟输出IO(PA8),它可以选择一个时钟信号输出,可以选择为PLL输出的2分频、HSI、HSE或者系统时钟。这个时钟可以用来给外部其他系统提供时钟源。
(B)RTC时钟。从图中线的流向可知,RTC时钟来源可以是内部低速的LSI时钟,外部低速LSE时钟(32.768K),还可以通过HSE的128分频后得到。
(C)USB时钟。STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源,该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是当需要使用USB模块时,PLL必须使能,并且PLLCLK时钟频率配置为48MHz或72MHz。
(D)SYSCLK系统时钟。它是STM32中绝大部分部件工作的时钟源。它的时钟来源可以由HSI、HSE、PLLCLK提供,相信大家选择STM32F1这种高级芯片,都希望有一个比较大的时钟频率,因此选择PLLCLK作为系统时钟。PLLCLK又是从HSE或HSI经过PLL倍频得到。根据前面PLL计算关系大家就可以算出系统时钟是多少。
(E)其他所有外设。从时钟图上可以看出,其他所有外设的时钟最终来源都是 SYSCLK。SYSCLK通过AHB分频器分频后送给各模块使用。这些模块包括:
①AHB总线、内核、内存和DMA使用的HCLK时钟。
②通过8分频后送给Cortex系统定时器时钟,即SysTick。
③直接送给Cortex的空闲运行时钟FCLK。
④送给APB1分频器。APB1分频器输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)1、2倍频使用。
⑤送给APB2分频器。APB2分频器分频输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。
⑥送给ADC分频器。ADC分频器经过2、4、6、8分频后送给ADC1/2/3使用,ADC最大频率为14M。
⑦二分频后送给SDIO使用。
其中需要理解的是APB1和APB2的区别,APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3等。APB2上面连接的是高速外设包括UART1、SPI1、Timer1、ADC1、ADC2、GPIO等。
在时钟树图中我们还可以得到一个重要信息,大多数有关时钟输出部分都有一个使能控制,比如AHB总线、APB1外设、APB2外设、内核时钟等。当需要使用某个时钟的时候一定要开启它的使能,否则将不工作。在前面使用库函数点亮一个LED实验的时候就使能了GPIO的外设时钟,如果不开启,LED 将不工作。

嵌入式开发直播课 - 深度剖析STM32:时钟系统 - 创客学院直播室​www.makeru.com.cn

esp32 rtc 时钟设置不对_STM32入门系列-STM32时钟系统,STM32时钟树相关推荐

  1. stm32专题五:时钟树(三)自定义配置HSE时钟 超频

    在前一节分析了stm32系统默认时钟配置的过程,现在想自己实现一个自定义修改时钟配置的函数.其实原理很简单,因为系统在上电复位时就会按照默认完成时钟配置.因此,要先复位时钟,然后按照流程来配置就ok, ...

  2. esp32 rtc 时钟设置不对_「STM32」实时时钟(RTC)实验

    实时时钟的特征和原理 RTCCLK:时钟来源 RTC的时钟有哪些来源呢? 如图,有3个渠道 来自于外部的LSE也就是外部的晶振 来自于HSE的128分频 来自于LSI 一般情况下我们都是采用外部晶振来 ...

  3. esp32 rtc 时钟设置不对_咱们RTC时钟案例的时间为什么开始的时候总是2014年,怎么改呢?...

    [mw_shl_code=c,true]u8 RTC_Init(void) { //检查是不是第一次配置时钟 u8 temp=0; RTC_NVIC_Config(); //if(BKP->DR ...

  4. c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数

    要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...

  5. 寄存器相互映射是什么意思_STM32入门系列-STM32外设地址映射

    片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...

  6. 96KB存储器的怎么算地址范围_STM32入门系列-存储器与寄存器介绍

    我这有30套嵌入式创客开发板 需要的朋友加13260562029 介绍两部分内容: 什么是存储器映射 什么是寄存器及寄存器映射 为了让大家对存储器与寄存器有一个更清楚的认识,并且为之后使用 C 语言来 ...

  7. 入门系列:gdb学习——函数调用时参数传递

    说明:   本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉.   QQ 群 号:513683159 [相 ...

  8. 7系列mrcc xilinx_XILINX 7系列FPGA_时钟篇

    目录一览 0.转载说明 1.时钟结构简介 2.时钟区域简介 3.时钟操作法则 4.CMT简介 0.转载说明 FPGA开发,不知道所使用组件的特性,怎能开发出优秀的设计呢!!! 老早就想整理7系列FPG ...

  9. 【STM32】系统时钟RCC详解(超详细,超全面)

    转载:https://blog.csdn.net/as480133937/article/details/98845509 1什么是时钟 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的 ...

最新文章

  1. JaveWeb 公司项目(4)----- Easyui的表单验证
  2. HTML中的全局属性
  3. scikit-learn 逻辑回归类库使用小结
  4. Windows桌面任务栏透明化
  5. 关于在ubuntu下配置AMD显卡驱动的总结
  6. php病毒图片后缀名,脚本图片类后门病毒的完美使用方法
  7. J - R u really ready?(CCRC 18)动态规划
  8. padavan固件获取网络地图中的客户端状态
  9. python做正态分布的例子_python实现正态分布
  10. 在注视之外:对于认知和认知发展研究,眼动追踪还能揭示什么?
  11. Effective Java笔记(第二章)
  12. Vue3 源码阅读(3):响应式系统 —— 重置 effect 的依赖收集、嵌套的 effect、effect 调度执行
  13. 【Java】Date日期类诠释
  14. h5 life.html,H5 交互页编辑器 AEditor 介绍
  15. 3、InnoDB存储引擎
  16. RootBeanDefinition、ChildBeanDefinition、GenericBeanDefinition的区别
  17. OneNote快捷键大全
  18. 浅析肖特基二极管与开关二极管的不同之处
  19. 专业实验 I 实验报告
  20. matlab求解erfc方程

热门文章

  1. Java内存模型、volatile、原子性、可见性、有序性、happens-before原则
  2. 一款适用于家庭智能设备的带摄像头的开发板—最主要是价格低的超乎你想象
  3. 共创Linux防火墙,Linux防火墙iptables简明教程
  4. java 抽象工厂工厂_java之抽象工厂
  5. 正点原子stm32f407开发板pcb图_#试用名单公布#正点原子ARM Linux开发板I.MX6ULL
  6. 金融运营智能化搞不定?百度智能云有妙方
  7. 关于复选框选中状态的判断
  8. 学习记录(一)之h5_canvas
  9. 如何在有scoped不影响elementUI 的其他页面组件,进行单页面修改的几种方法。
  10. [linux]centos7下解决yum install mysql-server没有可用包