STM32时钟树

目录

一、什么是时钟树

二、时钟频率和时钟树

三、STM32F10x系统时钟SYSCLK

[1. 高速内部时钟(HSI)](#1. 高速内部时钟(HSI))

[2. 高速外部时钟(HSE)](#2. 高速外部时钟(HSE))

[3. 低速内部时钟(LSI)](#3. 低速内部时钟(LSI))

[4. 低速外部时钟(LSE)](#4. 低速外部时钟(LSE))

四、启动文件中的SystemInit函数


一、什么是时钟树

时钟就好比单片机的心跳,时钟信号通常是一种特定频率的方波,是所有模块的工作同步节拍,所有外设必须按照节拍器的节奏同步工作,否则会出现混乱。

时钟不仅能用于提供同步,还是CPU以及其他外设模块运行的关键。在这些模块中有着一系列的基本电路:触发器、寄存器、ALU、控制器等。时钟信号进入CPU后首先是给到了触发器,然后由触发器向下游的寄存器、控制器等其他电路输出信号,引起下游电路工作。

简单总结一下:时钟信号有两个方面的作用:

1.触发电路工作

2.保证同步性

二、时钟频率和时钟树

时钟频率

时钟频率往往指的是晶振每秒震动的次数,比如一个晶振为1MHz,那么一秒钟内时钟信号就有1M次变化(高低电平变化)。而从上面的图中我们可以看到,CPU在时钟信号下读取指令并运行。换句话说时钟频率越高,CPU从falsh读取指令的速率越快,性能也就越高。当然,这也不是唯一因素。比如CPU的ALU运行也是需要时间的,且现代CPU有一些优化手段,使得不同架构但是相同频率的时钟的CPU性能也会大大不同。

时钟周期

时钟周期是时钟频率的倒数。他是计算机执行指令的最基本时间单元,因为所有的处理器都需要根据时钟进行运算。

机器周期

机器周期是CPU执行一条指令所需的时间。往往是多个时钟周期组成。这是因为CPU执行一条指令往往需要多个步骤:读取指令、指令解析、指令执行运算等,而一个时钟周期只能让一个小模块运作起来,所以一个完整的指令执行需要多个时钟周期。在现代处理器架构中,不同架构执行一条指令所需要的时钟周期都不相同。

时钟树:

STM32芯片有许多的外设,但是每一个外设所需要的时钟频率不尽相同,但是我们的晶振只能产生一种频率的时钟信号,所以需要对该信号进行分频、倍频处理,然后通过时钟线(如APB1、AHB等)传递给不同外设。

时钟线错综复杂,但是一定是分支结构的,就好像树的树枝一样,所以称为时钟树。

三、STM32F10x系统时钟SYSCLK

STM32F10的四种主要时钟源包括:高速内部时钟(HSI)、高速外部时钟(HSE)、低速内部时钟(LSI)和低速外部时钟(LSE)。以下是对这四种时钟的详细讲解:

1. 高速内部时钟(HSI)

  • 来源:HSI是STM32F10内部集成的RC振荡器产生的时钟信号。
  • 频率:通常为8MHz,但可以通过PLL(锁相环)进行倍频以提高系统时钟频率。
  • 特点:HSI时钟在芯片上电后即可立即使用,无需外部元件,适用于对时钟精度要求不高的场合。
  • 应用:常用于系统启动时的默认时钟源,以及在HSE不可用时的备用时钟源。

2. 高速外部时钟(HSE)

  • 来源:HSE是外部提供的时钟信号,通常通过晶体振荡器或陶瓷谐振器产生。
  • 频率:HSE的频率范围通常为4MHz至16MHz,具体频率取决于所使用的外部晶体或谐振器。
  • 特点:HSE时钟具有较高的精度和稳定性,适用于对时钟精度要求较高的应用。
  • 应用:常作为系统时钟的主要来源,通过PLL倍频后提供给CPU和其他高速外设使用。

3. 低速内部时钟(LSI)

  • 来源:LSI是STM32F10内部集成的另一个RC振荡器产生的时钟信号,专门用于低功耗模式下的时钟需求。
  • 频率:通常为40kHz左右,具体频率可能因芯片型号和工艺而异。
  • 特点:LSI时钟的精度较低,但功耗也相对较低,适用于对时钟精度要求不高但需要低功耗的场合。
  • 应用:常用于独立看门狗(IWDG)和RTC(实时时钟)的时钟源,以及在低功耗模式下维持系统基本功能的时钟需求。

4. 低速外部时钟(LSE)

  • 来源:LSE是外部提供的低速时钟信号,通常通过32.768kHz的晶体振荡器产生。
  • 频率:固定为32.768kHz,这是为了与RTC的计时需求相匹配。
  • 特点:LSE时钟具有极高的精度和稳定性,适用于需要精确计时的应用。
  • 应用:专门用于RTC的时钟源,提供精确的时间基准,以实现日历、闹钟和定时功能。

为了减少功耗,STM32上默认只会开启核心部分的时钟。如果你需要使用一些外设,首先就要开启外设时钟(连接电路到时钟树中)。

简图如下:

刚刚我们看了SYSCLK时钟的由来,下面我们再来看看产生了SYSCLK后,又发生了什么?又有哪些模块挂载到AHB总线上?

(1)USB时钟和I2S2、SDIO、FMSC可以看到是挂载在AHB预分频器之前的,,这种方式能让这些核心外设和AHB总线时钟解耦,减少了时钟信号之间的潜在冲突,使得USB等时钟能够保持稳定。

(2)内核时钟HCLK可以看到是直接挂载到AHB总线上的,因为其时钟频率越高,性能越好,自然是要使用STM32能提供的最高时钟频率。

(3)APB2和APB1往往是需要经过AHB时钟分频得到的。APB2和APB3作为微控制器的外设总线,它们连接的外设种类和数量可能不同。某些外设可能需要更高的时钟频率以实现更快速的数据传输或处理,而另一些外设则可能不需要那么高的频率。因此,系统设计时会根据外设的需求来分配不同的时钟频率。

四、启动文件中的SystemInit函数

在system_stm32f10x.h文件中可以看到他有以下两个函数,这两个函数都是用来配置时钟的。其中第一个是会在启动文件中自动调用的,而第二个则需要用户在运行过程中如果切换了时钟分频(如9分配变为不分频)、或者切换了时钟源(如从HSI变为HSE)之后,SystemCoreClock这个变量的值可能不再准确,需要调用第二个函数更新该变量。(该变量会被一些库函数使用,用于计算时间间隔,如果时钟不准确,其行为难以预测)

如果需要自己手动配置SYSCLK等,还是一件比较复杂的事情,需要查阅文档后谨慎操作,好在ST公司提供的启动文件已经帮我们做好了。

相关推荐
国科安芯13 分钟前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
茯苓gao2 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉5 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者6 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间7 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious7 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng11 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计12 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
kebidaixu12 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片详解
stm32
kebidaixu13 小时前
两轮车换电 BMS 的模拟前端中颖 SH367306 AFE 芯片调试实录:四个关键问题与解决方案
stm32