STMCU小助手
发布时间:2021-10-27 23:18
|
3.1 初学者重要提示+ q; g @' [" n o% @' h, K 学习一款新的芯片,优先掌握系统框架是比较重要的,建议逐渐养成这种学习习惯,然后各个击破即可。 本章节提供了多张STM32H7的框图,这些框图都非常具有代表性。很多时候记忆知识点比较费脑子,记录这些框图是一种非常好的方式。 对于本章节提供的部分知识点,无法理解透彻,暂时没有关系。随着后面的深入学习,基本都可以掌握。 重要的MPU和Cache知识分别放在了第23章和第24章。 3.2 STM32H7硬件框图 学习一款新的芯片,需要优先了解一下它的整体功能设计。需要的资料主要是来自官网和数据手册,比如我们V7开发板使用的STM32H743XIH6,直接在官方地址:链接(这是超链接)就可以看到对此芯片所做的介绍,页面中有一个如下的框图,对于了解STM32H7整体设计非常方便。 . D U# o$ ~" l+ c# H( T- Y1 ^+ p
再稍微详细点,就需要大家读页面上的”Key Features”,就是下图所示的内容:% J2 O3 g( t. Y7 P
1 R; g& X4 g1 r( e# W$ Q 或者直接看数据手册开头的章节即可,也进行了介绍,内容基本都是差不多的,如下图所示(部分截图):
通过框图和Key Features,大家可以方便地了解STM32H7的FLASH、RAM大小以及各种自带外设的信息。( F9 j9 e; `, p0 t4 z / ^& D$ d7 B6 B T 3.3 STM32H7各个型号的区别 涉及到芯片选型的时候,需要大家了解各个型号的区别。对此ST有一个专门的文件STM32H7x3 MCUs High-performance line,在链接(这是一个超链接)里面可以找到。此文件里面有简单的对比,只是内容比较简单,仅两页,不过也言简意赅。最主要的是下面的这个截图:, X, }" l `. J2 H+ L8 o
+ i% m# l$ k0 e6 N1 i+ [ J - q5 y/ F: Z: ~ 通过这个截图可以方便地了解不同型号的引脚数、封装、FLASH大小、RAM大小以及是否带HW CRYPTO硬件加密的区别。 K( l& D: o5 @: i! e( f 需要了解更详细的对比信息,可以看数据手册。任意下载一个型号的数据手册,在数据手册的的Table 2里面有详细的对比,如下图所示(部分截图):4 `9 |! B& E! E, C " x l, V3 q/ k$ _9 J( O) t
0 u* Q; v3 O, \7 t8 \1 H0 y 使用ST提供的软件STMCUFinder或者STM32CubeMX也可以做对比,只是没有上面的表格这么方便,可以一目了然。 7 t% M# {; ^0 M# Q 3.4 STM32H7总线框图和时钟/ ~: {; ?. j0 L% _ STM32H7的数据手册里面提供了一张非常棒的框图,大家可以方便地查看每个总线的时钟速度和这个总线所挂的外设。这个在大家配置外设时钟分频的时候还是非常有用的,因为外设的时钟分频就是建立在所挂的总线速度(大家直接在数据手册里面检索Figure 1就可以找到)。 0 y9 u ]: S5 x* S& S
% r6 Z6 s' C9 r T# x; H 比如我们想得到不同定时器的主频,通过上面的框图,可以方便地获得如下信息: , ]3 I, c3 j+ o6 e SYSCLK(Hz) = 400000000 (CPU Clock)1 x3 w2 W9 g2 z4 E' Z2 R6 F HCLK(Hz) = 200000000 (AXI and AHBs Clock)' L% t/ }3 s% p: h4 @ AHB Prescaler = 2 0 J- }4 v6 A1 @. r7 ?. b D1 APB3 Prescaler = 2 (APB3 Clock 100MHz)6 G3 Y# H6 r; d0 q9 l6 i . h0 f7 Q- n) M" @ L B2 ?5 m D2 APB1 Prescaler = 2 (APB1 Clock 100MHz)0 I0 q* r2 X, R4 D7 u ) E- B+ f& b# @) | D2 APB2 Prescaler = 2 (APB2 Clock 100MHz)& w' B; w2 X' g3 n8 _8 P1 K) C D3 APB4 Prescaler = 2 (APB4 Clock 100MHz)0 r6 L @# ]5 f, ~# T 1 z1 p2 a9 {0 v3 q x: z 因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = APB1 x 2 = 200MHz; / Z4 a1 h0 @$ N( n 因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = APB2 x 2 = 200MHz;+ w3 v( b2 w# Q* a8 z( D APB4上面的TIMxCLK没有分频,所以就是100MHz; \8 a2 v0 V. P" M9 @) `2 k APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1( q) } ?* L0 N5 l7 s 0 ~/ r) G D6 s8 X. e APB2 定时器有 TIM1, TIM8 , TIM15, TIM16,TIM17 / d w8 v8 K8 R APB4 定时器有 LPTIM2,LPTIM3,LPTIM4,LPTIM5 1 C! B; B4 k4 s5 L) x' F 3.5 STM32H7的A**线 A**线在STM32H7中有着举足轻重的作用。高并发性全靠这个总线了,先来看下A**线的框架:( J& _4 d" w7 }; x& w! ?4 ?( b ( _. X8 \) ]/ o8 E1 ` 3.5.1 总线系统框架- \0 H# ?2 l _( ~- v% K' G" G 下面这个截图比较有代表性,可以帮助大家理解STM32H7总线系统。9 M2 Y3 I7 {& d7 j $ K. b+ n: Z; X" Q8 S3 x
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。3 \6 C2 u4 ~7 K$ `/ c: y' ^ ' r& c/ w; I' [1 x, {+ X. m) S D1 Domain) b% {% D5 T9 n) Y" Q- ^, a/ X; v+ s, X; ` 0 V( J+ k1 S, ^: X D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。 6个从接口端ASIB1到ASIB62 k8 \% H* {3 K3 r+ r$ T 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。 1 ?) ~. _3 ~7 d; q+ u$ G 7个主接口端AMIB1到AMIB7" W/ p0 k# H. b' |: ? H 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。 . X/ }, R/ u3 O" x D2 Domain1 |, ^8 w d0 C0 Q' M3 B D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。 : I, }. Y; F3 H 10个从接口 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。# V G# a! p6 h$ Z" F& O1 n- U : ]( u2 s! \( x6 |+ q" M 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB2,APB3,D2-to-D1 AHB总线和D2-to-D3 AHB总线。0 z( r; G7 q9 b9 E# V7 U D3 Domain3 R% N: S$ n6 l z * S7 y( r5 B* H' f D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。 ; v. t) X c4 G! k3 q 3个从接口) c$ o. F9 s: u0 R5 }6 z 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。* E X& i5 u- X& A* W; I- J 2个主接口 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线。 ! F8 ]& \. T2 C5 L' v4 B ' R- }) Z1 K; D U% F7 F0 I' P 这三个域之间也是有互联的,可以是:6 F( ]( p+ b |/ w- J) t ) m) @1 j: T U D1域到D2域的D1-to-D2 AHB bus 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D1域里面的DMA2D访问D2域里面的SRAM1。% h( z v! ^. Z! e } 9 q# L$ u. `' { @- S# s# Y D2域到D1域的D2-to-D1 AHB bus" Z5 M+ ]" N7 c7 z 允许D2域中的主接口外设访问D1域里面的从接口外设。比如D2域里面的DMA2访问D1域里面的AXI SRAM。+ I# }) q, }9 L0 [4 C" R4 r* D D1域到D3域的D1-to-D3 AHB bus 允许D1域中的主接口外设访问D3域里面的从接口外设。比如D1域里面的DMA2D访问D3域里面的SRAM4。1 o4 n3 `/ e/ U' \ D2域到D3域的D2-to-D3 AHB bus。 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D2域里面的DMA2访问D3域里面的SRAM4。* g# \/ l) V' ^' f & ^& w% k G" E; I" C9 o # T9 P; Z+ d. D, o" {* q+ e2 u$ E+ X. o 有了这些知识后,下面我们重点了解A**线矩阵。 K ]# w9 T7 S4 Y0 ]+ B8 z 3.5.2 A**线特色$ N8 z. P& K Y5 |, ^2 n+ \6 L" L AXI支持高频率、高性能的系统设计:# a9 D* l: W, @6 r* p, F 支持高带宽,低延迟设计。 提供高频操作,无需复杂的总线桥。 满足各种组件的接口需求。; ]7 @, U2 v5 d/ a: b2 j' K& p 适用于具有高初始访问延迟的内存控制器。 V( b$ C3 t! h" M 为互连架构的实现提供了灵活性。 与现有的AHB和APB接口向后兼容。 . T" R0 Q' S- ^0 X' y- ` A**线的关键特性: . `+ b7 c; w- M4 K# h 独立的地址、控制和数据线。 支持非字节对齐方式传输。% u5 q) r6 q7 k8 m1 B+ E0 f& }: Y 基于起始地址的突发传输。 分开的读和写数据通道,且提供DMA传输。5 J9 @* i$ {; R3 y 支持发起多个地址。 支持无序传输。 允许添加寄存器,以提供时序收敛。 3.5.3 A**线简介% V/ K* `+ s3 z7 ?1 x8 t1 t 通过下面的框图,我们再进一步的认识一下A**线。 ) G# h' O9 W6 W; i) y4 G
通过上面的截图,我们可以看到,A**线有6个从接口ASIBs(AMBA slave interface blocks)和7个主控接口AMIBs(AMBA master interface blocks)。 + ?1 z6 S5 I% d d) y, E 针对从接口ASIBs,描述如下:2 `6 ^5 w0 a. p; ?( G6 S
, @% h/ w# F: v( F 重点注意最后一列,STM32H7参考手册里面原始的描述是R/W issuing,这里将其翻译为读/写发起能力。比如输入通道IN5连接的主控DMA2D,支持的读发起能力是2,写发起能力是1。读发起能力是2该如何理解呢?这里的含义是存在两路读信号同时进行(因为AXI接口有一个FIFO的功能,可供同时进行,更深入的认识有待研究),反映到DMA2D的实际应用中,就是DMA2D同时读取前景色和背景色的缓存区做Alpha融合之类的操作。写操作同理,DMA2D的写发起能力仅支持一路。! F3 v2 \9 ?4 a8 l . @! E5 c. y- r" ]& L; G) i! c 针对主控接口AMIBs,描述如下:
' @; J) Q( t( o" b2 i# c 跟上面表格的含义是一样的,同样重点注意最后一列,这里多了一个总接收能力(Total acceptance),也就是读发起能力和写发起能力同时执行的情况。" Z7 x7 j5 u3 \7 K- u 3.5.4 A**线优先级编程, j! v' P2 s" F 由于存在多个ASIB从接口访问AMIB主控的问题,这就涉及到谁先谁后等问题。所以A**线矩阵就做了一个基于优先级的仲裁方案。每个ASIB接口支持读通道和写通道分别设置,优先级从0到15。数值越大,优先级越高,默认情况都是优先级0。如果有两个传输同时到达AMIB主控接口,那么优先级高的ASIB接口传输优先处理;如果优先级相同的话,根据LUR方案选择(least recently-used最近最少使用情况)。# x4 G- N1 _) s) n' |4 E" } 大家在实际应用中,可以根据实际情况进行设置,一般情况下使用默认值即可。 3.6 STM32H7的总线互联" N, a/ m" P/ m% L STM32H7的总线矩阵四通八达,但不是任意Bus Master总线主控端和Bus Slave设备端都可以相互通信的:" i d# K4 V" F# q \ J
黑色加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。" p, } _ o! G8 z2 |# r2 H ) b; p$ ]6 S, z! G1 R" J% l. T 访问通路(每个小方块里面的字符)! h. o9 s- m Y8 u8 l; [ 任何有数字的表示有访问通路。 短横杠“-”表示不可访问。 有灰色阴影的表示有实用价值的访问通路。 ~/ s: `: K& S% I N/ S' O; q' A$ ~ 表格中具体数值所代表的含义 * k2 K T" g( k5 z9 H# B& S D=direct $ T: Y; j& z! @. c 1=via AXI bus matrix 2=via AHB bus matrix in D24 u8 b2 w5 ?" A 3=via AHB bus matrix in D3 ) E: X, D1 W% k5 m 4=via AHB/APB bridge in D1 + c1 {9 w7 G: L 5=via AHB/APB bridge in D2 6=via AHB/APB bridge in D33 b$ U2 g6 z* Y- y# X & O' l% G; @8 _0 q+ ^ 7=via AHBS bus of Cortex-M7 , w) X+ X* J, Z, H2 C 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。6 y- k# u5 g0 ~* X7 g/ Q: D 总线访问类型0 w) U0 t6 B( M7 O1 V8 i9 k 1 n M$ V9 D4 A$ q; I0 G0 h! p 普通字体表示32位总线。 斜体表示32位总线主机端/ 64位总线从机端。 粗体表示64位总线。 N+ t2 C f3 J+ F% K i 当前要对这个图有个了解,后面章节讲解各个外设的时候要用到,比如DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。/ X& Q' u# R2 [) ?* ?2 R 3.7 STM32H7的FLASH 首次学习STM32H7,要掌握以下几点认识即可:; e% v i1 x7 K " f @ r. m" K" v. f) }. i 1、双BANK,每个BANK的带宽都是64bits,如下图所示:
+ U' F! ~$ @2 D9 {/ T8 P 2、H7中Flash的延迟和主频关系。 H7中已经没有F1和F4系列中的ART Chrome加速,通过H7中的Cache加速即可。具体延迟数值和主频关系如下:
9 d5 F, L$ V0 x; ?9 w4 w+ r/ Y 对于上面的表格,大家可以看到,当延迟等待设置为0的时候,即无等待,单周期访问,速度可以做到70MHz。增加1个Flash周期后,访问速度可以做到140MHz。当增加到3个或4个Flash周期后,最高速度可以做到225MHz。0 w. x( u, Q7 G3 w& x; ^& U 3、Flash编程操作(写)最好以256bits为单位进行,应用中也可以小于256bits,但是容易造成ECC校验出问题,所以不推荐。Flash读操作支持64bits,32bits,16bits和8bits。 8 ]0 o. C9 f. E 4、Flash支持ECC校验,每256bits配10bit的ECC位,可以检测到1个bit并纠正或者检测2个bit。随着芯片的制造工艺水平越高,带电粒子能产生的位翻转就越多,此时的ECC是必须要有的,一般可以纠正1-2个bit。安全等级高的Flash类存储器和RAM类都是必须要带ECC的。% q8 m" T: j: c$ D, `) a- O 3 [8 J) @; L1 N5 @$ K 3.8 STM32H7的RAM4 ~ G9 h6 H% ~) ?6 B (注,学习本小节,优先回顾本章节3.5.1小节的框图,另外H7的RAM区也是支持硬件ECC的) : ?+ F$ K2 s, d9 b& g" G; l3 ` STM32H7的RAM区分为好几个部分,下面分别进行说明:* k0 U0 A' N' B$ ^ TCM区 TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。 速度:400MHz。 DTCM地址:0x2000 0000,大小128KB。 ITCM地址:0x0000 0000,大小64KB。 AXI SRAM区 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。. P- |& K+ [' y 0 q: f) _- H0 `( ?+ k 速度:200MHz。) b! Y+ {( o/ { . i- W- t/ Z7 Z/ j 地址:0x2400 0000,大小512KB。 用途:用途不限,可以用于用户应用数据存储或者LCD显存。0 i. M$ `/ F! y8 l# E! ~% O* }, ~4 | 1 J& [" M. Z& c* O SRAM1,SRAM2和SRAM3区- p% v- m* n8 w$ B+ X. @# L - G& i* V0 `( h! K 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。 / U$ A; ^( p$ D9 R 速度:200MHz。 SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。8 l+ m+ A0 ^9 `% @0 x, P SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 f% `! B" g6 Q# b+ W4 M SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。 8 y! H( H5 ~3 J SRAM4区! n. L9 n. {5 Z0 s' T7 }8 C2 w, h 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。# W' ~( @$ q- y; R. m1 `% g 速度:200MHz。. o+ L6 |2 \' m) L 地址:0x3800 0000,大小64KB。8 W$ p; n+ h/ t; i/ \ |/ {4 s M, ]% r6 D: T/ @' t 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。 Backup SRAM区% h$ H* O. t6 s3 h' o ' |- Q( _7 {' A4 {& G1 Q 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。 , S9 }) O* ~1 i$ _6 o2 _: V3 j+ l 速度:200MHz。 7 ]1 b& F" p# ~ 地址:0x3880 0000,大小4KB。 r! V* t' H6 s* X O 2 {0 B# d3 y) v( f) j 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。 3.9 总结 本章节就为大家讲解这么多,让大家对STM32H7有个整体的认识,后面章节将逐个进行学习。 |
微信公众号
手机版