STM32入门系列-STM32时钟系统,STM32时钟树
时钟对于单片机来说是非常重要的,它为单片机工作提供一个稳定的机器周期从而使系统能够正常运行。时钟系统犹如人的心脏,一旦有问题整个系统就崩溃。我们知道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入门系列-STM32时钟系统,STM32时钟树的更多相关文章
- STM32入门系列-STM32时钟系统,自定义系统时钟
在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率.在库函数中也有对时钟倍频因子配置的函数,如下: void RCC_PLLConfig(uint32_t R ...
- STM32入门系列-STM32时钟系统,时钟初始化配置函数
在前面推文的介绍中,我们知道STM32系统复位后首先进入SystemInit函数进行时钟的设置,然后进入主函数main.那么我们就来看下SystemInit()函数到底做了哪些操作,首先打开我们前面使 ...
- STM32入门系列-学习STM32要掌握的内容
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令).S(系统).D(数据)三条信号 ...
- STM32必学的时钟系统
STM32的时钟系统 相较于51单片机,stm32的时钟系统可以说是非常复杂了,我们现在看下面的一张图: 上图说明了时钟的走向,是从左至右的从时钟源一步步的分配给外设时钟.需要注意的是,上图左侧一 ...
- STM32学习笔记:【001】时钟树与RCC
导言 如果学过单片机的同学应该不会陌生,学习51单片机时最经常听到的就是“最小系统”. 最小系统里面少不了晶振,否则单片机无法工作. 单片机需要晶振(时钟源)来工作,那么对于STM32芯片同样如此. ...
- linux入门系列17--邮件系统之Postfix和Dovecot
前文演示了通过Samba和NFS实现文件共享,本篇演示使用Postfix和Dovecot在局域网实现电子邮件收发系统. 电子邮件系统是我们日常生活和工作中非常重要的一个网络服务,在windows下收发 ...
- STM32入门系列-STM32时钟系统,时钟使能配置函数
之前的推文中说到,当使用一个外设时,必须先使能它的时钟.怎么通过库函数使能时钟呢?如需了解寄存器配置时钟,可以参考<STM32F10x中文参考手册>"复位和时钟控制(RCC)&q ...
- STM32入门系列-启动文件介绍
在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...
- STM32入门系列-库目录及文件介绍
已经介绍了过了CMSIS标准,ST公司按照这个标准设计了一套基于STM32F10x的固件库,我们可以直接在ST公司的官网进行下载,现在给大家STM32最新固件库v3.5,在网盘上给大家提供了下载包,链 ...
随机推荐
- 【Processing-日常3】等待动画1
之前在CSDN上发表过: https://blog.csdn.net/fddxsyf123/article/details/79755976
- Elasticsearch(2):索引详谈
在上一篇博客中,介绍了ES中的一些核心概念和ES.Kibana安装方法.本节开始,我们从索引开始来学习ES的操作方法. 1 创建索引¶ 创建一个索引的方法很简单,在Kibana中运行下行请 ...
- Windows无法安装到GPT格式磁盘的根本解决办法 - 初学者系列 - 学习者系列文章
上次在MSDN系统QQ群里有朋友问到在安装操作系统的时候有个问题:Windows无法安装到GPT格式磁盘,见图: 我在这里说下,使用网上方法的都是小白,就是说网上那些都是小白.下面介绍如何正确安装操作 ...
- python_用户登录验证
登录验证,三次机会,如何做? 1. 一个用户列表记录合法密码和用户名,一个小黑屋列表记录输错3次的用户, 一个中间列表记录所有用户输入,统计某个用户是否输错3次 2. 通过 in 判断一个元素是否在一 ...
- CISCO交换机STP实验(生成树协议)
目录 一.前言:生成树协议(STP) 二.CISCO交换机STP命令汇总 三.运用STP搭建简单拓扑 四.实战:STP综合实验 五.结语 一.前言:生成树协议(STP) 计算机网络中,我们为了减少网络 ...
- 安装、验证安装 Oracle Database XE 11gR2
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- LNMP架构介绍与部署
一.LNMP架构介绍 LNMP:Linux系统下Nginx+MySQL+PHP这种网站服务器架构.Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器.My ...
- Docker安装MongoDB、MySQL、Jenkins、Gitlab、Nginx
Docker安装MongoDB.MySQL.Jenkins.Gitlab.Nginx 安装MongoDB 1. 拉取镜像 $ sudo docker pull mongo 2. 运行镜像 $ sudo ...
- 第0天 | 12天搞定Pyhon,前言
依稀记得,在2014年的某一天,一位运营电商平台的多年好朋友,找我帮忙:一个月内,实现抓取竞争对手在某电商平台上的所有产品信息并统计每个产品的点击率. 说出来有些不好意思,那些年,参与过的产品挺多的, ...
- RFC 8684---TCP Extensions for Multipath Operation with Multiple Addresses
https://datatracker.ietf.org/doc/rfc8684/?include_text=1 TCP Extensions for Multipath Operation with ...