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

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

[复制链接]
donatello1996 发布时间:2026-7-16 00:26
       查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:
* Y/ N/ E8 k) k, B3 r3 } 16.JPG ' k9 N% Z) N7 Z1 a; Q
% {& a6 m; I8 G
: A1 F' c& ?" x
TCM区3 W# ^' l" t. G  p' `, V# ]6 {5 j
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。' D% ~# @3 B3 u5 ?2 ]
8 S. Z9 v) M% e7 S" ?; H3 v, `
7 `/ }2 I* v* l" [
速度:400MHz。
  N" o  z* i7 _  \/ i3 I# U' |* C+ T, f# j
4 g9 L$ _$ Q2 |; w
DTCM地址:0x2000 0000,大小128KB。6 h) a% \4 \9 C$ `
' Z' o+ ], I( l0 Z9 \

! N  e' d. Q$ ]& n) `) fITCM地址:0x0000 0000,大小64KB。
3 D; J& O' L/ T6 c+ Y2 }3 i6 m( P) t  [, A5 _

$ O$ [( _2 F! E, G7 G! P8 ]( Q AXI SRAM区
3 h5 S0 j, b  h  c  A6 n( Q位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。2 S* d( v+ ?& e- i( m7 X

# u  ?( }% x- }, K- W

" ^3 v. y  K8 a- e速度:200MHz。
6 P* Y0 B+ n+ `3 l! O) G
7 X* I# ^; A8 ?2 i. D5 l2 y

( S% {- d  L3 p1 S6 h7 ?6 i% \地址:0x2400 0000,大小512KB。( i; Y3 u0 R& J" J

2 l* F$ b1 p: u3 G# `3 k& M2 z# m

" `) V) _1 e& U2 `% F用途:用途不限,可以用于用户应用数据存储或者LCD显存。
+ t) x$ ]6 Y' y+ J1 Z; |
4 q  Q8 S: Z. Y
. S. J' r. F- Y  K# ^8 `3 w3 J
SRAM1,SRAM2和SRAM3区
2 O7 B. A* U; G/ |8 F! K$ P位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。. b2 h8 ?. B, s3 O

3 v: Q! W7 r* Y: U; d- ?* ~

' g) u0 a6 M$ k  R( d7 F! X6 e4 Z; ~速度:200MHz。, H6 D1 j* g4 c1 X5 J  _

" Z4 I1 \# `, D: n6 F4 n* J
6 p9 M+ |  n. I& u3 |$ G4 V" J
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
* }/ i" j+ V# ^  N: _+ H6 K/ v+ l9 R
* f' S$ ^; x, D$ ^3 Q
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。' A: [6 S+ X( I0 y; d- P& v5 T

$ e4 @8 \  Y' e: M" Q# b

5 T3 l: Z% O- b$ T6 V" N' T$ _# USRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
+ Z. \, X' m  x0 d; l# e! i9 h* d0 p3 A) J9 e7 C) L# M5 b, i
8 _% l; R) u) N' ?
SRAM4区
9 o% Q: Z( g! p$ v! P& d位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
# u2 u: o" i& K% \
# Q, l* O0 e0 c5 Y/ S2 a
/ K$ k$ f6 b# A( a
速度:200MHz。6 F1 Z) r4 n" `
$ _& B8 f# S! d! j# ^

  G: a/ j+ ~: `$ m. `, V/ C4 d9 a" m% a地址:0x3800 0000,大小64KB。. I4 ?) A( l6 m* O5 J: }  f

/ v" X4 r3 N& F3 ?0 l

! X: h' H5 _! {# R8 s4 k而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:
$ R- f# s& ]" g 17.JPG ) S. i0 h& _9 U- L
- M/ z' \& ]; p, Q

0 o9 C. ]" v' ]想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:/ P. x; \: }9 h) m" r8 y" L5 `5 D
18.JPG
% M# C4 A3 Z8 Q, }" [. cLR_IROM1 0x08000000 0x00200000  {    ; load region size_region/ ]9 A  ~% T! [7 a
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address' }! P1 M. n2 p
   *.o (RESET, +First). G4 w% v2 e( C# l3 `. i
   *(InRoot$$Sections)# a+ d! H7 l' |: M" O
   .ANY (+RO)' r* x6 r9 b  V& Z5 F
  }0 r5 e" l$ b" E+ _4 H/ X8 o& O9 S
  
2 T5 ^) Q/ J8 v9 I9 q$ b  i0 _. F  ; RW data - 128KB DTCM- B3 X" e7 U  B1 y& ]5 a7 Q
  RW_IRAM1 0x20000000 0x00020000  {  $ v, t" I, {' [) S, ^6 B( p
   .ANY (+RW +ZI)0 K& @  O3 Q+ s, _3 z4 `
  }
0 n% f5 v6 h: R  
: f% W( ]$ ~$ I9 h7 ?$ C* i! l% n  ; RW data - 512KB AXI SRAM
9 a4 K2 T6 M- U* E" c  z9 g. C: T  RW_IRAM2 0x24000000 0x00080000  {  ! N" @" B) \7 r4 p4 I9 ^* R0 y, T& s
   *(.RAM_D1)
9 X1 ?; B- B+ X+ ?- l: P  }
" k1 Y0 I* W* }; H5 n  5 o, u8 u1 N& J! l; `: o
  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)+ [$ a, X, G: |
  RW_IRAM3 0x30000000 0x0004b000  {  8 w# z) B! @( }) T, i
   *(.RAM_D2) 0 H7 `- v- K4 g9 j: B0 Z. {4 \: X+ t; g
  }8 `; A8 x: t4 m+ u
  
+ A/ X) }' e2 _+ r8 Z$ Q3 @  ; RW data - 64KB SRAM4(0x38000000): j* ^3 R9 z& H: }- q6 f6 E9 ^; d4 |
  RW_IRAM4 0x38000000 0x0004b000  {  ( Q* {2 T5 j* d- h+ q
   *(.RAM_D3)
/ G8 u2 v4 W! F5 z! }* a  D/ x7 @  }
3 x/ f/ d: H% W" A% H& G}
- Z& W4 e, i+ p) R& M# j6 ^6 f( K
5 M* z0 i' m' E2 b

, N3 C/ a/ a" \. `6 P+ P0 D5 I在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:6 J$ C2 v( Q3 Z; T, ]0 \- a& ]$ B
19.JPG
- h0 m7 f: h" ]+ _% D% y  |  `( Z/ X4 H4 ~8 t, m, x
链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
, L  D% A# R1 X& N5 b4 v 20.JPG 21.JPG 22.JPG
' [% m$ n- k# R0 t4 s* v& S 25.jpg + a4 Y% N2 A0 j5 X5 i8 v8 U

6 g+ V1 ^) u" k0 a) [0 `/ m; V& j
5 ~3 U, q2 Q0 B; k7 q
可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:$ ~2 B" ?4 z6 e' L+ J' {
23.JPG 24.JPG 7 E0 k. \, v, _) U7 @9 c/ p

9 _8 x  m4 x! M( ^

0 m" @) n0 e7 n从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:
% z4 C% Z/ L! F5 z: |0 I! T! L6 K 26.jpg
0 X) b# i5 [* d# m" j2 b3 f7 G' I5 H6 C7 w/ K
( E8 Z: [4 J0 I: p
在main函数中启用SRAM123的时钟,没有效果:
: b1 E6 I: _$ g9 M4 c 27.JPG
& ?: U  a- S" j' j) M+ A7 {; P/ q& d: w( o7 U5 b: s/ n  s
在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:
2 C4 y+ g4 H/ B% @7 e/ R7 M* F 28.JPG % D2 t9 t6 X' K3 o) T7 O3 C4 V
, S/ q- o3 }" |" p( I: R3 G
总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。+ i& [" |" s% n# a' ^- d

( f( e, [% |& U3 E3 ]
赞 收藏 评论0 发布时间:2026-7-16 00:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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