9-时钟树与时钟源
STM32为什么要提高时钟频率
- **提高处理能力:**更高的时钟频率可以让 STM32 微控制器在更短的时间内执行更多的指令,提升整体计算性能。对于需要快速处理复杂算法或实时响应的应用,如数字信号处理、图像处理或控制系统,高时钟频率能够明显改善性能。
- 提高外设性能:STM32 的外设,如 ADC、UART、SPI 等,其工作速度通常与系统时钟频率相关。提高时钟频率可以让这些外设的最大工作速率更高,适应更高的数据传输需求。
- **减少延迟:**在一些实时系统中,减少任务之间的响应时间非常重要。提高时钟频率可以缩短指令执行的时间,从而降低整体系统的延迟,提高响应速度。
- 支持高带宽通信:对于涉及高速通信协议的应用,例如 USB、以太网、CAN 等,较高的时钟频率有助于提供足够的处理能力来满足高速数据传输的需求。
不过,时钟频率提高也会带来功耗增加的问题。因此,在实际应用中,设计者通常需要在性能和功耗之间做权衡,根据具体需求调整时钟频率。
在前面已经学习了如何设置高速时钟源,在这里复习一下:
1.在System Core 中将RCC中的高速时钟源HSE 改为晶振Crystal/Ceramic Resonator
2.随后来到时钟设置,将HCLK修改为最高频率
本次教程主要是学会看上面这颗时钟树!
会自动寻找配置提升其时钟频率
时钟信号:
时钟信号是电子系统中提供同步操作 的脉冲信号,它为系统中的各个元件提供时间基准 ,使它们能够按照规定的节奏进行操作。由心脏时钟源产生 。又通过"动脉"时钟树传播到整个芯片中。
时钟信号的产生首先依赖于选择合适的时钟源,常见的时钟源包括:
晶振(Crystal Oscillator):使用石英晶体的压电效应,当对晶体施加电压时,晶体会振荡并产生精确的频率。晶振广泛应用于提供高精度的时钟信号。
外部时钟源(External Clock Source):一些系统可能使用外部信号作为时钟源,例如从其他设备提供的时钟信号。常见于同步通信系统。
内部时钟源(Internal RC Oscillator, IRC):一些微控制器具有内置的RC振荡器,利用电阻和电容的充放电时间来产生时钟信号。此类时钟信号不如晶振精确,但对于对时钟精度要求较低的应用,它们提供了经济和简单的时钟方案。
抖动(jitter)是指时钟信号在周期间的波动或不稳定性,它会导致数据传输错误或系统不稳定。
微观上:逻辑电路与寄存器之间的交互需要时钟信号:https://www.bilibili.com/video/BV1ph4y1e7Ey?t=108.2
宏观上:串口的波特率 I2C/SPI的时钟线 定时器的计时 ADC采样间隔都需要有一个精确的时钟脉冲信号,告知这些外设时间的流逝。
时钟树
传递时钟信号的结构
从上面第二部HCLK修改将其
在STM32芯片的内部,有着一个叫做AHB(先进高性能总线)的总线结构,就像是STM32的主干道,STM32芯片中的处理器,内存DMA以及各种外设都连接在这一总线上。通过这一总线经行数据通信,而HCLK就是这AHB总线中的时钟线,前面学的I2C中的SCL也是时钟线
STM32AHB(先进高性能总线)的总线结构
总线结构解析:
在左边部分
分支①:HCLK直接与内存/DMA/处理器相连接, 假设HCLK的频率为72MHz 那么①上也是72MHz
分支②SysTick :系统滴答:由于为我们程序提供一个时间基准hal_delay的延时功能就是靠系统滴答提供的时钟基准
- SysTick 其与HCLK中的连接中多了一个分频器(为频率做除法)有/1 /8两个选项 假设HCLK的频率为72MHz那么SysTick 可选为72/9 MHz
在右边部分 没有直接连接在AHB总线上 而是分门别类的连接到了两个APB总线上 通过桥接器,连接到AHB总线上 两个APB分别连接不同外设如下图:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
APB1总线与AHB总线之间有可选/1 /2 /4 /8 /16的分频器,分频后的信号称之为PCLK1 提供给了除定时器外的其他外设,定时器比较特殊(他需要一个较高的频率),他的前面多了一个倍频器(无法人为设置),用于将频率提升上去 此处若分频器/1 则 倍频器上会自动设为/1 若分频器为/2 /4 /8 /16 则倍频器上会自动设为/2
在APB2总线类似,不同的是ADC需要采集一段时间才能更准确地获取电压值,因而需要其时钟频率慢下来。所以ADC有一个专属的预分频器,
即④⑤⑥⑥⑦⑧的分支:
HCLK的时钟频率来自左边的结构从源头上来说,这颗以HCLK为核心的时钟树的时钟源有两个HSI(高速内部时钟)和HSE(高速外部时钟)
STM32默认使用HSI(高速内部时钟),内置在芯片内部,无需外接电路就可以使用 产生的频率是8MHz主打一个简单方便,但精度相对来说稍微差一点
HSE(高速外部时钟)需要从外部电路接入一种一种叫做"晶振"的器件,晶振内部有石英晶体,可以发出一定频率的脉冲信号 假设其为8MHz,虽然与高速内部时钟的频率相同,但晶振的脉冲精度遥遥领先
我们可以选择HSI或者HSE的其中之一接入到时钟树中,然后接入的这一数值,我称其为系统时钟SysCLK,
系统时钟会经过一个预分频器(有/1 /2 /4 /8.../256) 接入到HCLK中 ,可见其72MHz的频率来自另一个选项 PLL(锁相环)时钟。
PLL(锁相环)在此处起到倍频器的作用,而这个倍频器的输入可以有两个选择即,HSI 和 HSE ,来自HSI的输入前有一个固定大小为/2的分频器,而来自HSE的输入前则有一个可以选择/1 /2的分频器,而PLL锁相环可以X2 X3 X4 ... X16,那么我们就可以选择来自HSE的时钟信号经过/1的分频器 在PLL锁相环X9的作用下就可以得到72MHz的系统时钟频率,而只要AHB预分频器是/1 那么HCLK也就是72MHz了
在分支③中 :
FCLK (自由运行时钟):当我们需要节省电量,需要STM32进入低功耗模式之一的"停止模式"时,AHB总线会停止运行 HCLK,同时HCLK回停止传输时钟脉冲,进而所有连接到AHB总线的外设全部停止运行
而唤醒STM32依靠外部中断 FCLK 频率与HCLK一致,但他的真正来源时AHB的预分频器 ,因而在HCLK停止运行时,FCLK会继续运行,为中断采样提供时钟信号
其他的分支
To FLITFCLK:是Flash编程接口的时钟,它永远来自HSI
USB Prescaler:用于给USB功能提供时钟,来自PLL锁相环。
时钟安全系统:在时钟源是HSE或者经过PLL倍频过的HSE时,既可以选择开启css功能,它可以在HSE发生故障时,立即将时钟源切换回HSI,并且产生中断,让我们可以进行紧急制动灯紧急处理
正常时:
HSE发生故障时:
独立的小时钟树:
时钟源时低速内部时钟LSI与低速外部时钟LSE或者时高速外部时钟的128分频,挂在上面的外设是To RTC(实时时钟)与看门狗To IWDG
上面这一部分是MCO(时钟输出功能) 在基本设置中,勾选Master Clock Output后,PA8就会被设置为RCC_MCO
回到时钟设置就可以选择时钟信号,就可以将其从PA8引脚输出出来,一般不太使用此功能。