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

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

[复制链接]
donatello1996 发布时间:2026-7-16 00:26
       查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:
# l, |# {8 Q. z, u 16.JPG
& b5 B* |  V4 p" {0 Q( w
9 m' L$ F- a0 r- M
! q9 p7 P- y5 u0 R
TCM区4 O4 d/ {- j% H' ]
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。( b. U( Q( e% L+ o3 ]3 V& G2 A& j
0 v- z9 G* Q8 X
& e7 J+ |" N" o! g' X
速度:400MHz。; H( T& p" [# w" U6 C7 P+ j7 T

# d& [- V$ D# r/ {- e0 @& [9 R
2 H4 H4 Q* Y4 q6 r& E# R$ f. e
DTCM地址:0x2000 0000,大小128KB。
1 }1 x7 V0 H+ ]+ A9 K- n% h$ C0 a1 c) H# l8 t  J) Y
5 t- z' X; s) o) @
ITCM地址:0x0000 0000,大小64KB。
$ \0 ?% [. T8 |: C  l0 L& Z, W* ^; N6 a

. Q0 T; q# G  U& _4 j AXI SRAM区
$ Q0 O. b2 I* l8 H) l, B+ V. |. P位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
* {4 N. O& Z( V8 c. G! g! q: ~0 M3 ^
5 u2 T) l3 V6 u- o: p1 H
速度:200MHz。. ^# R0 a* g/ b+ G: R) G  g7 e
9 j+ Z/ M- M4 ^* c$ r+ k
0 Y* @; V! u' ]* g6 p2 {6 ]6 ~' z3 f
地址:0x2400 0000,大小512KB。
& \+ G$ E. k& y  h  P* K- S8 u; q6 S( J% V! w/ }: |+ W$ e

0 n+ Z- p) @8 Z, y1 ?8 `9 Z+ s9 j用途:用途不限,可以用于用户应用数据存储或者LCD显存。
# |! a7 K7 C2 {) k$ @2 V, `2 a: B+ R1 E! A# c

3 _& v2 s% }  {7 KSRAM1,SRAM2和SRAM3区4 `. t6 t- K' k# [
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。: _  y: K4 y3 \5 F$ a" Y/ \
7 H7 }0 K! d& D. J

# }6 n# o+ B) R$ K速度:200MHz。1 n/ [4 O3 E1 g

% k# r' e8 _4 D7 f7 ~' B) k; {
! j- D. |, U( |, K4 U, d, [9 m
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。% o# o0 _2 \4 ^: h7 J
" L, ?/ K' Z  Z4 Z2 }
5 F( O+ {7 V' X/ ]) r7 s8 G
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。" _7 [# V% U. A2 G  I
% |' f( c% K0 t* E

6 b# _: X: B& m$ K: W/ m' s' g% PSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
5 c& n& ^' J* d0 r" Y. n+ e& H/ f

/ K$ T/ T- T( R. N8 H$ cSRAM4区
) L0 h2 ]5 |0 A( i# K3 D$ b位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。* L$ e  b- c  d$ X8 v. I
( E* M" K4 s  M5 E

: N9 z# M" T' q速度:200MHz。
: `: u  K6 f6 l0 }2 h+ o/ z
% r7 c# C4 n9 J1 M. V6 [" M: z

1 r& x& O  B* H$ z) g% s+ K地址:0x3800 0000,大小64KB。
5 ?; X0 |5 S8 _* I% c9 `: M2 [6 a$ M2 N5 d( L; p1 s5 J$ L

0 u/ y/ H7 a* I3 U' E8 x+ V/ d而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:' U) P$ ~* [! g
17.JPG
) _# ?. y9 z8 `( U% a$ Z
/ i. w6 U5 m# S7 q: q+ ?5 w
, {5 y+ k2 t5 q3 W3 G
想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:: O; V, I+ g1 C. P6 K
18.JPG # [# m9 _) l) L
LR_IROM1 0x08000000 0x00200000  {    ; load region size_region! O4 O! ~1 \9 F4 \2 R# |- D
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address  m8 _0 _9 E) ?* k! K
   *.o (RESET, +First)
6 n- F, w' Y* \% o: T+ R5 U1 d   *(InRoot$$Sections)! ~- F: T& t( r" c# t
   .ANY (+RO)
9 n* ~; z( P9 F; v) `  }9 G$ I2 y# f. [, D8 A" [
  # S# t3 e: W  D. ~
  ; RW data - 128KB DTCM
; U4 u4 |3 X) l& ]  P  RW_IRAM1 0x20000000 0x00020000  {  ; B. }5 i) G1 \7 _- ~. ^  A
   .ANY (+RW +ZI)
5 l3 m# j2 Q" ?$ Z  }
( v8 a9 W" ]! l8 Y- S. U  , g6 [7 F4 v& C) U/ p: h1 ~
  ; RW data - 512KB AXI SRAM$ p, q" e& u6 @/ A/ u+ X
  RW_IRAM2 0x24000000 0x00080000  {  0 f7 ]( g) A% t6 K
   *(.RAM_D1)
5 N/ q; t) F: a# Q' A% O! }3 e3 x  }
/ J( u1 h4 X" `  , s4 f; @- k4 z# m  D
  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
* m& x) v( E' [3 ]  RW_IRAM3 0x30000000 0x0004b000  {  & F+ I" ?8 i  t# g1 Q; Y
   *(.RAM_D2)
& T2 P, d* I8 G! I6 B  P" |+ W  }& [2 @' ~9 G: L* Z0 r3 `
  8 E8 H. Y$ i/ S0 x8 Z) t; d5 x3 t
  ; RW data - 64KB SRAM4(0x38000000)( L6 Q# j' {* q
  RW_IRAM4 0x38000000 0x0004b000  {  ) T* v- J% V2 x" x6 k0 ^
   *(.RAM_D3)3 d; e1 X4 L8 f! E9 \" \
  }
; \3 b- ^7 F7 u' a; j1 n}
% o# c# y4 ?! j' \) ?) I
( `; ^- I, W. d8 o

0 [. Z, k' R! X9 |+ Q' e在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:
3 ], P$ }& J9 s9 W1 d4 l 19.JPG 7 Q* ?7 x5 p- d4 l# W! m( `
. s4 m5 u) j6 j2 F
链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
! _2 T1 G: i% o5 |2 ^& c 20.JPG 21.JPG 22.JPG
& ^! K  z9 a& o  { 25.jpg
3 P2 C, \! q7 v5 W; c  d! v5 b* V# f
+ Z1 z( d1 X  }
可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:) q/ D6 w2 O* t8 e! I' A
23.JPG 24.JPG
  [. }$ Y2 q/ M0 d
9 H3 Q6 \0 R# n4 F
9 s( Z" a$ t, n9 n: O8 y8 J. F
从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:. ]/ [  s1 [" j# @$ M
26.jpg
2 D* j- F) U4 J8 N5 B
1 w- a' u# e2 M6 z9 C/ a

- ~0 u- _  W8 `# |8 T在main函数中启用SRAM123的时钟,没有效果:7 y. e: X+ A' V+ M$ N. v5 m
27.JPG
: x" T: s$ b1 Z4 a- n* `' e
# Q/ [: u2 F. J1 @# K在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:. n1 u4 M& @5 u
28.JPG
" e9 L9 B( F* }) d- Z* V
  M2 f' Z4 y1 E- \总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。
/ h* S3 |. T; n# w4 N$ j8 n6 P8 ]4 q; j' }/ n7 `6 {3 g
赞 收藏 评论0 发布时间:2026-7-16 00:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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