
14.1 初学者重要提示, \# i8 Q( G/ t/ s: T 1、 电源管理部分涉及到的各种低功耗方式会在后面章节中为大家讲解,当前阶段仅需了解低功耗属于电源管理部分即可。 2、 电源管理部分最繁琐的就是CPU,D1,D2,D3域的各种运行,待机,停机状态切换,这部分知识点也放在后面低功耗章节学习。' N: M! [3 H+ g3 g# N - @* f! J5 M* }- o 14.2 电源 电源是系统稳定运行的根本,主要分为以下几个知识点,电源供电、供电监控、电源管理和低功耗。当前阶段主要了解电源供电和硬件上电时序。4 L6 ]* Z/ u; J# l6 c 14.2.1 电源供电& B/ a7 J% r1 l) G8 e1 Q7 F 学习STM32H7的电源供电,往往被一堆电源标识Vdd,Vdda,Vcap,Vss等搞迷糊,这些标识整明白了,电源供电部分也就理解了,首先看下面的框图:3 y/ H5 k+ o- ]4 z% s' ?. S5 [/ m ![]() / K; H" J& T, b 这些常用标识的解释如下:: j( l: E4 T# m0 i" l+ W# Y ( ^! D( J$ E4 v7 U% h ![]() 对于电源供电部分了解了这些知识点就够用。# x$ u& J* W6 C! k9 C; Z* m- p ( G0 E! N* U" r& J, p' ~ 14.2.2 系统上电启动 系统上电到程序开始运行期间,H7都做哪些工作,一张时序图可以说明问题: ![]() 对于上面的截图,主要看Operating mode部分,依次是Power down –> Reset -> Wait Oscillator ->HW system init -> Run -> Wait ACTVOS RDY –> Run,即断电状态 -> 复位状态 -> 等待HSI就绪->硬件初始化 -> 运行 -> 等ACTVOS位就绪 -> 正式运行。 ' O4 M! ~- q. v) v+ P9 l8 e, n 详细些的执行流程如下:5 t% T1 D9 o p. r8 e # G' Y8 ?8 ? q 当系统上电后,POR(Power on reset 上电复位)会检测VDD供电,当VDD大于POR设置的阀值时,将使能电压稳压器,注意看VDD那条线的变化。" o5 Z2 h% ]# {% ~8 P 看VCORE那条曲线,只要VOSRDY未就绪,就会一直处于复位状态。 一旦VCORE正常输出,系统将走出复位状态,内部高速RC振荡器HSI将使能。2 w! C) h1 ~2 v+ v6 N$ h HSI稳定后,将开始系统初始化,主要是Flash和可选字节的加载,这些都是由硬件完成的,CPU也将以受限的方式运行(主要是指不允许对RAM进行写操作)。" [) l% H0 h6 f8 p: g/ _! t8 T 软件程序初始化系统,包括供电配置。当供电配置完成后,等待ACTVOSRDY位置1,完成置1后,CPU就进入正常的运行的模式,允许读写RAM了。0 b' Y( t: v0 f8 j 14.2.3 电源管理 b, P' b6 ?" V 关于电源管理部分,H7参考手册中讲解的还挺复杂的,当前阶段我们仅需了解几个重要的工作状态即可,看到这几个单词了要认识,因为官方文档中多处要用这几个标识。 为了实现各种低功耗模式,CPU和D1,D2,D3域支持的各种模式如下: ~& {$ {" C) A CPU模式 CRun:运行状态,CPU和CPU子系统外设正常运行。6 D, o0 N0 G( B* Z0 G1 d 8 y/ k' Y- R! w, u CSleep:休眠状态,CPU时钟停止运行,CPU子系统外设正常运行。; v! N/ G2 ?) u9 V( }' Y " `, |3 Y( N( w& l: ? CStop:停止状态,CPU和CPU子系统外设都停止运行。/ g9 ]! ^% O) }) Z9 ?- P D1域模式$ k m. a, _9 S" n9 r3 B DRun:运行状态,D1域的总线矩阵正常运行,CPU子系统运行在CRun或者CSleep模式。) V& Y A% U1 [! y& z DStop:停机状态,D1域的总线矩阵时钟停止运行,CPU子系统运行在CStop模式,PDDS_D1位选择DStop模式。 - x+ t. G8 N j8 n* t DStandby:待机状态,D1域的总线矩阵断电,CPU子系统运行在CStop模式,PDDS_D1位选择DStandby模式。 D2域模式 DRun:运行状态,D2域的总线矩阵正常运行,CPU子系统在D2域中有分配的外设,CPU子系统运行在CRun或者CSleep模式。+ @9 c4 m$ b/ D 3 f7 k7 Z4 O$ [ g5 c6 E- t# A5 v DStop:停机状态,D2域的总线矩阵时钟停止运行,CPU子系统没有在D2域分配外设,PDDS_D1位选择DStop模式。或者CPU子系统在D2域中有分配的外设,CPU子系统运行在CStop模式,PDDS_D1位选择DStop模式。' l) u: E7 v: l4 V- ~* R DStandby:待机状态,D2域的总线矩阵断电,CPU子系统没有在D2域分配外设,PDDS_D1位选择DStandby模式。或者CPU子系统在D2域中有分配的外设,CPU子系统运行在CStop模式,PDDS_D1位选择DStandby模式。9 ~) U& b, ]2 c$ k) Y6 F ' Q9 `8 c+ V; _& z3 L1 s: \0 S 系统/D3域模式 Run:运行状态,系统时钟和D3域总线矩阵时钟处于运行状态。CPU子系统处于CRun和CSleep模式,或者一个唤醒信号处于激活状态。 ' e" t! D1 \0 m Stop:停止状态,系统时钟和D3域总线矩阵时钟处于停止状态,CPU子系统处于CStop模式。所有的唤醒信号都处于非激活状态,并且至少某个域的一个PDDS_Dn位选择了Stop模式。# D1 o- O/ T" n. w% U9 D P7 j + V& H5 j9 u7 M- I# }# r% o3 f Standby:待机状态,系统处于断电状态,CPU子系统处于CStop模式,所有的唤醒信号都处于非激活状态,并且所有域的所有PDDS_Dn位选择Standby模式。 / Q1 n1 A! Y2 C9 \7 [( f [ 14.2.4 电源去耦电容的选择6 P* p$ p8 |) T3 n5 b 每个电源对 (VDD/VSS, VDDA/VSSA ...)必须使用下述的滤波陶瓷电容去耦。这些电容必须尽量靠近芯片引脚,以确保器件正常工作。不建议去掉滤波电容来降低PCB 尺寸或成本,这可能导致器件工作不正常。 8 F* U5 R' h* b) c9 b0 i1 f3 S 3 }1 Z. g& j4 | 14.3 硬件复位 所有数字计算机系统都是由某种形式的震荡时钟电路驱动的。这种电路被称为系统的“脉搏”,是系统正确运行的关键。如果振荡器失灵,系统将完全无法运行,如果振荡器运行不规律,系统执行的所有与时间有关的计算都会有误差。 : w5 s4 s+ Z7 Y, z0 e( A 所有微控制器的启动流程都不通用。由于硬件的复杂性,必须运行一段由厂家定义的短小的“复位程序”来使硬件处于一种正确的状态,然后再开始执行用户程序。运行这个复位程序需要时间并且要求微控制器的振荡器已经运行。 1 y% d/ p; p! z/ V# g 当系统由可靠的电源供电时,一旦通电,电源迅速地达到额定输出电压,一旦断电,电源迅速地下降到0V,并且在接通的时候,电压不会降低。这时能够可靠地使用基于一个电容和一个电阻的低成本硬件复位。这种形式的复位电路称为阻容复位。1 k$ x- ]* `2 q \$ z3 n/ @0 F , H* H& \. c. v7 T& {. M- j+ l 如果电源不够可靠,而涉及安全性,这种简单的阻容解决方案就不合适了。4 E+ b, @% G( X* G ; R+ W8 ]! y8 ^0 @2 T3 \. W 14.3.1 上电复位和手动复位4 _4 X1 _; c( W0 C4 t STM32H7开发板的硬件复位原理图如下: ![]() + f; |* F/ \) U0 `1 Y( j8 p STM32这款CPU的复位引脚是低电平有效,即NRST为低电平时,CPU处于复位状态。' c0 x, \, V) X R173单的RC复位电路。当系统上电瞬间,C114电容两端电压可以认为是0,CPU处于复位状态。3.3V电源通过R173给C114充电,当C114的电压升到CPU的高电平门槛电压时,CPU退出复位状态转入运行状态。7 I1 |1 c0 L V2 d" Z 在设计电路时,需要选择适当的R值和C值,以保证NRST低电平持续时间满足CPU复位最小脉宽的要求。 当按下S4轻触开关时,C114两端被短路接地,可实现手动复位CPU。 . z9 v1 [5 Y: e$ N) j! X' h 14.3.2 复位序列6 G3 G4 B$ G' ]; c; M 前面第11章的13.3.1小节讲解了复位系列的相关知识,再结合本章节的上电复位和下电复位,大家会对其有一个较全面的认识,更多复位序列的知识直接看13.3.1小节即可。 * U" t. |; {. z' r# R8 R8 w 14.4 软件复位9 M0 ?* B- T9 d0 z4 E 除了上电和手动复位,程序设计设置中还经常要用到软件复位,即调用一条函数就可以实现复位功能。此函数已经由CMSIS软件包中的core_cm7.h文件提供,函数如下:" a7 {% N$ c4 l9 b% j 3 U. Z1 f9 i z& ~' @) x
软件复位反映到实际硬件上,就是给硬件复位部分发一个复位信号:& p X+ o& }' P - G$ ~* }4 ]7 {# {- O& ~ ![]() * x1 _0 {& J" X# @0 r7 m 14.5 RCC时钟控制 STM32H7有如下六种时钟可供使用:9 d" R' W& K5 z: E+ e+ H ! r- A. `! }" \$ | HSI (High-speed internal oscillator) : HSI是内部的高速RC振荡器,频率64MHz,可被用于系统时钟。优势是低成本,无需外部时钟,快速启动(仅需几个微秒),缺点是精度差,即使经过校准。 ( V: Q" I% H$ k' h$ ? HSE (High-speed external oscillator): HSE是外部的高速振荡器,通过外接时钟源,有源或者无源晶振驱动,时钟范围4-48MHz。优势是精度高,缺点是增加成本。8 r5 L9 q" f, T/ ~5 \! Y: c $ k" _# q* I Q* ^3 x LSE (Low-speed external oscillator) LSE是外部的低速振荡器,通过外接时钟源,有源或者无源晶振驱动,一般接32.768KHz,主要用于RTC实时时钟。 - r( w7 u6 k% M6 B LSI (Low-speed internal oscillator)& x5 u: s! C7 z* h LSI是内部的低速RC振荡器,频率约是32KHz,主要用于独立看门狗和自动唤醒,也可以用于RTC实时时钟。 # R6 _! L+ W' Z8 q7 @: s CSI (Low-power internal oscillator). O: G1 i. d. q2 z- m! [7 P CSI是内部的低速振荡器,频率约是4MHz,相比64MHz的HSI,主要用于低功耗。 " s% i; w% i* t& p( A HSI48 (High-speed 48 MHz internal oscillator) HSI48是内部高速振荡器,频率约是48MHz,用于给特定的外设提供时钟,比如USB。 通过下面的时钟树再进一步的认识这几个时钟:5 y* z: x% m4 K- i) I/ _& G5 L * l6 j0 @2 F' i: Z# M! t& P ![]() 14.5.1 HSE和LSE硬件设计 HSE时钟 当前V7开发板是用的25MHz晶振为HSE提供时钟,硬件设计如下: ![]() # N- K# X& R+ _& u$ \" T 晶振和负载电容需要尽可能近地靠近H7的晶振引脚,以减小输出失真和启动稳定时间。负载电容值必须根据选定的晶振进行调节。; \0 V2 _; G$ Y5 q. J% m& P, M$ [: Y " K" P0 L3 d, a- @ 对于C15和C17,我们推荐使用高质量陶瓷电容,这种电容是设计用于需要高频率的场合,并且可以满足晶体或谐振器的需求。C15和C17通常具有相同的值。1 V! l8 P1 Z- O3 G7 Y/ E! ~+ P , S9 T0 z) V/ H1 Y) N% n' d6 r$ B 这里再额外补充一个知识点,HSE旁路时钟和外置晶振区别:当前V7板子是采用的外置晶振模式,高速外部 (HSE) 时钟可以使用一个4到48MHz 的晶振 / 陶瓷谐振振荡器产生:3 V" z1 u9 ]: `0 m$ {; E ! i' o8 P4 K6 n ![]() 4 a" w$ i5 D' H 而bypass 旁路的意思就是不使用它,绕过它。具体到HSE旁路的话,用户直接提供4-50MHz的时钟源即可,可以使用有源晶振或者FPGA提供时钟等方式: ![]() 9 K2 J. G* a1 \" c# b' ~- @ LSE时钟 当前V7开发板是用的32768Hz晶振为LSE提供时钟,硬件设计如下: ![]() 6 Y% S2 T0 \- ^2 Y6 M' I/ i 14.5.2 时钟配置 STM32H7开发板使用的外部晶振频率是25MHz,下面分步说明如何让其通过这个频率工作到400MHz的主频。 % u# i( ? [! S) [9 i3 Z. B 第1步:在stm32h7xx_hal_conf.h文件配置HSE_VALUE# I! a4 ~1 M& U" j- N 配置的大小要跟板子的实际晶振大小匹配。/ p5 Q8 @1 M3 x4 {5 y6 K( c
第2步:系统上电后,在启动文件startup_stm32h743xx.s的复位中断服务程序里面会调用函数SystemInit。
以往STM32F1和STM32F4系列都会在函数SystemInit里面配置PLL锁相环,使用了HAL后,需要在main函数里面配置。当前SystemInit函数实现的功能如下:& K% a+ p1 e: C5 b) m
第12行:使能FPU单元。 第16 – 59行:复位RCC相关寄存器。0 |! k% U1 u. ]% i$ C- k* W 0 o5 C5 k3 Z* @! I3 d' u, V- k 第69 – 73行:设置中断向量表的位置。 6 z4 k+ ?) R' j: }6 w* y/ k. L3 j" F 第3步:在main函数的外设驱动初始化函数里面完成时钟初始化,主要是PLL锁相环,让芯片最终工作到400MHz。. | i* e$ T# a l' ~& Y 14.6 总结 本章节就为大家讲解这么多,本章节的知识点相对比较多,比较杂,不容易一下子都掌握了。随着后面章节的进行,还会深入的讲解这些知识点。 9 h% _! P: N- H9 f" c" o |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明
实战经验 | 关于STM32H745的MC SDK电机控制工程问题的解决办法
【H745I GUI】1.GreenHouse 灯光控制