
25.1 初学者重要提示5 L1 O0 @0 t: Z( Z6 s3 _& G. h TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度。 特别注意本章25.5小节里面各块RAM的DMA操作问题。0 p4 ?9 S% F/ q, ]& _9 j$ V9 _ 25.2 各块RAM在总线中的位置- S5 @* Z2 W1 ? `. m5 A% { 这个知识点在前面章节做过介绍,本章再次梳理下这个知识点。" V% e2 L7 v# X( W( J 7 ^& U; M+ o6 V- [ ![]() * j% X& `' L F* j 这个图可以方便识别总线所外挂的外设,共分为三个域:D1 Domain,D2 Domain和D3 Domain。 " ?# e F* j4 S" ]6 x 1、 ITCM和DTCM w& ?" i; F2 G$ u' [, }7 b$ U* f( S# T 这两个是直连CPU的。 2、 D1 Domain3 A% v* ?* z6 ]+ d D1域中的各个外设是挂在64位A**线组成6*7的矩阵上。+ Z+ s& U* n. p, X4 `4 j. T. E ! c" g5 P4 M D 6个从接口端ASIB1到ASIB65 ]6 t& v0 l* y+ q8 w2 Y% _/ T 外接的主控是LTDC,DMA2D,MDMA,SDMMC1,AXIM和D2-to-D1 AHB 总线。! n- f6 }; o! ?1 v 7个主接口端AMIB1到AMIB7 外接的从设备是AHB3总线,Flash A,Flash B,FMC总线,QSPI和AXI SRAM。另外AHB3也是由A**线分支出来的,然后再由AHB3分支出APB3总线。 - F2 s. ]/ }1 r9 _. }8 U4 A 3、 D2 Domain D2域的各个外设是挂在32位AHB总线组成10*9的矩阵上。* G% Q$ x; k) X+ K$ y4 c- y 10个从接口( ?9 Y) v5 c* }2 v% S/ j 外接的主控是D1-to-D2 AHB 总线,AHBP总线,DMA1,DMA2,Ethernet MAC,SDMMC2,USB HS1和USB HS2。 9个主接口 外接的从设备是SRAM1,SRMA2,SRAM3,AHB1,AHB2,APB1,APB2,D2-to-D1 AHB总线和D2-to-D3 AHB总线。 4、 D3 Domain& i+ _/ n9 m4 q0 b& e D3域的各个外设是挂在32位AHB总线组成3*2的矩阵上。 3个从接口% w; h+ e# N4 q- d 外接的主控D1-to-D3 AHB总线,D2-to-D3 AHB总线和BDMA。 ) }' f5 [5 z% e& h1 ] W4 D( c 2个主接口8 I* Z, ]- c: l7 P- j 外接的从设备是AHB4,SRAM4和Bckp SRAM。另外AHB4也是这个总线矩阵分支出来的,然后再由AHB4分支出APB4总线 25.3 各块RAM特性# x# H' f5 d/ w9 j) w9 c4 R 各块RAM的特性对比如下,特别注意他们支持的最大速度和容量大小。 / L- t4 P& `1 C3 L) u$ O TCM区7 Z* S+ L# N: X6 M" L7 i TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。5 K4 q7 I8 q. p8 o" X. V 6 p/ Y/ Q1 V% S' m1 Q% a, a 速度:400MHz。7 T5 k! ~4 O. P( m& r5 i DTCM地址:0x2000 0000,大小128KB。 ITCM地址:0x0000 0000,大小64KB。 ; G' V4 ]' `) p) N! H1 | AXI SRAM区6 `$ O1 j K2 e$ e- E, q( b% p# d( q 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。/ C4 F4 S2 W/ o5 @8 ]# N 8 L" g p, v8 X* D: ? 速度:200MHz。6 j0 u; M' l& E 地址:0x2400 0000,大小512KB。- F) U( N3 R1 d9 k4 W , S* {+ M* ?0 s( r# [ i. l 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 SRAM1,SRAM2和SRAM3区- @. O& _/ N, B% o J2 {' p 位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。 % z, |. I4 e: U3 V' v+ g9 n3 o 速度:200MHz。. D8 }! N2 f# D) n/ r& F+ _% \ SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。 SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。 9 g0 \' j0 X( l2 Z; t. m7 K# \ SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。! E- |) t" c) {( S7 I8 w SRAM4区* Z/ C4 O9 ?/ i9 { d& \1 R 位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。 ! H$ j2 y2 ~6 E# q. C2 J 速度:200MHz。) p0 m1 u6 f$ j4 a2 z& t5 L; O4 B" P / H$ \+ u6 q1 Z5 G1 ^! g: } 地址:0x3800 0000,大小64KB。 用途:用途不限,可以用于D3域中的DMA缓冲,也可以当D1和D2域进入DStandby待机方式后,继续保存用户数据。7 [& M& c8 D$ |% [! z) `7 c - R6 z1 x5 Q4 |8 E$ f4 V2 T8 n Backup SRAM区+ B, N8 ^* H" j" b1 j 备份RAM区,位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访问这块SRAM区。 # o2 y" s8 h6 L$ ] 速度:200MHz。+ v+ i* U& u& g$ h9 { 9 W' N' h1 o* n$ f 地址:0x3880 0000,大小4KB。& p& m# {6 G6 O: K3 Z 5 j7 Z( j, o7 V 用途:用途不限,主要用于系统进入低功耗模式后,继续保存数据(Vbat引脚外接电池)。7 v( t% V$ V% S/ f 7 R4 |! p" P* A. E 25.4 各块RAM的时钟问题 正常情况下,系统上电后,CPU要访问的外设是需要使能对应的时钟位,但是下面这几个,CPU上电即可访问,而且芯片没有对应的寄存器使能位。/ M# M* d- a3 m" [$ Z ![]() 也就是说AXI SRAM,SRAM4,ITCM和DTCM可以在上电后直接使用。而SRAM1,SRAM2,SRAM3是需要使能的,但是实际测试发现,不使能也可以正常使用。不过,建议用到时候开启下时钟,防止意想不到的问题发生。 / w* D6 ~8 q7 Z; Y0 r' t, y 对于V7板子配套的例子,在bsp.c文件的函数SystemClock_Config末尾做了个条件编译,大家可以根据需要来开启这三个时钟:& W2 s+ A% ]1 X1 i, t . E1 E" I% k0 c
25.5 各块RAM的DMA问题* y5 y1 g! F" ]% t* @ 了解这个问题之前,要先看下面的Bus Master总线主控端和Bus Slave设备端的控制互联:0 n; o& E5 i6 ^: m' s/ Y; |' @ ![]() 加粗字体是64位总线(ITCM,DTCM,Flash A,Flash,AXI SRAM,FMC等),普通字体是32位总线。 访问通路(每个小方块里面的字符) 任何有数字的表示有访问通路。, F5 I# j) B0 P9 P. c 3 s! U D+ z. U+ h) X 短横杠“-”表示不可访问。 + `' K& `* \# _, L3 H& T7 ~7 b 有灰色阴影的表示有实用价值的访问通路。 * w5 v# d) [$ b 表格中具体数值所代表的含义0 N) t0 O/ ~2 Z: \ D=direct, 1=via AXI bus matrix, 2=via AHB bus matrix in D2, 3=via AHB bus matrix in D3,: u4 j; W/ z5 M. c 4=via AHB/APB bridge in D1,/ W! y% }, @2 l; \; W0 L: h1 } 5=via AHB/APB bridge in D2, # _7 d& N+ ]$ W* }) ^7 a3 L 6=via AHB/APB bridge in D3, g6 R9 D, T) E2 } ; f2 G; s! \* B+ \- {: ~2 g; V 7=via AHBS bus of Cortex-M7, 多个数值组合 = 互连路径以数字的顺序经过多个矩阵或/和桥。 $ E! X7 o8 i7 ~2 ^$ Z4 D u 总线访问类型 普通字体表示32位总线。9 C; e: K9 u5 ]. N 斜体表示32位总线主机端/ 64位总线从机端。 粗体表示64位总线。4 G" |4 a: D) z* ? 通过这个总线互联图,要了解到下面三个重要知识点: DTCM和ITCM不支持DMA1,DMA2和BDMA,仅支持MDMA。 AXI SRAM,SRAM1,SRAM2,SRAM3不支持BDMA,支持MDMA,DMA1和DMA2。 SRAM4支持所有DMA,即MDMA,DMA1,DMA2和BDMA。 25.6 实际工程推荐的RAM分配方案1 f2 w3 \% _% D0 s$ N/ ?! F. m 鉴于DTCM是400MHz的,而其它的RAM都是200MHz,推荐工程的主RAM空间采用TCM,而其它需要大RAM或者DMA的场合,使用剩余RAM空间。 0 ?2 M8 ]0 }. ?7 A 本教程配套的例子基本都是采用的这个方案,让TCM的性能得到最大发挥。0 P9 x2 D$ r+ G+ r 25.7 总结0 U8 V( _' }' u; N, I! n 本章节就为大家讲解这么多,通过本章节主要是为后面三个章节的学习做铺垫。% q+ F9 q5 r8 a' x8 |0 q# n# P ! q1 g- S1 _" U( s% C' l( b: m. L* Z / A) U8 ?, k: X& M1 \/ U$ D- G |
【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 灯光控制