STMCU小助手
发布时间:2021-10-19 10:31
|
第3章 STM32H7整体把控 初学STM32H7一定要优先整体把控芯片的框架,不要急于了解单个外设的功能。) |) X9 h& ^- v- J; ni1 Q m" d% S$ } 3.1 初学者重要提示# ` d4 g0 {, }0 a i 学习一款新的芯片,优先掌握系统框架是比较重要的,建议逐渐养成这种学习习惯,然后各个击破即可。 本章节提供了多张STM32H7的框图,这些框图都非常具有代表性。很多时候记忆知识点比较费脑子,记录这些框图是一种非常好的方式。 对于本章节提供的部分知识点,无法理解透彻,暂时没有关系。随着后面的深入学习,基本都可以掌握。+ [ a$ t2 _; R 重要的MPU和Cache知识分别放在了第23章和第24章。 3.2 STM32H7硬件框图 学习一款新的芯片,需要优先了解一下它的整体功能设计。需要的资料主要是来自官网和数据手册,比如我们V7开发板使用的STM32H743XIH6,直接在官方地址:链接(这是超链接)就可以看到对此芯片所做的介绍,页面中有一个如下的框图,对于了解STM32H7整体设计非常方便。
, x1 |2 F2 F( r$ }* y- ?5 |: I5 L 4 J) M$ z. ^( B1 ~& C1 g5 { 3.3 STM32H7各个型号的区别 涉及到芯片选型的时候,需要大家了解各个型号的区别。对此ST有一个专门的文件STM32H7x3 MCUs High-performance line,在链接(这是一个超链接)里面可以找到。此文件里面有简单的对比,只是内容比较简单,仅两页,不过也言简意赅。最主要的是下面的这个截图:
; G, s y/ {, a8 e - b5 H) q% E T* { 需要了解更详细的对比信息,可以看数据手册。任意下载一个型号的数据手册,在数据手册的的Table 2里面有详细的对比,如下图所示(部分截图):8 v- m: @0 R7 g0 V) S
( j' b/ ]/ x# U! ?' }8 v / f, v# ]) K' c9 W 3.4 STM32H7总线框图和时钟8 O; _+ H9 r1 j, M STM32H7的数据手册里面提供了一张非常棒的框图,大家可以方便地查看每个总线的时钟速度和这个总线所挂的外设。这个在大家配置外设时钟分频的时候还是非常有用的,因为外设的时钟分频就是建立在所挂的总线速度(大家直接在数据手册里面检索Figure 1就可以找到)。
. ~- |8 ~$ E: `2 @# F0 G1 u SYSCLK(Hz) = 400000000 (CPU Clock) HCLK(Hz) = 200000000 (AXI and AHBs Clock)) e/ _! W; s7 @* N. E' e AHB Prescaler = 2 D1 APB3 Prescaler = 2 (APB3 Clock 100MHz)8 W g |* }( T3 S0 K D2 APB1 Prescaler = 2 (APB1 Clock 100MHz) D2 APB2 Prescaler = 2 (APB2 Clock 100MHz)& h) L- s+ x& G% X D3 APB4 Prescaler = 2 (APB4 Clock 100MHz) w" H C+ w1 X5 ]$ ] $ T8 p! u7 j y9 }$ S3 F; z4 M 因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = APB1 x 2 = 200MHz; 8 a" E1 ^) g! [8 V/ {1 Z6 H3 ~- z! ? 9 n u) y/ l8 i6 I$ D) { 因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = APB2 x 2 = 200MHz; APB4上面的TIMxCLK没有分频,所以就是100MHz;7 F6 V: U% G: w" A1 P2 ~9 F APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1 APB2 定时器有 TIM1, TIM8 , TIM15, TIM16,TIM17 APB4 定时器有 LPTIM2,LPTIM3,LPTIM4,LPTIM5/ u" P# @; _0 L0 I L' H4 \, Y8 b: ^+ V5 E 3.5 STM32H7的A**线 A**线在STM32H7中有着举足轻重的作用。高并发性全靠这个总线了,先来看下A**线的框架:6 q" G& S1 Y: q% u ! D0 M2 d9 N! r& z8 g. h 3.5.1 总线系统框架0 q2 O5 {; l2 U6 Q 下面这个截图比较有代表性,可以帮助大家理解STM32H7总线系统。
D1 Domain2 Y* s8 b, E6 A- a6 e6 J* Z* V. @ & l6 S' l: Y3 K! t* k. W 0 U* Z" c# A" {! r; X; d D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。2 \6 g2 C" C! h. l' ^5 t& `# J/ | 5 A- m1 [+ b; ]! |0 z$ D5 v 6个从接口端ASIB1到ASIB6 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。 # B+ l3 e5 Z5 L& S 7个主接口端AMIB1到AMIB7# R+ P* H& g3 q9 D9 l4 ~, ? 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。 ( f6 K b; I0 r* L6 `! W0 W D2 Domain + Z9 Y& h- | f) d6 S : |+ I0 B6 r% g; T( q7 q0 U D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。 ( }1 y! k/ K, i& M& @7 A 10个从接口 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。 - G7 Z, U" U. h+ h 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB2,APB3,D2-to-D1 AHB总线和D2-to-D3 AHB总线。: J9 e3 |- ~) z3 S0 }$ C & m' `- K: _8 q, M D3 Domain$ G* ~2 C& A! A' m$ a% c . ^! T+ k2 Y; o2 |. S; \- d: ?% ~7 s% g D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。2 m* {0 D% f4 \% Y% e4 G* K 3个从接口2 a: Z" F$ D5 K% t! P5 m/ v 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。 . u, R. ~& ?5 J) l- _4 E( T 2个主接口/ b4 V" P/ N% i+ \. C# ~* z! l 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线。 这三个域之间也是有互联的,可以是: D1域到D2域的D1-to-D2 AHB bus, a# ]7 C7 |% o! X* C7 t& L7 v& g 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D1域里面的DMA2D访问D2域里面的SRAM1。' f+ Q( U' t0 g! r8 @ D2域到D1域的D2-to-D1 AHB bus3 N) a( f8 N0 x8 p1 X/ K 允许D2域中的主接口外设访问D1域里面的从接口外设。比如D2域里面的DMA2访问D1域里面的AXI SRAM。5 {" L- |9 O) i# n4 h$ O4 e9 x6 _1 _ : _) K7 h! v! @ D1域到D3域的D1-to-D3 AHB bus. e Q& `4 v( K" I 允许D1域中的主接口外设访问D3域里面的从接口外设。比如D1域里面的DMA2D访问D3域里面的SRAM4。 % v. u5 E/ y. `, L6 V+ P D2域到D3域的D2-to-D3 AHB bus。7 P+ s& y& g. P' e T 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D2域里面的DMA2访问D3域里面的SRAM4。2 V$ u& n0 o9 u3 f& z ' w! |" k# i; Q% F+ s 有了这些知识后,下面我们重点了解A**线矩阵。 / I6 j* m0 ^$ ]+ I 3.5.2 A**线特色# q3 ]1 w9 `6 w AXI支持高频率、高性能的系统设计:6 Z( w. b+ O8 \5 j0 l # K) c$ p5 D* f+ N- j1 C N 9 j( p7 S4 p; y/ H; Q 支持高带宽,低延迟设计。 提供高频操作,无需复杂的总线桥。' Z# h/ _) `8 W$ y/ P# H$ U' P 满足各种组件的接口需求。& J" n3 w' Q3 ^5 h 适用于具有高初始访问延迟的内存控制器。 为互连架构的实现提供了灵活性。 与现有的AHB和APB接口向后兼容。5 W& Y- C) @3 ]% P( O& R) c8 F) C! U A**线的关键特性: , e" P" b" m* Z0 r7 G; W( s 独立的地址、控制和数据线。& p6 n1 z# H& v: q7 `+ m) S5 ] 支持非字节对齐方式传输。, w8 T2 b3 b( k6 [+ t 基于起始地址的突发传输。) T4 k7 s! o5 R3 | 分开的读和写数据通道,且提供DMA传输。 支持发起多个地址。 支持无序传输。 允许添加寄存器,以提供时序收敛。 0 r- T6 N6 I* q2 t A**线 关于A**线,ARM有一篇古文观止级文档《AXI4_specification》,已经将其放在了论坛:http://www.armbbs.cn/forum.php?mod=viewthread&tid=87340 。& M3 `" `0 y8 D1 Y! x/ @ 7 p, Z8 Q: R) h& ~9 K# m 9 j1 A1 }* H) p- o 3.5.3 A**线简介+ x% W( B' ]' G7 w: @ 通过下面的框图,我们再进一步的认识一下A**线。- }2 A, s, ~5 u1 F
9 i8 O$ a, M% T$ v- }9 m" w 针对从接口ASIBs,描述如下:1 \; y/ N% }# E
' O. I0 e: D8 s, V, v 4 R) N9 a7 ?0 J8 N& E6 E% [ 针对主控接口AMIBs,描述如下:- J2 g% w: T! |% n. q2 t4 R. t% H
3.5.4 A**线优先级编程' q: x$ f# Y& O 由于存在多个ASIB从接口访问AMIB主控的问题,这就涉及到谁先谁后等问题。所以A**线矩阵就做了一个基于优先级的仲裁方案。每个ASIB接口支持读通道和写通道分别设置,优先级从0到15。数值越大,优先级越高,默认情况都是优先级0。如果有两个传输同时到达AMIB主控接口,那么优先级高的ASIB接口传输优先处理;如果优先级相同的话,根据LUR方案选择(least recently-used最近最少使用情况)。 ( C$ I2 a! u J0 V g 大家在实际应用中,可以根据实际情况进行设置,一般情况下使用默认值即可。 1 D% I9 P" G, ^/ }+ Y+ S 3.6 STM32H7的总线互联; M ^( R6 Y' F0 G: A: x6 g STM32H7的总线矩阵四通八达,但不是任意Bus Master总线主控端和Bus Slave设备端都可以相互通信的:
访问通路(每个小方块里面的字符)+ W+ x6 _: M+ A; S$ ]0 e1 w# ?( j 任何有数字的表示有访问通路。3 I' j6 e( \2 N. L$ }& X3 ?( N 6 Q9 J9 o _# n3 N$ K: T 短横杠“-”表示不可访问。' X; n% Q, E4 i 7 ^' \/ t6 D: _1 ]/ |6 N8 d0 s- a 9 u" R) v# r+ @$ E, [+ e- U 有灰色阴影的表示有实用价值的访问通路。 8 E0 j6 r- g4 Z7 ?# V* D 表格中具体数值所代表的含义 / E+ m+ x9 N( p" R9 k D=direct+ L/ K3 z% }/ m3 G6 I F( }1 x: l1 K + ^& B* W. v" x' S1 l4 u9 Q8 E 1=via AXI bus matrix 3 l# z7 L, a# `5 a5 L 2 B7 W) f& ?; l* L 2=via AHB bus matrix in D27 c- g6 f- z+ T' q l2 d+ A" x 1 m9 p- d2 M" `! V) {, z 3=via AHB bus matrix in D3 ( T: Y, [4 w' J$ G' A* x A. w: m }/ t 4=via AHB/APB bridge in D1; q# R1 y' u2 _8 ^& \9 Z 5=via AHB/APB bridge in D2: U; Q; m% q! g4 b. R: M- | % w$ Q9 x0 p2 q8 |2 n4 n' u 6=via AHB/APB bridge in D3 u y1 [; m! s4 W2 Y% _" n 7=via AHBS bus of Cortex-M7/ k( d2 s# N$ e t% h* Z, w; P $ _8 M+ P8 C0 n9 P0 s 2 D3 e( Z; K- N% }2 o 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。5 \6 Y. u! |' D- n$ K4 ] + i' p3 j) Y7 L! Z+ ` ( K/ b" Y E% A 总线访问类型4 o" m1 `% o7 d, b 普通字体表示32位总线。 ) `6 `/ ^9 X* G. [ 斜体表示32位总线主机端/ 64位总线从机端。 粗体表示64位总线。% J5 i$ o: n/ G, T# ~* d! E 4 { N0 E* `4 u6 H 当前要对这个图有个了解,后面章节讲解各个外设的时候要用到,比如DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。5 b- F1 q+ B5 [0 ^9 B * b3 l4 ^- T1 r3 N/ ^6 Z/ { ( `) V1 J9 `& V" q5 Y5 h 3.7 STM32H7的FLASH 首次学习STM32H7,要掌握以下几点认识即可: 8 b5 b, H8 G9 O 1、双BANK,每个BANK的带宽都是64bits,如下图所示:0 u5 }; ^0 g2 y6 k
7 B2 x9 I* D0 o R7 A H7中已经没有F1和F4系列中的ART Chrome加速,通过H7中的Cache加速即可。具体延迟数值和主频关系如下:
s( a- Z6 s3 o! A% }5 b 3、Flash编程操作(写)最好以256bits为单位进行,应用中也可以小于256bits,但是容易造成ECC校验出问题,所以不推荐。Flash读操作支持64bits,32bits,16bits和8bits。 k5 _2 J* v! @ 5 Z! w8 y$ D1 V6 N/ f 4、Flash支持ECC校验,每256bits配10bit的ECC位,可以检测到1个bit并纠正或者检测2个bit。随着芯片的制造工艺水平越高,带电粒子能产生的位翻转就越多,此时的ECC是必须要有的,一般可以纠正1-2个bit。安全等级高的Flash类存储器和RAM类都是必须要带ECC的。; L1 b. ]5 E8 S) a. w/ i6 N ; |, j, `/ x+ o& u8 G3 Z( b ECC相关知识。0 A9 P1 n, X" r4 f3 d 4 Z) {" d/ Y5 V$ F" @0 N 3.8 STM32H7的RAM* B2 V0 d2 }2 K/ q, g9 } (注,学习本小节,优先回顾本章节3.5.1小节的框图,另外H7的RAM区也是支持硬件ECC的)1 c5 L+ G! O! w5 B STM32H7的RAM区分为好几个部分,下面分别进行说明:3 e- d9 ~5 V. a7 a ! J- Y. x) c( b; \1 S0 `0 A TCM区 " p2 s: N6 ^$ Z4 G4 t TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。 . P- k7 M! X8 D( V* A & f! _/ o7 h2 @! P, F 速度:400MHz。( R# `. B* l! o7 F ; ?! [* o8 O/ H h: b* H; ~ DTCM地址:0x2000 0000,大小128KB。8 n: i! y- K+ I+ | " _3 Y. y, a4 ^ ITCM地址:0x0000 0000,大小64KB。2 c+ V( k2 g9 F 2 X! a( b. ~1 F# |5 S, E& [: o+ ^ AXI SRAM区 ' e+ H- _7 l( I0 E 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。( J; Z$ J$ _/ G2 @( j. D. N . d* v. [0 R9 K7 H4 e 速度:200MHz。 * q. g N* @ X8 E 地址:0x2400 0000,大小512KB。1 E0 O7 H& e2 l8 S5 ^# P* h7 v 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 _! P) d5 C: C8 l* s5 P SRAM1,SRAM2和SRAM3区- [$ p4 g3 ?& ? $ i" ]( }; E/ J7 ^3 p1 n 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。, S4 t" q, N/ @9 K2 I& R* \% T 速度:200MHz。: \" ^8 Y8 p* X* C& o. p . Z, g6 p* F7 u SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。 2 m7 i0 W7 C3 c2 g$ |9 z SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 : M. m: Z+ Q9 ~) p! A5 Q SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。9 g, d5 ~# a+ H0 ]! h9 s! I7 E # X, I* ]* ?, T3 x; | ' T9 P1 R5 I& `0 ~9 ` SRAM4区' D/ q! v' D& [( ^) h5 Q# E 0 E7 v+ }4 E0 V 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。5 x- i/ C! Q* Q( Q8 ?; W 速度:200MHz。' E; p3 i' g" H1 W& C 地址:0x3800 0000,大小64KB。 - C" S7 D8 R& K) E9 v! } 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。 4 h K3 a, l2 f' J6 I/ e Backup SRAM区 3 c! f r' B, F: o 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。 3 O5 O0 G9 q& X2 Q2 H7 M 速度:200MHz。% `" t t- a; {8 q7 p$ P / Q5 _2 e$ }! j# b3 X" M( p * V0 P) `, J8 z" M 地址:0x3880 0000,大小4KB。 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。 ! l: O; j/ s: }: A1 p $ M: S U7 i! c( r( R4 F6 z' r# l0 d1 f$ b 3.9 总结" i) C1 U2 w" x7 p$ m1 Y5 o 本章节就为大家讲解这么多,让大家对STM32H7有个整体的认识,后面章节将逐个进行学习。5 I: M! q5 X, y2 h9 v, g 5 p/ I' w1 U0 p+ ] ) i6 h: }, C$ C2 @, |& I |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版