STMCU小助手
发布时间:2021-12-18 17:43
|
3.1 初学者重要提示" m* C' r: u- T$ d7 E# g# o6 m( ? 学习一款新的芯片,优先掌握系统框架是比较重要的,建议逐渐养成这种学习习惯,然后各个击破即可。 本章节提供了多张STM32H7的框图,这些框图都非常具有代表性。很多时候记忆知识点比较费脑子,记录这些框图是一种非常好的方式。 对于本章节提供的部分知识点,无法理解透彻,暂时没有关系。随着后面的深入学习,基本都可以掌握。 重要的MPU和Cache知识分别放在了第23章和第24章。 }/ |" G- q+ N4 M* T' s2 P 3.2 STM32H7硬件框图5 t# f' a- z' G& o5 |0 G6 l4 X+ ` 学习一款新的芯片,需要优先了解一下它的整体功能设计。需要的资料主要是来自官网和数据手册,比如我们V7开发板使用的STM32H743XIH6,直接在官方地址:链接(这是超链接)就可以看到对此芯片所做的介绍,页面中有一个如下的框图,对于了解STM32H7整体设计非常方便。/ ~: p- l+ m0 ?) v1 u
# W4 X5 f, m p) s/ p0 E6 r/ J8 ] 再稍微详细点,就需要大家读页面上的”Key Features”,就是下图所示的内容:. l* S" R3 R8 V7 m) Y1 M5 E , S& ~& g9 p5 u' g
4 J- O2 H. d0 x* i 或者直接看数据手册开头的章节即可,也进行了介绍,内容基本都是差不多的,如下图所示(部分截图):: C- |' p/ k+ W- p8 u 7 ^0 I2 b% J$ P: G5 O1 W+ N" ]
通过框图和Key Features,大家可以方便地了解STM32H7的FLASH、RAM大小以及各种自带外设的信息。6 C( h; Z# D6 Z# k1 @* g$ j4 w 7 C( w- M: n. f( H! ]8 w 3.3 STM32H7各个型号的区别 涉及到芯片选型的时候,需要大家了解各个型号的区别。对此ST有一个专门的文件STM32H7x3 MCUs High-performance line,在链接(这是一个超链接)里面可以找到。此文件里面有简单的对比,只是内容比较简单,仅两页,不过也言简意赅。最主要的是下面的这个截图:
2 Z/ x# R% v9 H! z4 i" T+ b" H 通过这个截图可以方便地了解不同型号的引脚数、封装、FLASH大小、RAM大小以及是否带HW CRYPTO硬件加密的区别。3 T; t$ |' q7 b, c6 `1 E( ?+ T 3 S1 R5 C( I0 a 需要了解更详细的对比信息,可以看数据手册。任意下载一个型号的数据手册,在数据手册的的Table 2里面有详细的对比,如下图所示(部分截图):
U4 C+ i. H# d+ c3 B! i 使用ST提供的软件STMCUFinder或者STM32CubeMX也可以做对比,只是没有上面的表格这么方便,可以一目了然。6 ]+ y( _! g9 b/ M* j) Q( c 3.4 STM32H7总线框图和时钟4 S! _4 u+ n; Z1 ]- Y STM32H7的数据手册里面提供了一张非常棒的框图,大家可以方便地查看每个总线的时钟速度和这个总线所挂的外设。这个在大家配置外设时钟分频的时候还是非常有用的,因为外设的时钟分频就是建立在所挂的总线速度(大家直接在数据手册里面检索Figure 1就可以找到)。 6 b A j: y! \. p% y" {
0 |1 l- l9 P0 S3 ^+ j 比如我们想得到不同定时器的主频,通过上面的框图,可以方便地获得如下信息: J( v9 W3 ] c& h7 V SYSCLK(Hz) = 400000000 (CPU Clock) ' @5 w k& @! R+ w, y HCLK(Hz) = 200000000 (AXI and AHBs Clock)7 }- I" O/ V0 h7 s9 f ) F D# f( @4 Z+ j0 Y AHB Prescaler = 2 2 p9 F4 d* N% I' _, d% C D1 APB3 Prescaler = 2 (APB3 Clock 100MHz) D2 APB1 Prescaler = 2 (APB1 Clock 100MHz)# i! E# Q. ^/ y7 e$ e* X Q ' F$ U8 |2 o" u D2 APB2 Prescaler = 2 (APB2 Clock 100MHz) D3 APB4 Prescaler = 2 (APB4 Clock 100MHz) 8 p$ |: ~" o: T% Q 因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = APB1 x 2 = 200MHz;: h6 F( [" H) x8 L6 \/ y. ^1 s4 @& A 因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = APB2 x 2 = 200MHz; APB4上面的TIMxCLK没有分频,所以就是100MHz;+ ~4 `0 [2 H9 T: {. R5 V0 p APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1& _, {* g( B! b4 s% X2 K, P APB2 定时器有 TIM1, TIM8 , TIM15, TIM16,TIM17% i7 \6 I& H/ X6 E! P+ m' u+ O $ ^2 D6 Z4 x O8 O2 Z: A, D APB4 定时器有 LPTIM2,LPTIM3,LPTIM4,LPTIM51 G; ]6 B* ^: ^# `- J, g0 K% v & S" C4 h+ `- e. q3 P' P+ s ? 3.5 STM32H7的AXI线! _2 G* |% `* p! s3 F+ ]* _ A**线在STM32H7中有着举足轻重的作用。高并发性全靠这个总线了,先来看下A**线的框架:' f0 H" u1 x1 ~. x 3.5.1 总线系统框架 下面这个截图比较有代表性,可以帮助大家理解STM32H7总线系统。9 I9 N6 }6 B0 L% b' Z9 M* z2 p1 ~& a
这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。. ~$ w2 l8 C5 U" J1 R D1 Domain3 q0 W) s8 R, m9 ^4 g" i$ i ( G9 v$ r( N4 h9 _$ K D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。 * X3 F3 Q# p" X% Z5 a! E 6个从接口端ASIB1到ASIB60 ?" X8 }5 {$ |% ?5 b% z 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。/ d( m, h. X4 U9 ]) K) e/ [2 J& S 7个主接口端AMIB1到AMIB7% n/ k, j! Y [4 _ 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。 " C2 o+ \5 H6 F! G D2 Domain 6 u% L. n; F0 A* Q: N, ~ D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。( ]/ L# F1 C' k 3 B( X# }+ s7 t" A, Z$ M 10个从接口 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。 4 a8 e# @9 J1 p4 b, ~6 N9 b 9个主接口! a# H8 B( f) \: q9 I 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB2,APB3,D2-to-D1 AHB总线和D2-to-D3 AHB总线。& f/ U9 S% `/ J2 Y! M- |( ] 0 ]9 c5 x5 k; h9 G, j5 g D3 Domain 1 B- I( ]& L& ` D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。 ( l# m- ^; E% T1 I3 T* q. Z 3个从接口 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。& R$ l+ `. T! i 2个主接口 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线。 - i* R, c2 _ n9 O) l7 m( @( B 这三个域之间也是有互联的,可以是:! @, k: t4 n& U6 A D1域到D2域的D1-to-D2 AHB bus 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D1域里面的DMA2D访问D2域里面的SRAM1。9 v$ D' k# g. P# \# }0 @) S+ j" d # H. a9 h% N& s# f* P4 } D2域到D1域的D2-to-D1 AHB bus4 X' {& [: e' Q4 |/ j" V+ ] 允许D2域中的主接口外设访问D1域里面的从接口外设。比如D2域里面的DMA2访问D1域里面的AXI SRAM。9 t: `+ V6 d+ J( u D1域到D3域的D1-to-D3 AHB bus 允许D1域中的主接口外设访问D3域里面的从接口外设。比如D1域里面的DMA2D访问D3域里面的SRAM4。9 `; Y1 e$ Z2 M* k2 o* W. e) n D2域到D3域的D2-to-D3 AHB bus。 允许D1域中的主接口外设访问D2域里面的从接口外设。比如D2域里面的DMA2访问D3域里面的SRAM4。 有了这些知识后,下面我们重点了解A**线矩阵。! `0 l# p0 L7 [) D 3.5.2 AXI线特色 AXI支持高频率、高性能的系统设计: " i1 T# n* b8 g! K 支持高带宽,低延迟设计。5 C! b; p7 m. a. P* ? d 提供高频操作,无需复杂的总线桥。* u. c1 v3 Z1 \- [7 l/ ] S 满足各种组件的接口需求。- @ u ]$ f9 v- K 适用于具有高初始访问延迟的内存控制器。& c5 V3 d* w A% I* n 为互连架构的实现提供了灵活性。 与现有的AHB和APB接口向后兼容。 9 R7 ?( X/ {' s3 b+ f AXI线的关键特性:7 P+ K. Z! D8 w5 q$ v 独立的地址、控制和数据线。 支持非字节对齐方式传输。 基于起始地址的突发传输。 分开的读和写数据通道,且提供DMA传输。8 E: C0 U* g. z0 T/ h& \ 支持发起多个地址。 支持无序传输。$ E/ m" x$ i |4 s( _# h* a7 ?! b 允许添加寄存器,以提供时序收敛。) _5 H3 e9 X. F0 T! `$ Z AXI线 3.5.3 AXI线简介8 _( j( P H/ P8 T# q+ Z 通过下面的框图,我们再进一步的认识一下A**线。
通过上面的截图,我们可以看到,A**线有6个从接口ASIBs(AMBA slave interface blocks)和7个主控接口AMIBs(AMBA master interface blocks)。7 T$ m' K1 M. S3 P- F* p+ ^$ Z% u $ z3 y( B# }9 j" e O 针对从接口ASIBs,描述如下:& Q8 u I, H" U
重点注意最后一列,STM32H7参考手册里面原始的描述是R/W issuing,这里将其翻译为读/写发起能力。比如输入通道IN5连接的主控DMA2D,支持的读发起能力是2,写发起能力是1。读发起能力是2该如何理解呢?这里的含义是存在两路读信号同时进行(因为AXI接口有一个FIFO的功能,可供同时进行,更深入的认识有待研究),反映到DMA2D的实际应用中,就是DMA2D同时读取前景色和背景色的缓存区做Alpha融合之类的操作。写操作同理,DMA2D的写发起能力仅支持一路。 ) z: j6 v& K6 j! g5 z. e2 | 针对主控接口AMIBs,描述如下:
跟上面表格的含义是一样的,同样重点注意最后一列,这里多了一个总接收能力(Total acceptance),也就是读发起能力和写发起能力同时执行的情况。2 F: j$ [* A& E. L2 }' T1 q 3.5.4 AXI线优先级编程% {1 d4 c2 P: E& T* E 由于存在多个ASIB从接口访问AMIB主控的问题,这就涉及到谁先谁后等问题。所以A**线矩阵就做了一个基于优先级的仲裁方案。每个ASIB接口支持读通道和写通道分别设置,优先级从0到15。数值越大,优先级越高,默认情况都是优先级0。如果有两个传输同时到达AMIB主控接口,那么优先级高的ASIB接口传输优先处理;如果优先级相同的话,根据LUR方案选择(least recently-used最近最少使用情况)。4 z, d& q, O) P1 L, I* l ; v* N. C- D9 `! n 大家在实际应用中,可以根据实际情况进行设置,一般情况下使用默认值即可。! D9 ^7 u9 `! q8 {+ R3 k3 ] i 3.6 STM32H7的总线互联* k* v' `/ F+ k. s8 M8 P STM32H7的总线矩阵四通八达,但不是任意Bus Master总线主控端和Bus Slave设备端都可以相互通信的: # ?( j) ^" E* q* F1 z
5 O- q+ N/ C/ I% n9 d 黑色加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。 8 u4 z" O4 `$ h& Z2 }$ J% I 访问通路(每个小方块里面的字符)0 M. {5 {8 e, Z; V! s 任何有数字的表示有访问通路。. b; v7 j( H, j: `: X& | , @& Q1 `# y" K, b# f+ Q 短横杠“-”表示不可访问。6 F( P, |5 a+ C- M$ D % n+ I* {7 A% t7 i) g8 H 有灰色阴影的表示有实用价值的访问通路。 {) C; y, N0 H5 x g6 B/ E# Z0 c 表格中具体数值所代表的含义, C! X2 x( u( Q ) y2 y; ~0 w: {$ y, y$ H D=direct 1=via AXI bus matrix 2=via AHB bus matrix in D2 3=via AHB bus matrix in D3 4=via AHB/APB bridge in D1 5=via AHB/APB bridge in D2& l5 n& P6 A6 A f& b3 p ' C- x% H; i( ^% g* {* i 6=via AHB/APB bridge in D3 7=via AHBS bus of Cortex-M7+ A7 J; } {* {; l0 ]" c: L 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。 7 M0 J! Q Y$ Q# S [' z7 _" b 总线访问类型& U r6 {! W3 J4 f4 h H, M$ Z" Z ) M) o4 Y( E# l 普通字体表示32位总线。 ) w n" j0 M- B4 g( X0 R8 h 斜体表示32位总线主机端/ 64位总线从机端。. [7 R. x1 {) I- u& M; s 粗体表示64位总线。 : O. M( X, ~9 K$ \9 y 当前要对这个图有个了解,后面章节讲解各个外设的时候要用到,比如DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。5 w- j ~2 @& y: l* D: h 3.7 STM32H7的FLASH 首次学习STM32H7,要掌握以下几点认识即可: + y$ Z2 l3 S6 L) h- o7 p" m 1、双BANK,每个BANK的带宽都是64bits,如下图所示: & ?4 N+ M" C( r
( l1 Z5 S4 C5 I I; Q1 w 2、H7中Flash的延迟和主频关系。 / }/ r9 f, o4 N; K H7中已经没有F1和F4系列中的ART Chrome加速,通过H7中的Cache加速即可。具体延迟数值和主频关系如下: 5 `$ C0 U: W6 b! U. p4 \& r
对于上面的表格,大家可以看到,当延迟等待设置为0的时候,即无等待,单周期访问,速度可以做到70MHz。增加1个Flash周期后,访问速度可以做到140MHz。当增加到3个或4个Flash周期后,最高速度可以做到225MHz。/ e' r3 z ^8 ?8 w2 K & i7 |" D4 p% i* W& ` 3、Flash编程操作(写)最好以256bits为单位进行,应用中也可以小于256bits,但是容易造成ECC校验出问题,所以不推荐。Flash读操作支持64bits,32bits,16bits和8bits。 0 @3 W$ D4 M4 U3 t' ~ 4、Flash支持ECC校验,每256bits配10bit的ECC位,可以检测到1个bit并纠正或者检测2个bit。随着芯片的制造工艺水平越高,带电粒子能产生的位翻转就越多,此时的ECC是必须要有的,一般可以纠正1-2个bit。安全等级高的Flash类存储器和RAM类都是必须要带ECC的。 4 N5 @3 o! f+ A: u$ q 3.8 STM32H7的RAM (注,学习本小节,优先回顾本章节3.5.1小节的框图,另外H7的RAM区也是支持硬件ECC的)9 b1 P/ I, c/ f STM32H7的RAM区分为好几个部分,下面分别进行说明:8 ^% m5 z6 C! A s, R% m , Y# L4 N, x0 o# }" [8 U( |* B8 Z TCM区3 i0 }( Z9 K' \ 7 Q8 K' j8 i; n# n k/ t/ g% b TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。7 S1 G6 z& w6 W' } B# T' s% l4 @ 6 X! E. M9 I' Q( o* P. p8 V& Y 速度:400MHz。 DTCM地址:0x2000 0000,大小128KB。9 o. F+ }! n. i+ L- p" ? ITCM地址:0x0000 0000,大小64KB。* W" K, G" Y" X' C8 ` 1 G* h0 a f4 X+ N. G AXI SRAM区* `4 i( U* P6 F 0 q+ q5 K B6 b) M 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。 速度:200MHz。" f( n; o: W* c$ [4 f3 m* |* q ( S# |5 D N0 c, f& M& i2 U: c- m, L 地址:0x2400 0000,大小512KB。 ' J; p3 r" z! O* F 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 SRAM1,SRAM2和SRAM3区 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。 % e3 T" e+ M( N6 O- E- _: e5 u1 ] 速度:200MHz。 + x i U$ `* B7 @1 @7 | SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。( k z& Z/ E1 ?) }6 B$ A2 k : L* q& \( h* Q w SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。6 O- I- T5 g* R) U' k# d' E- F SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。 4 b3 p: ?7 w+ `( b( T- d$ X SRAM4区' w E" ^& y2 m- Y& z 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。 速度:200MHz。1 u( i+ S5 V5 M 地址:0x3800 0000,大小64KB。/ {. ]; T* A( {, ^/ `8 Q; c 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。 Backup SRAM区 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。 - i/ t0 e) e" ` 速度:200MHz。 地址:0x3880 0000,大小4KB。! a$ ~* n. u6 x- S1 F1 A 4 i- k3 ^) o, g) ^2 d0 E$ L7 | 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。 3.9 总结4 y) o4 l. w7 u# B+ b+ b9 M0 r# m# M 本章节就为大家讲解这么多,让大家对STM32H7有个整体的认识,后面章节将逐个进行学习。- A. B, R6 K& Q8 A , j5 y. \: N# Y$ A# d% G! H/ O 4 f' ]+ [$ X$ o, m/ q |
【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实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版