高手带你理解STM32系统时钟和分频

合集下载

stm32时钟详细说明

stm32时钟详细说明

在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。

①、HSI是高速内部时钟,RC振荡器,频率为8MHz。

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

③、LSI是低速内部时钟,RC振荡器,频率为40kHz。

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

⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。

倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。

另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。

RTC的时钟源通过RTCSEL[1:0]来选择。

STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。

该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。

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

系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。

系统时钟可选择为PLL输出、HSI或者HSE。

系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。

其中AHB分频器输出的时钟送给5大模块使用:①、送给AHB总线、内核、内存和DMA使用的HCLK时钟。

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

③、直接送给Cortex的空闲运行时钟FCLK。

④、送给APB1分频器。

STM32入门教程--系统时钟配置

STM32入门教程--系统时钟配置

STM32 系统时钟配置一、STM32的时钟系统时钟是什么?时钟通常是振荡器(如晶振)产生的特定频率的方波信号,时钟周期是时钟频率的倒数,时钟频率1MHz时钟周期为1/1000000=1us。

时钟周期是MCU处理指令的最小时间单元,每个程序指令都需要若干个时钟周期,MCU的时钟频率越快,完成一个指令的时间就越短,速度就越快。

时钟是MCU运行的基础,好比MCU的脉搏,是MCU性能的重要参数。

每个MCU 都是在某个特定的时钟频率下进行工作的,如C51单片机时钟频率为12MHz,而STM32F103 的系统时钟频率是72MHz。

STM32的时钟系统STM32时钟频率较高,时钟越快功耗越大,同时抗电磁干扰能力也会越弱。

而且STM32外设非常多,而通常外设是不需要像系统时钟那么高的频率的,比如看门狗和RTC 只需要几十K的时钟即可。

另外实际使用的时候通常只会用到有限的几个外设,STM32可以只给需要启动的外设分配时钟,以此来降低功耗。

由此可看出STM32 的时钟系统较为复杂,它采用了多个时钟源的方法来解决这些问题。

STM32 有4个独立时钟源:HSI、HSE、LSI、LSE。

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

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

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

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

其中LSI是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源而独立使用,HSI高速内部时钟 HSE高速外部时钟 PLL锁相环时钟这三个经过分频或者倍频作为系统时钟来使用基本时钟源(图中绿色箭头指出):(1)HSI高速内部时钟,RC振荡器,8MHz。

(2)HSE高速外部时钟,石英/陶瓷谐振器,8MHz。

(3)LSI低速内部时钟,RC振荡器,40kHz。

STM32时钟要先倍频N倍再分频的原因是什么?

STM32时钟要先倍频N倍再分频的原因是什么?

STM32时钟要先倍频N倍再分频的原因是什么?
有些朋友不理解为什么STM32时钟要先倍频N倍,再分频?你会担心这个值太大吗?
1写在前面
STM32时钟的功能,可以说是越来越强大了。

从各个系列的时钟树可以看得出来,最早F1系列的时钟功能相对比较简单,到这后面H7、G0的时钟越来越丰富。

今天讲述一下其中的PLL环节。

2关于PLL
什么是PLL?
PLL:Phase Locked Loop锁相环。

PLL用于振荡器中的反馈技术,通常需要外部的输入信号与内部的振荡信号同步。

一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,由相应的器件VCO,实现转成高频,但并不稳定,故利用锁相环路就可以实现稳定且高频的时钟信号。

每一块STM32处理器至少都有一个PLL,有的甚至有好几个PLL。

比如,F4有两个PLL:
F7有三个PLL:
当然,每个MCU型号不同,其PLL数量,及功能也有差异,具体需要看相应手册。

3STM32CubeMX配置时钟树
STM32CubeMX配置时钟不用担心出错。

原因很简单,这个工具配置时钟树,如果出错,会有红色警告。

如下图:。

stm32分频原理

stm32分频原理

stm32分频原理
STM32微控制器的分频原理涉及到时钟树结构和各种时钟源的
分频设置。

在STM32微控制器中,时钟源包括内部RC振荡器、内部
晶体振荡器、外部晶体振荡器等,这些时钟源可以通过各种分频器
进行分频,以得到不同频率的时钟信号用于驱动不同的模块。

首先,STM32微控制器的时钟树结构包括主时钟源(HSI、HSE、PLL等)和各种外设时钟源(AHB、APB1、APB2等)。

主时钟源可以
通过PLL进行倍频,得到高频时钟用于驱动CPU和其他模块;外设
时钟源则可以通过预分频器进行分频,得到适合外设工作的时钟频率。

其次,分频原理涉及到寄存器的设置。

在STM32中,通过对时
钟控制寄存器(RCC寄存器)进行配置,可以实现对时钟源的选择
和分频设置。

比如,可以通过设置PLL寄存器来配置PLL倍频系数,通过设置AHB分频寄存器来配置AHB总线的分频系数,通过设置
APB分频寄存器来配置APB总线的分频系数等。

另外,需要注意的是,分频设置需要考虑时钟频率的稳定性和
功耗的控制。

过高或过低的时钟频率都可能导致系统不稳定,而且
过高的频率会增加功耗,过低的频率则可能影响系统性能。

总的来说,STM32微控制器的分频原理涉及到时钟树结构、时钟源的选择和分频设置,通过对相关寄存器进行配置,可以实现对时钟信号的灵活控制,以满足不同外设的工作需求。

同时,合理的分频设置也可以帮助优化系统的功耗和性能。

stm32时钟概念

stm32时钟概念

stm32时钟概念STMicroelectronics的STM32系列是一系列基于ARM Cortex-M 内核的微控制器(MCU)。

时钟系统在STM32芯片中是一个关键的概念,因为它驱动了芯片内部的各种功能模块,包括CPU、外设、总线等。

以下是与STM32时钟相关的一些基本概念:1. 系统时钟(SYSCLK): SYSCLK是STM32中的主时钟,它驱动CPU和内存等核心模块。

其频率由时钟源和分频器的组合决定。

2. 时钟源: STM32芯片通常支持多个时钟源,包括内部RC振荡器、外部晶体振荡器、PLL(相位锁定环)等。

选择适当的时钟源取决于应用的要求,例如需要更高的稳定性或更低的功耗。

3. PLL(Phase-Locked Loop):PLL是一种用于产生高稳定性时钟信号的电路。

通过将一个参考时钟信号与一个可调节的倍频器相锁定,PLL可以生成一个高频率的时钟信号。

4. AHB、APB总线:在STM32中,系统总线被分为高性能总线(AHB)和低速外设总线(APB)。

这两个总线有各自的时钟域,因此可以独立配置时钟。

这种分级的结构有助于提高系统的性能和灵活性。

5. 时钟树:时钟树描述了时钟系统的层次结构,显示了时钟源如何通过PLL和分频器传递到各个模块。

了解时钟树结构对于调整系统时钟和解决时钟相关问题非常有用。

6. 时钟配置寄存器: STM32芯片具有一系列寄存器,允许程序员配置时钟系统。

这些寄存器包括RCC寄存器(RCC,Reset and Clock Control)等,通过编程这些寄存器,可以设置各种时钟参数。

7. 低功耗模式时钟: STM32芯片支持不同的低功耗模式,如停机模式、待机模式等。

在这些模式下,可以降低系统的功耗,因此时钟系统在这些模式下的配置也需要考虑。

时钟配置通常是在启动代码或初始化过程中完成的,程序员可以通过修改相应的寄存器来调整时钟设置以满足应用的需求。

对于具体的时钟配置和使用,建议查阅STMicroelectronics提供的芯片手册和相关文档。

STM32单片机的5个时钟源解析

STM32单片机的5个时钟源解析

a。HSI
b。HSE
c。PLL
3. RTC的时钟来源
a。LSE
b。LSI
c。LSE的128分频
4.独立看门狗IWDGCLK的时钟来源
LSI
B的时钟USBCLK的来源
最大频率为48MHz
PLL经过预分频器产生1或1.5分频
6.内部时钟输出MCO,为STM32芯片的一个引脚PA8
a。SYSCLK
b。HSI
c。HSE
d。PLL时钟的2分频
7. APB1总线的时钟,最大到36M
8. APB2总线的时钟,最大到72M
APB,APB1,APB2为外设提供时钟
所有时钟都有时钟使能,只有时钟打开时外设才能使用。
对于时钟的配置
见《STM32中文参考手册》
三。系统时钟系统初始化重要函数
SystemInit();
STM32单片机的5个时钟源解析
一。时钟系统框图讲解
1. STM32的5个时钟源
a。高速内部时钟HSI,大约为8MHz
b。高速外部时钟HSE,晶振取值范围在4M--16M,一般采用8M晶振
c。低速外部时钟LSE,32.768k晶振,可以作为RTC的时钟源
d。低速内部时钟LSI,大约为40KHz
e。PLL锁相环时钟
四。系统时钟配置调用函数
RCC_HSE_Configuration();
注意:在使能任何一个时钟的时候,要等待时钟稳定后才能继续。
BLX R0
LDR R0,=__main //再执行main()函数
BX R0
ENDP
该函数默认定义系统时钟为72MHz
#defineSYSCLK_FREQ_72MHz 72000000

STM32系统时钟配置

STM32系统时钟配置

STM32系统时钟配置STM32 在使用不同时钟晶振时,需要对系统时钟进行配置。

下面以16MHz晶振产生72MHz时钟为例进行说明。

由于STM32可进行整数倍倍频,及可选是否2分频。

因而选用16MHz 晶振时,先2分频,再倍频9倍,即可倍频为72MHz。

①查找SystemInit() 函数,即系统时钟设置:图1②进入 SetSysClockTo72() 函数,如果要设置其他频率,进入对应的频率即可,如SetSysClockTo48()。

③参考 STM32中文参考手册的6.3.2时钟配置寄存器(RCC_CFGR)。

如“位17PLLXTPRE ” 所述:HSE分频器作为PLL输入(HSE divider for PLL entry)由软件置’1’或清’0’来分频HSE后作为PLL输入时钟。

只能在关闭PLL时才能写入此位。

0:HSE不分频1:HSE 2分频因而,RCC_CFGR 寄存器的位17 应置“1”。

④如图2红色框中所示,RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9|RCC_CFGR_PLLXTPRE);添加红色字部分即可完成2分频,则可将16MHz的时钟分频为8MHz。

其实,查找RCC_CFGR_PLLXTPRE宏定义可知:#define RCC_CFGR_PLLXTPRE ((uint32_t)0x00020000)实际上就是将位 17置1。

而RCC_CFGR_PLLMULL9中的9即是倍频倍数。

(8*9=72 MHz)图2⑤如图3所示,全局查找72000000(按住Ctrl+Shift+F,输入72000000),找到SYSCLK_FREQ_72MHz 的宏定义,将其注释取消。

STM32时钟分频因子

STM32时钟分频因子

STM32时钟分频因子就是定时器频率的分频数值。

不过预分频是时钟输入定时器之前分频,分频则是使用输出时候分频。

不做精确的PPG和步进电机控制的话,区别不大都是分频用的预分频是时钟输入定时器之前分频,分频则是使用输出时候分频时钟分频因子,配置死区时间时用到 .无关的话:关于TIM的时钟分频因子Clock division 是什么,他的作用是什么。

网上找了很多解释,说的人更加一头雾水!于是自己研究,先看其定义时钟分频因子的定义:官方参考手册P377页TIM1和TIM8的时钟控制寄存器(TIMX_CR1)的第9:8位是这样定义的This bit-field indicates the division ratio between the timer clock (CK_INT) frequency and the dead-time and sampling clock (tDTS)used by the dead-time generators and the digital filters (ETR, TIx),00: tDTS=tCK_INT01: tDTS=2*tCK_INT10: tDTS=4*tCK_INT11: Reserved, do not program this value翻译过来就是:这两个位指示(设定)了分割比率(分频率)在:定时器时钟频率,死区,用于死区发生器的采样时钟,数字滤波器之间。

定义的理解:*简单的说就是分频因子是通过对CK_INT的分割来确定tDTS的!*分频因子只是分频的手段,它的目的就是得到tDTS!*而tDTS主要用于,死区用于死区发生器的采样时钟和数字滤波器,也就是它要作用于这三个东西上。

*我们再来看它的结果(就是设定了这两位引发的结果),只有一个就是给出了tDTS的值。

好多人不理解就出在这个问题上,tDTS是什么呢,它其实就是一个时间值,这个值会用于下面说的三个地方。

stm32时钟概念

stm32时钟概念

stm32时钟概念
在STM32微控制器中,时钟是控制系统时序和同步的重要元件。

时钟通过提供时钟信号来驱动计时器、外设和处理器核心等,实现数据传输和操作的同步。

STM32微控制器使用了多种类型的时钟,包括系统时钟、高
速外设时钟、低速外设时钟和RTC(实时时钟)时钟。

以下
是对每种时钟的概念的简要描述:
1. 系统时钟:
系统时钟(SYSCLK)是微控制器所有部分的主时钟源,它
控制处理器核心以及许多外设的运行。

系统时钟的频率可以通过配置寄存器来选择,通常是通过增加倍频器或分频器来实现。

2. 高速外设时钟(HCLK):
高速外设时钟是系统时钟分频得到的一个时钟,它驱动一些
对实时性要求较高的外设,例如DMA(直接内存访问控制器)和GPIO(通用输入/输出端口)等。

3. 低速外设时钟(PCLK):
低速外设时钟也是通过系统时钟分频得到的一个时钟,它驱
动一些低速外设,如USART(通用异步收发传输器)和I2C (串行通信接口)等。

4. RTC时钟:
RTC时钟是由外部低速晶体振荡器提供的时钟,用于实时时钟和日历功能。

它通常用于实现计时、日期和闹钟等功能。

时钟源的选择和设置可以通过微控制器的时钟控制寄存器来完成,这些寄存器提供了配置时钟的选项。

根据具体的应用需求,可以选择不同的时钟源和频率来优化系统性能和功耗。

STM32的各种时钟系统的应用解析

STM32的各种时钟系统的应用解析

STM32的各种时钟系统的应用解析时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32。

重要的时钟:PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚;1、HSI:高速内部时钟信号STM32单片机内带的时钟(8M频率)精度较差2、HSE:高速外部时钟信号精度高来源(1)HSE外部晶体/陶瓷谐振器(晶振)(2)HSE用户外部时钟3、LSE:低速外部晶体32.768kHz 主要提供一个精确的时钟源一般作为RTC时钟使用在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

①、HSI是高速内部时钟,RC振荡器,频率为8MHz。

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

③、LSI是低速内部时钟,RC振荡器,频率为40kHz。

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

⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。

倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。

另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。

RTC的时钟源通过RTCSEL[1:0]来选择。

STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。

该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。

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

STM32全部时钟概述

STM32全部时钟概述

STM32时钟概述:
HSE:high speed external clock signal,高速外部时钟,最常用8M无源晶振,可以2分频或不分频,一般不分频,为8M。

HS I:high speed internal clock signal,高速内部时钟,8M,有温漂。

PLL时钟源:来源于HSE或者HSI/2,一般选HSE为时钟源。

PLLCLK时钟:通过设置PLL的倍频因子,对PLL时钟源进行倍频,倍频因子为:2-16。

一般设为9,则PLLCLK为72M。

(72M为官方推荐的稳定时钟源)。

SYSCLK:系统时钟,可来源于HSE、HSI、PLLCLK,一般设置SYSCLK=PLLCLK=72Mhz。

HCLK:AHB总线时钟(也有的说APB总线时钟),可分频,一般不分频,即HCLK=SYSCLK=72M。

PCLK2:APB2总线时钟,由HCLK经过APB2预分频器得到,一般1分频,PCLK2=HCLK=72M。

PCLK1:APB1总线时钟,由HCLK经过APB1预分频器得到,一般2分频,PCLK1=HCLK/2=36M。

RTC时钟:来源于HSE/128、LSE、LSI(一般40KHZ),独立的看门狗时钟由LSI提供。

MCO时钟输出:由PA8复用所得,可以对外提供时钟,可以检查所配置好的时钟(结合示波器使用),可来源于PLLCLK/2 SYSCLK HSE HSI。

STM32时钟配置方法详解

STM32时钟配置方法详解

STM32时钟配置方法详解STM32是意法半导体(STMicroelectronics)公司推出的一系列32位Flash微控制器,被广泛应用于各种嵌入式系统中。

时钟是STM32微控制器的核心部分,正确配置时钟可以确保系统正常工作并达到预期的性能。

本文将详细介绍STM32时钟配置的方法。

1.时钟源:STM32微控制器提供了多个时钟源,包括内部时钟(HSI、LSI)和外部时钟(HSE、LSE)。

其中,HSI(高速内部时钟)是一个高频率(通常为8MHz)的内部RC振荡器,适用于低功耗应用;LSI(低速内部时钟)是一个低频率(通常为40kHz)的内部RC振荡器,用于RTC(实时时钟)模块;HSE(高速外部时钟)是一个外接的高频晶振,用于提供更精确的时钟信号;LSE(低速外部时钟)是一个外接的低频晶振,适用于RTC模块。

2.主频和系统时钟:主频是指CPU的时钟频率,系统时钟是指STM32微控制器的总线时钟,包括AHB(高性能总线)、APB1(低速外设总线)和APB2(高速外设总线)。

在进行STM32时钟配置之前,需要按照以下几个步骤来完成。

1.启用对应的时钟源:根据具体需求,选择合适的时钟源并启用相应的时钟。

可以通过设置RCC_CR寄存器和RCC_APB1ENR/RCC_APB2ENR寄存器来实现。

例如,要使用HSE作为时钟源,需要首先启用HSE时钟。

2.配置时钟分频器:为了使系统时钟不超过芯片规格要求的最大频率,需要对时钟进行分频。

分频器有两个,即AHB分频器和APB分频器。

可以通过设置RCC_CFGR寄存器来实现。

例如,将AHB分频器设置为8,将APB1和APB2分频器分别设置为4,可以将主频分别分频为8MHz、32MHz和64MHz。

3.等待时钟稳定:当启用外部时钟源时,需要等待时钟稳定。

可以通过读取RCC_CR寄存器的特定标志位来判断时钟是否稳定。

4. 配置Flash存储器的延时:根据主频的不同,需要设置Flash存储器的访问延时,以确保正常读写数据。

stm32:系统时钟

stm32:系统时钟

stm32:系统时钟实验4 系统时钟实验上⼀章,我们介绍了STM32 内部系统滴答定时器,该滴答定时器产⽣的延时⾮常精确。

在本章中,我们将⾃定义RCC系统时钟,通过改变其倍频与分频实现延时时间变化,实现LED灯闪烁效果。

通过本章的学习,你将了解 RCC系统时钟的使⽤。

本章分为以下学习⽬标:1、了解 STM32 的系统构架。

2、了解 STM32 的时钟构架。

3、了解 RCC 时钟的操作步骤。

1.1 STM32 的系统构架STM32 的时钟⽐较复杂,它可以选择多种时钟源,也可以选择不⼀样的时钟频率,⽽且在系统总线上⾯,每条系统的时钟选择都是有差异的。

所以想要清楚的了解 STM32 的时钟分配,我们先来了解⼀下 STM32 的系统构架是什么样的。

从上图我们知道,RCC 时钟输出时钟出来,然后经过 AHB 系统总线,分别分配给其他外设时钟,⽽不⼀样的外设,是先挂在不⼀样的桥上的。

⽐如: ADC1、ADC2、 SPI1、GPIO 等都是挂在 APB2 上⾯,⽽有些是挂在 APB1上⾯,所以,虽然它们都是从 RCC 获取的时钟,但是它们的频率有时候是不⼀样的。

1.2 STM32 的时钟树STM32 单⽚机上电之后,系统默认是⽤的时钟是单⽚机内部的⾼速晶振时钟,⽽这个晶振容易受到温度的影响,所以晶振跳动的时候不是有⼀定的影响,所以⼀般开发使⽤的时候都是使⽤外部晶振,⽽且单⽚机刚启动的时候,它的时钟频率是 8MHZ,⽽STM32 时钟的最⾼频率是 72MHZ,所以单⽚机⼀般开机之后运⾏的程序是切换时钟来源,并设置时钟频率。

⼤家可能有点疑惑,在第⼀章到第三章之中,我们并没有看到单⽚机开机之后设置时钟来源和时钟频率的。

其实在使⽤库函数的时候,其实在库函数启动⽂件⾥⾯,是帮助我们把时钟频率设置到 72MHZ 了。

⼤家可以打开⼀个库函数⼯程,在 system_stm32f10x.c 的第 106⾏,它定义了⼀个 SYSCLK_FREQ_72MHz:#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* #define SYSCLK_FREQ_HSE HSE_VALUE */#define SYSCLK_FREQ_24MHz 24000000#else#define SYSCLK_FREQ_72MHz 72000000然后在下⾯的程序中,根据这个 SYSCLK_FREQ_72MHz 定义,它默认设置成72MHZ。

如何理解STM32系统时钟和分频

如何理解STM32系统时钟和分频
在我的系统里,把时钟值打印信息如下:
SYSCLK:0x44aa200 //72000000,72MHz
HCLK:0x44aa200 //72000000,72MHz
PCLK1:0x2255100 //36000000,36MHz
PCLK2:0x44aa200 //72000000,72MHz
ADCCLK:0x2255100 //36000000,36MHz
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//Enables the specified TIM interrupts.
这段配置原本以为定时时间是2s,实际只有1s。看了手册才理解原因。扩展阅读STM32学习之RCC时钟配置
// ARR=2000,1s/1000 * 2000 = 2s.
tim2_InitStruct.TIM_Prescaler = 36000-1;
tim2_InitStruct.TIM_Period = 2000-1;
tim2_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
tim2_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
tim2_InitStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2,tim2_InitStruct);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
CFGR寄存器的SWS段也说明:PLL输出作为系统时钟。
TIM2使用PCLK1,但注意时钟树里有这一段
见附图
已知APB1 prescaler=2,故TIM2CLK = PCLK1*2 = 72MHz.

stm32几种时钟控制介绍,含原理图

stm32几种时钟控制介绍,含原理图

stm32几种时钟控制介绍,含原理图本文提到的有以下内容:• 时钟系统与总线矩阵• SysTick系统定时器• RTC实时时钟• 看门狗定时器• 通用定时器一、时钟系统与总线矩阵stm32F4的时钟树如下图所示:在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

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

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

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

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

PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。

倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

我们在学习51单片机的时候,其内部是没有晶振的,而stm32是有的。

stm32可以通过RCC(时钟控制寄存器)对时钟进行参数配置以及使能。

我们还可以通过修改system_stm32f4xx.c文件,来配置上述时钟树上的一些分频、倍频参数,得到理想的频率。

在单片机系统中,CPU和总线以及外设的时钟设置是非常重要的,因为没有时钟就没有时序,组合电路需要好好理解清楚。

我们先来看一下总线矩阵。

片上总线标准种类繁多,而由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。

AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。

二者分别适用于高速与相对低速设备的连接。

一般性的时钟设置需要先考虑系统时钟的来源,是内部RC还是外部晶振还是外部的振荡器,是否需要PLL。

然后考虑内部总线和外部总线,最后考虑外设的时钟信号。

遵从先倍频作为CPU时钟,然后在由内向外分频,下级迁就上级的原则。

stm32 时钟频率函数

stm32 时钟频率函数

stm32 时钟频率函数STM32微控制器中的时钟频率设置是非常重要的,它直接影响着微控制器的运行速度和功能的稳定性。

在使用STM32系列微控制器开发应用程序时,我们需要了解如何正确地配置和管理时钟频率。

1.时钟系统概述在STM32微控制器中,时钟被用来驱动各种外设和内部模块,如CPU、外设总线、GPIO、ADC、UART等。

微控制器一般由一个或多个时钟源驱动,根据具体的型号和配置可能有不同的时钟源。

主要的时钟源包括:-外部晶振:通过外部晶振提供稳定的时钟信号。

-内部振荡器:通过内部的晶振或RC振荡器提供时钟信号。

- PLL锁相环:通过多倍频或分频的方式生成更高精度的时钟信号。

时钟源经过各种分频、倍频等操作后,最终形成各个外设和系统模块需要的时钟频率。

2.时钟树结构STM32微控制器的时钟系统是由多个时钟源和各种时钟分频器组成的树状结构,这就是所谓的“时钟树”。

时钟树结构可以分为三个主要部分:- RCC寄存器:主要用于配置和控制各种时钟源和时钟分频器。

-时钟源:包括主要时钟源和辅助时钟源,例如外部晶振、内部振荡器等。

-时钟分频器:用于将时钟源的频率分频得到其他模块所需的时钟频率。

时钟树结构如下图所示:```┌───────────────┐│ ││ │┌────────▼─────────┐ ││RCC寄存器(时钟源)│ │└────────▲─────────┘ ││ ││ │┌──────────▼──────────┐ ││时钟源│ │└──────────┬──────────┘ ││ ││ │┌──────────────▼───────────────┐│时钟分频器和倍频器│└─────────────────────────────┘```3.时钟频率配置STM32的时钟频率配置主要通过对RCC(Reset and Clock Control)寄存器的配置完成。

RCC寄存器控制着时钟源的选择和各个时钟分频器的设置。

STM32时钟配置方法详解

STM32时钟配置方法详解

STM32时钟配置方法详解时钟树是STM32微控制器中一系列时钟源和时钟分频器的组成部分。

时钟树包括系统时钟、外设时钟和内核时钟。

系统时钟用于驱动整个微控制器系统的核心,外设时钟用于驱动各种外设,内核时钟用于驱动CPU的运算。

在进行时钟配置之前,首先需要了解系统所需的时钟频率。

在STM32中,系统时钟可以通过多种方式进行配置,例如使用外部晶体、外部时钟、内部RC振荡器或者PLL(锁相环)等方式。

外部晶体是一种常用的时钟源,可以提供高精度的时钟频率。

在使用外部晶体时,首先需要设置PLL的时钟源为外部晶体,并设置PLL输入除频器的分频系数。

然后,再根据系统所需的时钟频率,设置PLL的倍频系数,以得到最终的系统时钟频率。

外部时钟是从外部提供的时钟信号,一般用于测试和调试。

使用外部时钟时,需要设置PLL的时钟源为外部时钟,并设置PLL的倍频系数,以得到所需的系统时钟频率。

内部RC振荡器是一种低成本的时钟源,但是其频率不如外部晶体稳定和精确。

在使用内部RC振荡器时,需要设置PLL的时钟源为内部RC振荡器,并设置PLL的倍频系数,以得到所需的系统时钟频率。

PLL是一种用于产生稳定高频时钟的电路,可以从一个低频时钟源产生一个高频时钟源。

使用PLL时,需要设置其输入时钟源和倍频系数。

系统时钟的分频系数可以通过RCC_CFGR寄存器进行设置。

RCC_CFGR寄存器的各个位域用于配置系统时钟的分频系数,包括分频因子、APB1的分频系数、APB2的分频系数等。

外设时钟是用于驱动外设的时钟,可以由系统时钟分频得到。

外设时钟的分频系数可以通过RCC_CFGR寄存器及各个外设的控制寄存器进行设置。

内核时钟是用于驱动CPU的运算的时钟。

在STM32微控制器中,CPU 时钟可以由系统时钟分频得到,分频系数可以通过RCC_CFGR寄存器和FLASH_ACR寄存器进行设置。

除了上述方法之外,STM32还可以使用时钟配置工具进行时钟配置。

stm32的时钟电路的工作原理

stm32的时钟电路的工作原理

STM32的时钟电路工作原理
一、时钟源
STM32的时钟源主要来自于内部振荡器(HSI)和外部晶振(HSE)。

HSI是高速内部振荡器,可以提供一个高精度的时钟信号,但是它的频率受到MCU内部结构的影响,通常不太稳定。

而HSE是高速外部振荡器,由一个外部晶振提供时钟信号,其频率稳定且精度高。

二、时钟分频
STM32的时钟分频器可以将时钟源的频率降低到MCU可以接受的频率。

分频器可以配置为不同的分频值,从而得到不同的时钟频率。

例如,如果HSE的频率为8MHz,经过8分频后,可以得到1MHz 的时钟频率。

三、时钟监控系统
STM32的时钟监控系统可以监控MCU的时钟系统状态。

如果系统检测到内部振荡器或外部晶振停止工作,监控系统会立即重启或切换到其他可用源。

这可以保证MCU在时钟源出现故障时仍然能够正
常工作。

四、RTC(实时时钟)
RTC是STM32中一个重要的功能模块,它使用一个独立的低速内部振荡器(LSI)作为时钟源,以确保时间的准确性和稳定性。

RTC 可以提供秒、分、时、日、周、月、年的时间信息,并且具有闰年补偿功能。

此外,RTC还可以提供一个可编程的闹钟功能,用于定时唤醒MCU。

总结起来,STM32的时钟电路由多个部分组成,包括时钟源、时钟分频、时钟监控系统和RTC。

这些部分协同工作,确保MCU具有准确和稳定的时钟信号,并能够正常工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PCLK1:0x2255100 //36000000, 36MHz PCLK2:0x44aa200 //72000000, 72MHz ADCCLK:0x2255100 //36000000,36MHz RCC->CFGR:0x001D040A //PLL 输出作为系统时钟 可推测几个预分频值为 AHB prescaler = 1 APB1 prescaler = 2 APB2 prescaler = 1 ADC prescaler = 2 根据读取 RCC->CFGR 寄存器值为:0x001D040A,上面推测完全正确。 CFGR 寄存器的 SWS 段也说明:PLL 输出作为系统时钟。 TIM2 使用 PCLK1,但注意时钟树里有这一段 见附图
高手带你理解 STM32 系统时钟和分频
首先来手册里的一段话。 三种不同的时钟源可被用来驱动系统时钟 (SYSCLK) - HSI 振荡器时钟 - HSE 振荡器时钟 - PLL 时钟 一般用的是 PLL 时钟,后面有证据。 我们可以通过库函数获取各时钟值 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) 在我的系统里,把时钟值打印信息如下: SYSCLK:0x44aa200 //72000000, 72MHz HCLK:0x44aa200 //72000000, 72MHz
已知 APB1 prescaler=2,故 TIM2CLK = PCLK1*2 = 72MHz. 所以被 TIM2 分频的时钟大小是 72MHz。 我的程序也证明了这点 TIM_TimeBaseInitTypeDef tim2_InitStruct; TIM_DeInit(TIM2); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//Enable Timer2 clock. NVIC_ConfigurationForTimer2(); // PCLK1=36MHz, PSC=36000-1, CK_CNT=36MHz/(PSC+1)=1000 // ARR=2000, 1s/1000 * 2000 = 2s.
tim2_InitStruct.TIM_Prescaler = 36000-1; tim2_InitStruct.TIM_Period = 2000-1; tim2_InitStruct.TIM_CounterMode = TIM_CounterMode_Up; tim2_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1; tim2_InitStruct.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &tim2_InitStruct); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//Enables the specified TIM interrupts. 这段配置原本以为定时时间是 2s,实际只有 1s。看了手册才理解原因。

相关文档
最新文档