赞
踩
STM32 有很多系列,可以满足市场的各种需求,从内核上分有 Cortex-M0、M3、M4和 M7 这几种,每个内核又大概分为主流、高性能和低功耗。
用HAL库配置请看:STM32H7时钟树分析— HAL库配置(二)
F1 代表了基础型,基于Cortex-M3 内核,主频为 72MHZ,F4 代表了高性能,基于 Cortex-M4 内核,主频 180M,F7 代表了高性能,基于 Cortex-M7 内核,主频 216M。H7 代表了超高性能,基于 Cortex-M7 内核,主频400M
我们今天说的就STM32H7超高性能系列的这个MCU
如果您是初学者的话,建议先看下这篇,会对时钟树有一个基本的认识
【STM32】系统时钟RCC详解(超详细,超全面)
首先我们来看下H7的时钟树,乍一看很大,比F1多了太多东西,那我们仔细看,发现也还是很多,别担心,那么接下来我将带你了解下整体的时钟树原理以及各个模块的分析。
因为整体框图太大,所以我们把他分成几部分来分析,首先看下外部输入的时钟源:
STM32H7共有6个外部时钟源,分别是:
LSI 属于 STM32H7 内部低速时钟源,频率约为 32Khz。
LSE 则是外部低速时钟源,常用为 32.768Khz(使用 32.768Khz 晶振或陶瓷谐振器生成)
HSE 是外部高速时钟,正常我们都用HSE来作为系统时钟输入,常用25Mhz的外部晶振。
HSI 是内部高速时钟,频率为 64Mhz;
CSI 是低功耗内部时钟,频率为 4Mhz;
时钟安全系统,也就是监控系统,H7的HSE和LSE两个外部时钟源带有安全监控,一旦使能后,如果 HSE 或LSE启动失败,系统时钟将切换到 HSI。如果使能了中断的话,将进入不可屏蔽中断 NMI。
HSI48 是内部高精度时钟源,频率为 48Mhz;
好的,通过上述的介绍,你应该明白了H7的几大时钟源,那么这些时钟源后续要被用在哪里,我们再来分析
上半部紫罗兰色框的部分,就是独立看门狗 (IWDG) 和 RTC时钟/自动唤醒单元 (AWU)
独立看门狗 (IWDG)只能由LSI 提供
RTC和AWU可以由LSE LSE 和 HSE的1M分频来作为时钟源
PLL(Phase Locked Loop): 为锁相回路或锁相环。总体上起到晶振频率倍频的作用,为系统高速率运行提高必要条件。
VCO(voltage-controlled oscillator):压控振荡器,是PLL 里的一个构成部件
STM32H7一共有三个PLL锁相环:
PLL的输入时钟源为refx_ck,并且为 PLL 提供的参考时钟的频率 (refx_ck) 必须介于 1 MHz 到 16 MHz 范围内
其中HSI CSI HSE三个时钟源可以作为输入,然后经过PLL时钟源选择器PLLSRC,该选择器主要选择使用哪一个振荡器作为时钟源,再经过DIVMx分频得到1 MHz 到 16 MHz 的时钟频率,我们一般选择 PLL 时钟源来自 hse_ck,一般为 25Mhz
DIVMx:PLLx时钟源预分频器,用于对PLLSRC选择的时钟源进行分频,取值范围是:2~63
PLL1 锁相环,该 PLL 主要用到两路输出:pll1_p_ck 和 pll1_q_ck,其中:pll1_p_ck一般用于 sys_ck 系统时钟的时钟源,最终作为 CPU、SysTick、AXI、AHB1~4 和 APB1~4 等的时钟源;而 pll1_q_ck 则可以通过 PKSU 选择作为部分外设的内核时钟(perx_ker_ck),如 FMC、QSPI、SDMMC1/2 等,至于图中的 pll1_r_ck,并没有用到。
这里以 pll1_p_ck为例,简单介绍下 PLL 输出频率的计算公式(时钟 PLL 输入频率为 hse_ck):
假设外部晶振为 25Mhz,我们需要得到 400Mhz 的 pll1_p_ck 频率来作为系统时钟,则可以设置:DIVM1=5,DIVN1=160,DIVP1=2 即可
PLL2和PLL3跟PLL1类似,这里我们不再赘述。
系统复位后,会自动将 HSI 选作系统时钟,并且所有 PLL 均将关闭。 ,也就是每次系统复位,都会用HSI作为系统时钟,当系统稳定后,可以配置好 PLL1 ,将系统时钟可以切换为 plll1_q_ck(400Mhz),以得到最高性能
当时钟源用于系统时钟时,软件无法关闭所选时钟源,也就是系统时钟软件无法禁止
下面我们来对系统时钟的生成做一个详细的介绍:
上图主要列出了 STM32H743 系统时钟的生成原理,包括 CPU 时钟、SysTick 时钟、AXI时钟、AHB1~4 和 APB1~4 等,这些时钟对整个系统运行来说非常重要,图中,D1、D2 和 D3 域是 ST 为了支持动态能效管理,所设计的 3 个独立的电源域,每个域都能独立开启/关闭。系统时钟由 SCGU 产生,然后经过 SCEU 做开关,最终输出到各个时钟域(D1、D2 和 D3),从而能够控制和访问各类外设,保证系统的正常运行。
两个时钟输出 (MCO) 引脚可供使用,分别为 MCO1 和 MCO2。可以为每个输出选择一个时钟源。
SCEU :用于控制外设的访问时钟(访问寄存器)
PKEU: 用于控制外设的内核时钟(生成控制时序,如波特率等)
并不是所有的外设都需要用到 PKEU,因为有些外设并不需要生成时序,没有所谓的外设内核时钟,比如 DMA、OPAMP 等,这些外设只需要在SCEU 进行使能即可
下图是详细的外设时钟使能框图
上半部分的SCGU跟SCEU已经讲过,这里我们只说下下半部分:
这里推荐一张STM32H7 的数据手册里面非常棒的框图(在数据手册里面检索 Figure 1 就可以找到),可以对H7的整体架构有一个直观的了解,可以看到每个外设所挂的总线,和各个总线的最大时钟频率。
AHB (Advanced High-performance Bus) 高级高性能总线
APB (Advanced Peripheral Bus) 高级外围总线
AXI (Advanced eXtensible Interface) 高级可拓展接口
AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
APB主要用在低速且低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。
AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。
这些内容加起来就定义出一套为了高性能SoC而设计的片上通信的标准。
比如你可以看到SYSCLK(Hz) = 400MHz (CPU Clock) 也就知道上述CPU框图初的错误
可以看到CPU外挂了一个 64bit的 AXI BUS 还有一个32bit的 AHB BUS
FLASH FMC QSPI 这些都是在AXI总线上的
常用的 TIM UART SPI IIC挂在AHB总线上
64位的AXI总线又分出了一个32位的 AHB4 等等
右下角的是时钟的框图,可以看到RTC时钟 看门狗时钟
可以看到HSE的时钟是4-48Mhz 然后给APB4总线外挂 经过三个PLL锁相环 再做外部输出
再比如200Mhz的AHB4经过分频生成了APB4最高位100Mhz
还有下面的总线系统框架
可以很清楚的看到外设共分为三个域:D1 Domain,D2 Domain 和 D3 Domain。
◆ D1 Domain
D1 域中的各个外设是挂在 64 位 AXI 总线组成 6*7 的矩阵上。
6 个从接口端 ASIB1 到 ASIB6
7 个主接口端 AMIB1 到 AMIB7
◆ D2 Domain
D2 域的各个外设是挂在 32 位 AHB 总线组成 10*9 的矩阵上。
10 个从接口外接的主控是 D1-to-D2 AHB 总线,AHBP 总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1 和 USB HS2。
9 个主接口外接的从设备是 SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和 D2-to-D3 AHB 总线。
◆ D3 Domain
D3 域的各个外设是挂在 32 位 AHB 总线组成 3*2 的矩阵上。
用HAL库配置请看:STM32H7时钟树分析— HAL库配置(二)
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。