你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)

[复制链接]
donatello1996 发布时间:2026-7-16 00:26
       查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:" ~" N3 r+ n( a9 |) Z
16.JPG 2 F. Z, x7 S5 A+ H1 O/ y6 c  Q
# P* [/ N' I- b1 ?. y
' p1 D4 `7 y8 x9 V
TCM区
# s6 Q% M2 ~  TTCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。8 Q. q" Z' o5 z; J0 n

$ V+ a, o3 N- x. q
" |5 }% n3 Z) K5 o) u  e
速度:400MHz。) g9 @$ Z" `+ l
1 R/ L; \6 K6 r
& I9 o. T7 b, V2 i; Y6 r9 d- E  C' v
DTCM地址:0x2000 0000,大小128KB。% l1 p* h1 E/ G

; \& K4 m) H1 e

' g! z/ C2 }/ Z6 U  y9 RITCM地址:0x0000 0000,大小64KB。
5 X! z3 A: U: v$ Y5 T& `* a" e  G6 K' F
* O( s4 B) c6 ?- ?
AXI SRAM区
: r9 }) \, @% w" \9 j* Q+ K位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
* ?  V. X1 U5 C9 J9 v9 Y5 m5 G' U- {7 F6 H1 M
7 ]# I: y. i' z& p" _+ i- T3 R" b
速度:200MHz。
5 |2 [- b% F% j. o1 D" V5 B7 O+ v5 L2 D

( l+ A& K7 R; v0 W地址:0x2400 0000,大小512KB。
" G: P8 o/ c( L' U$ g' z
5 s! }; E0 E9 @! H  j7 E2 ]

9 G9 e  b* m4 i! o' i用途:用途不限,可以用于用户应用数据存储或者LCD显存。
" V9 b- u& [1 f; D$ G' h
+ I$ T! x  g4 c% y
# {- P( G6 b" @5 Q, `: P
SRAM1,SRAM2和SRAM3区
% _9 z. ~+ n. a! X* E9 r* I& E0 N/ m位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。8 Y8 b" |! \# e$ @( g
2 O0 ^# O& |/ z- e6 X1 `1 B
9 d8 u  Y  `  ^0 D" s+ B% x/ `9 E
速度:200MHz。7 }  C3 U) b% ~3 F
3 j$ U4 N9 k2 \, w- }6 g* W

4 b" m. j+ U, g6 ]SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
0 {  E2 Y/ I7 g, @; C5 Y1 j. n
4 |/ v" U0 p4 m, K: B

$ @: S1 V: X4 }0 M% l; v# dSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
6 A- z; I, w5 p) A0 }5 `$ X: S5 N! I, b# u1 G2 c0 f2 o

; u# p" S6 [& I& D$ }4 DSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。( t/ Z. y7 p' \* f) ~' r6 L# P. w" F

  \4 U( d$ e  k) ]
. t0 v$ n  E1 E5 h; t+ F6 I6 R' m$ O
SRAM4区
, L* U3 ]1 H7 N( Q位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
* L5 n0 v) V' `' B' O$ J- F/ `; V7 N  w1 f3 B

% k$ d* J: \) T( y; J$ }速度:200MHz。
" s2 X. N6 P3 b" n+ i! D+ \. H; [5 j1 Z2 E; K8 }' R4 o

2 O7 C, `% B- X7 Q地址:0x3800 0000,大小64KB。
4 l5 c. X# q9 D( o6 r& w0 u" f1 o6 z& k$ M' F' R. M/ ^' M0 X
  p# ?$ `9 R5 o3 b
而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:
; ?8 u0 Q! [- m 17.JPG
% k" V$ y2 T. A7 C' u5 v0 s
$ {3 u$ P$ C2 R3 V& \4 ]) `

4 y8 b1 j; D3 G; S( Y想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:# d% r# q1 p# f0 I, n7 v. X
18.JPG
8 K/ X; x7 U+ wLR_IROM1 0x08000000 0x00200000  {    ; load region size_region
, n( p. u9 h( E' }1 t. M! T5 [  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
8 A7 }- S7 J" I7 Y1 Z' T   *.o (RESET, +First)
6 ]# n/ I+ g/ t$ q   *(InRoot$$Sections)8 U1 q7 C3 F7 J; z" e
   .ANY (+RO)+ X* _$ k0 w7 Z
  }
$ a+ ?$ `8 u/ Y1 E  G8 D$ g6 {( g  / a4 D8 s( ~  C; V( z! ]
  ; RW data - 128KB DTCM# k  i; l" A2 x- Q
  RW_IRAM1 0x20000000 0x00020000  {  
* }! H4 e  ?) Z- e' Z- L   .ANY (+RW +ZI)
- p( Y5 H7 }' V4 j- _5 O* i  }
; |9 ~/ j$ `, h  
8 d, }! o- r9 _' `7 O  ; RW data - 512KB AXI SRAM; h# g: A* L" X+ l' D) W
  RW_IRAM2 0x24000000 0x00080000  {  
, ~8 Y7 H$ J: _7 E   *(.RAM_D1) ( i! M4 {" y3 n6 m% V! T$ w
  }
! `; s, K4 D0 a7 ?$ I4 ]. m  
' ~6 [0 O# Q# L8 W' b  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)6 s' M4 k/ s" m: b& }2 F. ]
  RW_IRAM3 0x30000000 0x0004b000  {  
2 u4 e4 D4 R1 ]: i3 U6 v+ r9 ]. O- @( b1 X   *(.RAM_D2)
* N, |" h; H. g. g9 v/ D  }
, x/ M0 @) g$ O( l- ^$ v) ^  ; E' x7 n( ]4 r' a
  ; RW data - 64KB SRAM4(0x38000000)9 l3 B* l4 H: B! c% w! E
  RW_IRAM4 0x38000000 0x0004b000  {  % ^4 S1 d' f4 N3 v2 F8 ^
   *(.RAM_D3)# f! P2 {+ ]% W* A- P2 Q4 X( f
  }4 @( \1 K. H& ^" g6 d# J
}
0 j% E0 ?5 i' o" Z+ k/ G& }9 C
4 A* C) k' q/ Y9 L  |

: y9 F- N9 a, D5 v在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:5 J( C6 r5 r! L4 W
19.JPG & M) `/ O" {3 _' M7 i( K, c

: ~) C0 p* z* @& o链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
4 i9 P! E3 X' f/ H5 `# W6 O 20.JPG 21.JPG 22.JPG 1 C& j& S1 H6 P! l; c% H% ?
25.jpg
& ~( f" ^1 @& Z' c& i$ _6 O, J9 L6 Z. R
6 d* G% I) G* d4 J# h, z
可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:  y& y) q3 r2 p2 U
23.JPG 24.JPG
' p" ^- Q8 ~+ ^& Z% {- b8 d$ o! b7 d, r9 S

1 [1 X  v& ~/ J6 U从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:
9 X6 B  N/ x& a) |) p- c8 e 26.jpg
) @: t! E" r0 I2 J
7 F5 y' ^( p; ]3 _. v3 w7 ?
( Z- W' F) [8 `- _3 @
在main函数中启用SRAM123的时钟,没有效果:# O* M9 a8 N& `" i( \" Q& c0 f
27.JPG $ m6 M% K3 l' f8 z+ T
6 L6 G  m) i( D" `
在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:" i3 ~) C! ~, P8 H+ Z0 P# {) v1 }. T
28.JPG ; t* I: _  M+ Y- @

% P/ O, C$ V( k# ~% y) _: q  w总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。
) z& F- t3 Q$ H* C$ ~
% B% P2 [0 a# W
赞 收藏 评论0 发布时间:2026-7-16 00:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版