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

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

[复制链接]
donatello1996 发布时间:2026-7-16 00:26
       查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:+ ?# s" L6 Q1 g- Q
16.JPG
( V7 D& ?+ F4 p, T1 N
9 d  S/ t, x, H; s# u
$ g2 v! g  z% s( }# F3 |
TCM区
% M. h, Q! j! d% t3 m9 U) \TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
. L. W, Q1 J/ d- j0 _6 t
! ]4 g9 L. D6 R6 s% V
% s6 b4 J% S) N+ u5 v; [1 \5 x6 Z
速度:400MHz。
% F( h' e( Z* M4 K+ i. ~7 F& ~
. N, \4 c) d- \! c

2 B5 U* f) R6 N& wDTCM地址:0x2000 0000,大小128KB。
; I5 i/ Q( o/ Y+ ]  K% {4 c8 ~
& _$ f4 ]& ~! j$ \; L) ~
$ a; q) l: v. L3 V
ITCM地址:0x0000 0000,大小64KB。0 n5 ]8 W; n4 k! u, R: M- D6 b
* b3 z; z8 n3 K/ ~( f  g

9 A+ |$ j6 `3 R& v# ^8 k; m% f AXI SRAM区! I( j& z! A! }1 T; [% T. c5 _+ ~0 p% _
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。5 ^+ c; @! `1 K$ a0 P- u; x0 I. |

5 a9 u* _7 m' Q) T" h8 X) W9 M0 a6 E

% j; j5 [" O8 G0 n4 |' H速度:200MHz。
0 V6 ~0 {0 Z6 u  s  G
& g5 B1 Y1 t; l6 [: Z" D
" ?- p8 b" Q* H1 `# Q) f
地址:0x2400 0000,大小512KB。
5 t0 O( U( B! _8 I  |' ~; [$ [% j; M

8 N. i# W$ l: l$ x$ H用途:用途不限,可以用于用户应用数据存储或者LCD显存。  K) ^  A( K& m) A% R

, H9 f. H  t9 B& I5 e
6 L8 m( C! y/ ^; o% l6 S& K8 c
SRAM1,SRAM2和SRAM3区/ J! q/ E0 Y4 z* f' j
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。! w: E  b- C, t/ |" ^
, V. h& w/ A2 Y' R2 u3 _2 I
3 ?7 w+ @6 t) N  \" q
速度:200MHz。
$ o. O8 J- F9 U# i2 m
6 x. D  z1 u; Q9 T

* K' k# }: X4 r$ z4 [SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
9 s5 D& G, y$ b" ]/ @- g$ ^. k/ l3 |2 l, e& f  j5 w: x
$ K! K. ]& `  Q$ Y& I% ~8 K
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。/ I; }; ^* W3 d7 P
6 r- |. A, t7 y3 W; o" Z2 A
3 \- ?( l# v: w  |- U
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
% q6 ^, E3 I9 I: R2 H
, E( }) d2 F7 m; j/ U
: L: f* s' P0 Z  L+ P
SRAM4区
$ }1 t4 T5 Q5 F- J; g- b; J位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
2 I! L, z/ Y  h& P+ k4 N. u3 l
+ {- {( _8 g# N8 i5 x( _

  i' T# y( F, I速度:200MHz。
* r7 x# r  X/ F6 X$ D* V" O9 S. q" f3 J
8 ?+ P" ^  D) p( P
2 I! K3 A: p$ R; p; r8 b4 r
地址:0x3800 0000,大小64KB。
/ \6 C& R6 F& ?! ^" L7 q. B# s9 ]" J  w0 u/ D/ n4 g

! G( X! v  ?: v- D2 i而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:: K( K0 A8 ~% N6 y% S* f
17.JPG
8 U! Y( r- T" q8 s3 K- ~( v
$ Z( K; Y1 n- M) S. j

" N( q2 A, A% s, O4 t, p想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:8 q, I2 V9 R3 @* u8 K- m- J3 C5 z+ G
18.JPG . Y; }* _: t& v9 m# G
LR_IROM1 0x08000000 0x00200000  {    ; load region size_region- {6 r& _9 ]9 ?- [) N% y
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
, ?# {# h% A( C5 x# e( j8 \9 E   *.o (RESET, +First)9 [# t  R( J1 ?
   *(InRoot$$Sections)- F) \. |  s( j1 q4 E
   .ANY (+RO)
) l% {6 H  R1 A! v- C* v  }% i8 W) W/ h2 Q: h- `
  ' ?0 R3 A9 p$ S
  ; RW data - 128KB DTCM6 p; `8 }) a/ l& ?
  RW_IRAM1 0x20000000 0x00020000  {  # O4 `7 Z( _3 {: j6 `9 V
   .ANY (+RW +ZI)
5 B2 l" P) X% j+ j# W  }# Y. p  ]% w: R0 u
  8 s/ @7 C- |) ^" Y7 u
  ; RW data - 512KB AXI SRAM
$ N0 l0 H1 T  _5 W7 s  RW_IRAM2 0x24000000 0x00080000  {  
' j8 c7 v) w5 y: N- F   *(.RAM_D1)
" X' E( p) ^4 `& ^( I: u  }
* v0 G: X8 V% t+ i5 D) q8 ^  # ~& O/ w, }% g3 C$ x+ j  T
  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
+ b$ k" \2 I9 o, h2 ]( {  RW_IRAM3 0x30000000 0x0004b000  {  
, E0 T# r/ N& ~# P/ ~8 C3 J   *(.RAM_D2) & T, l6 V7 o) p' R
  }
5 ~# ^' ~6 Q. f! s6 @3 K  % ?7 u% k1 W* j$ Z) X
  ; RW data - 64KB SRAM4(0x38000000)
0 t1 K) x! c. A* b" P  RW_IRAM4 0x38000000 0x0004b000  {  
' C. V+ A8 z* W5 i3 ]9 c( _: |   *(.RAM_D3)) x: u6 {' b2 F% b( e/ x% c. u
  }9 ^% u6 _+ P' [9 C5 y# d9 ]$ a
}
& S2 A+ }: P4 ]' a' j" Z: g0 N2 R0 g, S" A
% z8 b# b3 h6 v# t# o% n
在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:2 J9 M  V: O9 }: K7 Y( `! G3 H
19.JPG
# w, [$ E, p0 }0 _& c  l" r; q
$ o9 r$ L5 y; a4 {* {链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
# g3 C- @7 E, \0 F# E 20.JPG 21.JPG 22.JPG ' u) C0 ?8 Z: A5 S9 i* ]& `) {$ x, i
25.jpg
8 l# V6 m  ~% ]% O  U3 t( e* o4 R

3 t7 ~% A0 I* K$ K! z' h/ @. n可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:
3 `: G/ f: Q0 L' Y4 a 23.JPG 24.JPG 7 E9 N- r3 P+ s6 S

' f' O# I) B+ E) \. D6 E

2 g6 K/ |! s4 b7 n2 m3 k从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:
2 n6 {7 w" _  B- X4 B  Y 26.jpg ( R3 f/ u' I+ I  Z: t

2 D/ R/ z; G7 t8 T& J1 Y& B" C2 t
3 U" l* \( }+ P- q0 H) b( a
在main函数中启用SRAM123的时钟,没有效果:: X8 n5 a* q3 k9 K9 C
27.JPG 9 a* [$ V% E$ {3 v9 X
' W4 s5 f1 [( X
在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:0 k) |: @+ j8 V9 Z! L+ w: j8 g
28.JPG
, E& ^8 I/ K8 S: v, S+ B" f/ [  H1 k$ u% O4 B4 d# y
总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。
* |- P  o( k4 N4 z; D* U
! [, }( s+ E  h4 Z- t
收藏 评论0 发布时间:2026-7-16 00:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版