STM32的时钟树与配置方法

发布者:innovator8最新更新时间:2024-02-03 来源: elecfans关键字:STM32  时钟树  配置方法 手机看文章 扫描二维码
随时随地手机看文章

时钟信号推动单片机内各个部分执行相应的指令,时钟就像人的心跳一样。


STM32本身十分复杂,外设非常多,任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,如果都用高速时钟势必造成浪费。同一个电路,时钟越快功耗越大、抗电磁干扰能力越弱。复杂的MCU采用多时钟源的方法来解决这些问题。如下图,是STM32的时钟系统框图。

26fa0268-f91e-11ec-ba43-dac502259ad0.png

如上图左边的部分,看到STM32有4个独立时钟源,HSI、HSE、LSI、LSE。

HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。

HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。

LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

时钟树的右边红色框中,则是系统时钟通过AHB预分频器,给相对应的外设设置相对应的时钟频率。

其中LSI、LSE是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源使用。而HSI、HSE以及PLLCLK经过分频或者倍频作为系统时钟SYSCLK来使用。

PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。通过倍频之后作为系统时钟的时钟源。

配置时钟

默认时钟

Keil编写程序是默认的时钟为72Mhz,其实是这么来的:

外部高速晶振HSE提供的8MHz(大小与电路板上的晶振相关)通过PLLXTPRE分频器后,进入PLLSRC选择开关,进而通过PLLMUL锁相环进行倍频(x9)后,为系统提供72MHz的系统时钟SYSCLK。之后是AHB预分频器对时钟信号进行分频,然后为低速外设提供时钟。相关文章推荐:时钟失效之后,STM32还能运行?

内部RC振荡器HSI为8MHz,2分频后是4MHz,进入PLLSRC选择开关,通过PLLMUL锁相环进行倍频(最大x16)后为64MHz。

USB时钟

270fc936-f91e-11ec-ba43-dac502259ad0.png

如上图,STM32的USB时钟不能超过48MHz,因此如果时钟源为72MHz,就需要进行1.5分频。

如果时钟源为48MHZ,则进行1分频即可。

把时钟信号输出到外部

271b7826-f91e-11ec-ba43-dac502259ad0.png

STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟,可以把时钟信号输出供外部使用。

AHB分频器

如时钟树图右边的部分,系统时钟通过AHB分频器给外设提供时钟。从左到右可以简单理解为:

系统时钟->AHB分频器->各个外设分频倍频器->外设时钟的设置。

右边部分为:系统时钟SYSCLK通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用:

内核总线:送给AHB总线、内核、内存和DMA使用的HCLK时钟。

Tick定时器:通过8分频后送给Cortex的系统定时器时钟。

I2S总线:直接送给Cortex的空闲运行时钟FCLK。

APB1外设:送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给通用定时器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2-7使用。

APB2外设:送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给高级定时器。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。需要注意的是,如果APB预分频器分频系数是1,则定时器时钟频率(TIMxCLK)为PCLKx。否则,定时器时钟频率将为 APB 域的频率的两倍:TIMxCLK = 2xPCLKx。

APB1和APB2的对应外设

27272b26-f91e-11ec-ba43-dac502259ad0.png

F1系列中,APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、USART2、USART3、UART4、UART5、SPI2、SP3等。

APB2上面连接的是高速外设,包括UART1、SPI1、Timer1、ADC1、ADC2、ADC3、所有的普通I/O口(PA-PE)、第二功能I/O(AFIO)口等。

具体可以在stm32f10x_rcc.h中查看外设挂在哪个时钟下。

时钟监视系统(CSS)

27374a6a-f91e-11ec-ba43-dac502259ad0.png

另外,STM32还提供了一个时钟监视系统(CSS),用于监视高速外部时钟(HSE)的工作状态。倘若HSE失效,会自动切换(高速内部时钟)HSI作为系统时钟的输入,保证系统的正常运行。


关键字:STM32  时钟树  配置方法 引用地址:STM32的时钟树与配置方法

上一篇:基于STM32单片机的电源设计
下一篇:STM32的GPIO介绍

推荐阅读最新更新时间:2024-11-12 15:49

STM32中断流程处理
作为我的一个习惯,学习某一个平台的东西,总是先要摸清楚中断的处理流程,当然是从文件代码级的流程分析了。 下面就说下stm32的中断流程。我们知道,stm32的库中写好了很多的驱动程序,可以说包括了所有的。同时也提供很多数据处理方式,例如串口的读写,用户可以选择轮询、中断、DMA等3中方式来处理。 关于中断,stm32的库中做好了框架,用户只要填写好几个函数的实现就ok了,就像网上说的,这就是傻瓜式开发。 了解中断,首先要知道stm32f10x_it.c这个文件,一般情况下是和main文件在同一个目录下的。打开这个文件,我们可以看到xyz_IRQHandler函数的实现,虽然说是实现,但是几乎都是空的。对了,这些函数就是要用户填写
[单片机]
基于STM32的嵌入式数字示波器设计
  嵌入式数字示波器是近年来发展起来的一种集显示、测量、运算、分析、记录等多种功能于一体的智能化测量终端设备。凭借其强大的性能优势,己逐步取代传统模拟示波器。当前国内通用的数字示波器多数采用51单片机、FPGA、DSP等结构。但是51单片机处理能力有限,无法实现数字示波器的基本指标,FPGA虽然能深入开发数字示波器,然而,其成本偏高,即使加入SOPC软核,其软件压力也很大。   本设计选用ARM处理器中基于Cortex-M3内核的32位STM32F103VCT6作为主控芯片。该芯片内部集成了16通道的12位高精度A/D转换器,转换时间仅为1μs,而且STM32芯片具省电模式,功耗低,与传统MCU相比,其在性能和处理能力上都比较
[测试测量]
基于<font color='red'>STM32</font>的嵌入式数字示波器设计
基于STM32的跑马灯实验的详细解析
我们用C语言来再学习STM32,以加深理解,并且应用相关资料和官方固件标准库。因此,我们来编写一个跑马灯实验 先前准备 一, 开发环境 安装MDK5,并且导入STM32官方标准库。 STM32官方标准库名称:stm32f4_dsp_stdperiph_lib 这个STM32官方固件标准库以前是可以在ST官网下载,现在好像在官网上找不到了。 二,相关应用资料:STM32F4XX中文参考手册 相关函数 一,因为要使用GPIO,在使用GPIO时需要先使能IO口时钟。 使能IO时钟就要使用到RCC寄存器。RCC寄存器相关知识,见中文参考手册6.3章节。 调用函数:RCC_AHB1PeriphClockCmd(); 二,因为要用
[单片机]
基于<font color='red'>STM32</font>的跑马灯实验的详细解析
嵌入式stm32学习之路——第一弹(led流水灯工程)
之前没接触过单片机,初次学习感到很迷茫,从初识stm'32到建工程模板再到第一个(流水灯实验),用了两天半的时间。因为C语言基础不是很好,有很多语句都看不懂,费了很大的劲才把led灯点亮。因为模电和数电都还没学,电路图也很难弄懂。 下面是原理图: 点亮led的方法 知道了原理之后,根据方法分析,可制定相应的开发步骤如下: 1)为控制LED灯,知道要使用 GPIO 外设。 2)了解GPIO外设有什么功能,要如何使用。 3)获知GPIO的地址映射,知道它所挂载的总线APB2。 4)了解ST官方库对寄存器的封装。 5)了解时钟树,查看 GPIOx(x= A…F)的时钟来源,即PCLK2。 6)在stm32f10x
[单片机]
嵌入式<font color='red'>stm32</font>学习之路——第一弹(led流水灯工程)
STM32 基础系列教程 0 - CubeMX 下载与安装
前言 学习STM32CUBEMX工具的下载与安装,学会从st官网(www.st.com)查找与下载资料。 示例详解 STM32CUBEMX 下载 进入st官网(www.st.com),在官网的网页搜索框中输入STM32cubeMX 在跳转后面网页中,点 Get Software 网页自动跳转到尾部,选选最高版本(如图中5.0.1) 在弹出的界面中点ACCEPT,然后输入用户名及邮箱地址(用于接收下载地址),勾选I have…后点DOWNLOAD 此时网页显示界面如下,登入邮箱,去查收下载地址,在接收到的邮件中直接点击DownLoad Now 网页自动加载,然后自动下载 stm32cub
[单片机]
<font color='red'>STM32</font> 基础系列教程 0 - CubeMX 下载与安装
SD NAND 的 SDIO在STM32上的应用详解(上篇)
一.SDIO简介 SDIO (Secure Digital Input and Output)全称安全数字输入/输出接口,在AHB外设总线和多媒体卡(MMC)、SD存储卡、SDIO卡和CE-ATA设备间提供了操作接口。 多媒体卡(MMC) MMC(MultiMedia Card)卡由西门子公司和首推CF的SanDisk于1997年推出多媒体卡(MMC)是一种小型(24x32或18x1.4mm)可擦除固态存储卡,其全称为Multi-Media Card,特别应用于移动电话和数字影像及其他移动终端中。 SD卡:(Secure Digital Memory Card) SD卡是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下
[单片机]
SD NAND 的 SDIO在<font color='red'>STM32</font>上的应用详解(上篇)
STM32开发笔记20: STM32L053R8T6的keil配置
单片机型号:STM32L053R8T6 使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。 仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。 但下载的时候,偶尔还会提示如下错误: 这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。 此2处更改后,反复下载程序,亦不再报错。
[单片机]
<font color='red'>STM32</font>开发笔记20: STM32L053R8T6的keil<font color='red'>配置</font>
怎么解决STM32(MDK)中不能使用printf()函数的问题
简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_
[单片机]
怎么解决<font color='red'>STM32</font>(MDK)中不能使用printf()函数的问题
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved