第3章 STM32H7整体把控 初学STM32H7一定要优先整体把控芯片的框架,不要急于了解单个外设的功能。3.1 初学者重要提示 学习一款新的芯片,优先掌握系统框架是比较重要的,建议逐渐养成这种学习习惯,然后各个击破即可。 本章节提供了多张STM32H7的框图,这些框图都非常具有代表性。很多时候记忆知识点比较费脑子,记录这些框图是一种非常好的方式。 对于本章节提供的部分知识点,无法理解透彻,暂时没有关系。随着后面的深入学习,基本都可以掌握。7 W9 T2 u9 q2 U) `3 \' A; a* K; u 重要的MPU和Cache知识分别放在了第23章和第24章。 3.2 STM32H7硬件框图) G, \- ]9 N" K( d- j" u 学习一款新的芯片,需要优先了解一下它的整体功能设计。需要的资料主要是来自官网和数据手册,比如我们V7开发板使用的STM32H743XIH6,直接在官方地址:链接(这是超链接)就可以看到对此芯片所做的介绍,页面中有一个如下的框图,对于了解STM32H7整体设计非常方便。4 ^! ]7 n2 J5 d7 N+ z" R 6 o' [4 s" h! a6 x9 `; m9 G Y 3.3 STM32H7各个型号的区别 涉及到芯片选型的时候,需要大家了解各个型号的区别。对此ST有一个专门的文件STM32H7x3 MCUs High-performance line,在链接(这是一个超链接)里面可以找到。此文件里面有简单的对比,只是内容比较简单,仅两页,不过也言简意赅。最主要的是下面的这个截图:5 F" _) }. J# F* W) c ; ?1 d# H/ R6 y2 y+ g 5 `& ~& }$ ~$ i0 q; _) X 需要了解更详细的对比信息,可以看数据手册。任意下载一个型号的数据手册,在数据手册的的Table 2里面有详细的对比,如下图所示(部分截图):7 S/ E- z# T* r$ ~+ h! A. D2 d 8 [, q1 ^$ I/ O+ ?/ F$ d 3.4 STM32H7总线框图和时钟; T2 K* D' q( X% \. g STM32H7的数据手册里面提供了一张非常棒的框图,大家可以方便地查看每个总线的时钟速度和这个总线所挂的外设。这个在大家配置外设时钟分频的时候还是非常有用的,因为外设的时钟分频就是建立在所挂的总线速度(大家直接在数据手册里面检索Figure 1就可以找到)。8 `6 p% e* p- u$ O# \1 A6 l SYSCLK(Hz) = 400000000 (CPU Clock). x* @& _: z/ v/ T! S: j HCLK(Hz) = 200000000 (AXI and AHBs Clock)) C8 @% K% A, F, ?/ t4 t. I1 K } AHB Prescaler = 2 D1 APB3 Prescaler = 2 (APB3 Clock 100MHz)+ A7 A! O; u! V |' M/ l3 i0 d D2 APB1 Prescaler = 2 (APB1 Clock 100MHz)0 x4 |3 `$ t4 h+ Q* i D2 APB2 Prescaler = 2 (APB2 Clock 100MHz)6 t& V( n; y6 I6 r7 Y3 c D3 APB4 Prescaler = 2 (APB4 Clock 100MHz) 2 ^9 ]4 l# D, P( f+ c 因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = APB1 x 2 = 200MHz; 因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = APB2 x 2 = 200MHz;- @& E7 J4 g$ B" w6 O& @ - H+ S& W" m" t5 q) t$ I 8 E, ?1 Q1 c& V+ Z APB4上面的TIMxCLK没有分频,所以就是100MHz;( x* B& D- N9 f1 g& @! i APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1 APB2 定时器有 TIM1, TIM8 , TIM15, TIM16,TIM17; X" V4 ]+ Q8 {4 }# P p; D' `& l APB4 定时器有 LPTIM2,LPTIM3,LPTIM4,LPTIM5 ) g8 g+ Z& ~% D; Y$ I7 x 3.5 STM32H7的A**线 A**线在STM32H7中有着举足轻重的作用。高并发性全靠这个总线了,先来看下A**线的框架:4 R# z. d" G" U4 J , @5 a7 E+ c- d' N" ~1 _/ E2 h+ T, J 3.5.1 总线系统框架 下面这个截图比较有代表性,可以帮助大家理解STM32H7总线系统。5 l1 B6 y' ]. ^% s& S$ x 1 {( u1 ?# O3 V, p$ ?" E# a D1 Domain+ G( u) y+ C! W; \ R" i5 E D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。+ V# [7 I( m% m' } # s& O3 E2 Z4 Z/ g- r5 X' Y7 x6 X T 6个从接口端ASIB1到ASIB6 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。 6 m: b0 m( c6 D" {3 b. c 1 p8 B( c5 n: K* o 7个主接口端AMIB1到AMIB75 c B; ]7 _6 E b4 B$ L( c 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。 : C a8 t- B) x$ ~4 J0 d L o % I9 u2 d4 x$ g" m0 f* {2 B D2 Domain5 M; G0 ]( Y) `+ n: J D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。 10个从接口/ {5 q; N9 q- P* h 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。$ b8 x) C+ ]) o0 r4 x2 q- F , o% e- _0 q+ [0 G3 V 9个主接口0 w7 J4 ?! q; L1 b 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB2,APB3,D2-to-D1 AHB总线和D2-to-D3 AHB总线。 1 k* r7 g- w$ k; I7 _$ \ D3 Domain7 m6 W; E% }; B8 l+ ^$ Z" i ( x9 z; @9 {& Z5 y * \3 ^* K0 v. H D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。 8 {7 d/ W3 D- O; o) u 1 }+ u2 I' n# S3 f5 Q 3个从接口: V+ @' h" Z% d+ ~: o( O8 g: [ 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。) S7 ^; [' ~) G/ u4 F2 Q 2个主接口 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线。4 Q* v; z$ U8 Z! g$ ]& {! o* \ + A4 O" E$ m$ U( R, f 这三个域之间也是有互联的,可以是: 0 n/ g( \6 Z/ x7 o) w ( e+ r6 k# C1 k5 g D1域到D2域的D1-to-D2 AHB bus0 k# f- {- z: f 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D1域里面的DMA2D访问D2域里面的SRAM1。! A/ B4 S4 \! a : {& s7 N! i) O1 M& r! Z# @ ; k b8 s0 q7 [5 C0 U D2域到D1域的D2-to-D1 AHB bus 允许D2域中的主接口外设访问D1域里面的从接口外设。比如D2域里面的DMA2访问D1域里面的AXI SRAM。- M% c' g$ d( u 2 }+ i" x4 |' |9 [ [. h2 Y% b D1域到D3域的D1-to-D3 AHB bus 允许D1域中的主接口外设访问D3域里面的从接口外设。比如D1域里面的DMA2D访问D3域里面的SRAM4。 D2域到D3域的D2-to-D3 AHB bus。 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D2域里面的DMA2访问D3域里面的SRAM4。! m' Q N- I) @1 i $ w) S: _9 o2 j. `+ x 有了这些知识后,下面我们重点了解A**线矩阵。 # A; x, h- z7 e, s( C 3.5.2 A**线特色 AXI支持高频率、高性能的系统设计: & }9 |7 H/ K# F* o 支持高带宽,低延迟设计。 提供高频操作,无需复杂的总线桥。 满足各种组件的接口需求。 适用于具有高初始访问延迟的内存控制器。7 V3 L: Y. Y4 a 为互连架构的实现提供了灵活性。 与现有的AHB和APB接口向后兼容。. T- j' \( S l# B g A**线的关键特性: 独立的地址、控制和数据线。. L+ A. v! d( E- o% k 支持非字节对齐方式传输。 基于起始地址的突发传输。" y+ p& C; b/ n c6 D I 分开的读和写数据通道,且提供DMA传输。- c6 _ Z- x( }; a0 z 支持发起多个地址。 支持无序传输。2 g; Z# a2 d6 I l! J% G 允许添加寄存器,以提供时序收敛。. e+ Q E5 p$ w- y$ j& q0 { - V" a% S1 x ]! s+ g( c A**线 J: I, j: M& h 关于A**线,ARM有一篇古文观止级文档《AXI4_specification》,已经将其放在了论坛:http://www.armbbs.cn/forum.php?mod=viewthread&tid=87340 。 . R/ i3 p0 ^, S6 e : ]; h# q+ z2 M: B: K" y1 @2 a/ U! l9 w 3.5.3 A**线简介* f; G9 O P. J' W% Q 通过下面的框图,我们再进一步的认识一下A**线。- y& T/ l6 ?, l: O2 D9 J' D 5 V4 S' ~7 J- S2 {! z6 w; y 针对从接口ASIBs,描述如下: 7 F. z# Y/ f3 s5 [4 v! Z 针对主控接口AMIBs,描述如下: % V% s4 O* L/ }* E; S7 l 3.5.4 A**线优先级编程 B T2 W$ F4 M/ C 由于存在多个ASIB从接口访问AMIB主控的问题,这就涉及到谁先谁后等问题。所以A**线矩阵就做了一个基于优先级的仲裁方案。每个ASIB接口支持读通道和写通道分别设置,优先级从0到15。数值越大,优先级越高,默认情况都是优先级0。如果有两个传输同时到达AMIB主控接口,那么优先级高的ASIB接口传输优先处理;如果优先级相同的话,根据LUR方案选择(least recently-used最近最少使用情况)。2 Z6 j* p! [* z, `6 K# o" A! n) w 大家在实际应用中,可以根据实际情况进行设置,一般情况下使用默认值即可。 i/ |. ?: P2 R& [/ e& k) } 2 ]: P. |3 v, y# w 3.6 STM32H7的总线互联 STM32H7的总线矩阵四通八达,但不是任意Bus Master总线主控端和Bus Slave设备端都可以相互通信的:; g, C3 l0 o. \ $ q3 J' n. S9 M: y 访问通路(每个小方块里面的字符) & ~" r5 |; o. \& `4 X, ?, ~ 任何有数字的表示有访问通路。 4 N/ |4 Q: j% U/ }. z# l; r ) u$ O# I# b" E5 d1 \ 短横杠“-”表示不可访问。 f! M2 \- t, q% J3 L ~ 3 X. E3 E8 @& \ 有灰色阴影的表示有实用价值的访问通路。3 `" S- E+ }! i4 `5 E) D 表格中具体数值所代表的含义 - c4 R$ i$ w: e/ G0 z* Z J8 ^0 b4 {7 h$ r$ o D=direct s. b$ |. Y. f# y$ t H/ t6 i ! J8 r" Q8 V# l7 W- r0 ]* ~2 b; I " E, c) u$ f: j- c6 o 1=via AXI bus matrix : [$ h0 [" A' V7 H . c7 h7 J. t* y. T9 ~$ ?8 O0 M0 P 2=via AHB bus matrix in D21 b$ O. \) `; e; }3 L& S2 d9 r + D& [, i0 [: y9 ~# W! N# D 3=via AHB bus matrix in D3 * G9 C0 I4 n& q$ E 4=via AHB/APB bridge in D1 0 y% U3 i7 f8 Y 5=via AHB/APB bridge in D24 @- \* `5 g, J7 @ 7 R! a: f! _* c9 b 6=via AHB/APB bridge in D3, u+ W& b; `7 P0 T1 h 2 S, O3 Y2 O( V- z 7=via AHBS bus of Cortex-M70 r, F9 c; ?- t! J, K1 y 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。1 t# T- h( T/ t7 r ! Q8 f: c1 u! B4 k& Q" \ & q8 `% d* {+ x6 d3 H2 B# C: a 总线访问类型. Z4 P j8 Y8 h3 D# K& j* f& [ 2 h O% y8 p+ h% g 普通字体表示32位总线。 / b0 C, D# E8 Y8 g0 p5 j8 E: k : A B3 e; Q( @( T, a 斜体表示32位总线主机端/ 64位总线从机端。 粗体表示64位总线。 [, u0 v- Q; V7 ? 当前要对这个图有个了解,后面章节讲解各个外设的时候要用到,比如DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。 & z# p$ T# B: ~, q6 x3 g) a 3.7 STM32H7的FLASH 首次学习STM32H7,要掌握以下几点认识即可:) u6 F4 l' I7 Z 1、双BANK,每个BANK的带宽都是64bits,如下图所示: + g$ e2 D* c% Z H7中已经没有F1和F4系列中的ART Chrome加速,通过H7中的Cache加速即可。具体延迟数值和主频关系如下:! b8 }5 l6 b' z# d6 [' _+ n% Q % s8 A" E+ i$ X* _ F 3、Flash编程操作(写)最好以256bits为单位进行,应用中也可以小于256bits,但是容易造成ECC校验出问题,所以不推荐。Flash读操作支持64bits,32bits,16bits和8bits。) g v& D- D R 8 A5 Q3 V+ {6 \3 r4 H 4、Flash支持ECC校验,每256bits配10bit的ECC位,可以检测到1个bit并纠正或者检测2个bit。随着芯片的制造工艺水平越高,带电粒子能产生的位翻转就越多,此时的ECC是必须要有的,一般可以纠正1-2个bit。安全等级高的Flash类存储器和RAM类都是必须要带ECC的。! g. f! c' H I4 C , r/ A& K, K3 \1 w. Y ECC相关知识。$ g1 K% _( m- D" J9 } 7 ?4 }" ]$ L: P+ N: h 3.8 STM32H7的RAM6 t6 I. i; |3 V' X: {- z) D (注,学习本小节,优先回顾本章节3.5.1小节的框图,另外H7的RAM区也是支持硬件ECC的) . a: ^1 X6 P( D2 i STM32H7的RAM区分为好几个部分,下面分别进行说明:9 T8 ^; h$ m! h7 C6 T $ T# I$ y7 D# }. Y! [! X 3 h, X: @: e( x5 s) |9 B. k7 g TCM区 9 w# Z7 b4 h7 X% X$ G/ F& E' K& w TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。 速度:400MHz。 DTCM地址:0x2000 0000,大小128KB。 ITCM地址:0x0000 0000,大小64KB。 & P# t1 w* w4 S% u+ C AXI SRAM区' n6 p# q2 q! A3 c/ b* [9 R3 I 3 _4 a1 v! X8 i% u+ _1 v# D 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。 1 Z' i" k, M/ ?) q 速度:200MHz。 . Y: L" J# i4 x8 f$ L : Y0 d# P" U" `/ S; S 地址:0x2400 0000,大小512KB。 ( U2 g3 [' y+ c5 Y, q, m 3 w$ z c& d# X3 k9 D0 P+ q3 c G4 J 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 9 o0 y4 Z8 {4 Z6 Y- @: t+ H SRAM1,SRAM2和SRAM3区 7 @) ?0 e, Y f( \+ V 9 Y) k4 E) L, f- U# a7 u: b0 C9 z 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。+ H0 Z( j' q- @ u( M1 a* ^6 H " z- @- _1 T7 o/ z( W* H ~- ~ 速度:200MHz。 ! T! Z' L, v' @' n# p- Z SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。, G8 @7 u% p* Z5 \# `2 A 8 z' U M9 ~' P% b SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 $ l; [% t$ J" o/ }' J4 e% B' ] SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。- R6 e- _1 }) o4 X3 X9 ] ) J V9 X* y) D" b" k SRAM4区& A+ [0 Y6 B3 Q% s+ A7 H: f ) P8 T; r4 r/ Z$ i3 I 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。( x) C; r+ d, j 速度:200MHz。+ }! U' Z/ s) h6 }& L& J/ H& v |0 J/ q, B( y 地址:0x3800 0000,大小64KB。4 F5 b) {* `% G2 e, F + d" y( o7 |' l$ g; z / N" g; i5 j( ~1 Z- i 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。% h" P Y/ t- g8 Q Backup SRAM区 9 R, `; a, ]6 ~) f$ [# ] 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。4 B' @5 {: f2 U3 q) `& t- N/ G; P 6 O' p/ W! J- A2 D; V 速度:200MHz。* l+ `: k1 Y- O9 I: S : D* ~% D; A$ z- R 地址:0x3880 0000,大小4KB。 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。# e. }' d9 Q, s9 a ( b- p! X$ M' C8 ` 3.9 总结 本章节就为大家讲解这么多,让大家对STM32H7有个整体的认识,后面章节将逐个进行学习。 / Y0 n+ b8 i4 N9 r |
【经验分享】STM32_H7_ADC
STM32H7R/S高性能MCU:安全性,大存储和优异图显赋能更多应用创新
Stm32H7XX GCC下分散加载实现
【银杏科技ARM+FPGA双核心应用】STM32H7系列10——ADC
DIY-STM32H750核心板
[nucleo-H7A3ZI-Q]1-点亮一个皮皮灯
DIY-STM32H743核心板
【银杏科技ARM+FPGA双核心应用】STM32H7系列57——MDK_FLM
1月10日有奖直播 | 基于STM32 的CODESYS智能自动化解决方案
STM32的CAN FD位定时设置注意事项