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

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

[复制链接]
donatello1996 发布时间:2026-7-16 00:26
       查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:
4 h/ P' g: K1 [4 D 16.JPG
) r: @# T4 D; a/ |6 _) @& M( o# k+ b
, e7 T: X; L$ M5 g* t, S

3 B8 c. c: g$ t8 l) g# w: u8 f TCM区
' H& f( N- H) kTCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。" `; T2 ?1 H0 }1 o6 z' K

1 |2 e* Z' s+ U( P: U  c+ L

5 D) L; T9 \8 t速度:400MHz。# S/ F+ p5 ?% o' a( p% }
) R6 W4 d0 Q5 x/ |3 k" T2 u

4 V  {9 Y8 v# @1 G4 y8 w) SDTCM地址:0x2000 0000,大小128KB。
, z' S8 R' {2 U4 k: o7 r3 k% x8 v/ H4 C+ M4 E! X. d) K, }
) U7 k* z/ J. Y2 a) t+ r" A
ITCM地址:0x0000 0000,大小64KB。- U9 o/ @0 @: S  S

" q2 W- z* [; P3 ~

! Z2 P8 r$ O& b" \4 Q AXI SRAM区
6 z' m8 \$ F% M) C5 w7 z3 N: p位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
) V% K( Z* X6 a  P# H# L" r' w. k. y4 C% P
4 `' ~* H$ ]. C' E# _
速度:200MHz。4 d5 [' Z( q9 ?4 V

. t$ q0 `$ z! @6 U% O

' H& r; Y( p- Y6 y' v地址:0x2400 0000,大小512KB。
/ Y& R+ |- L+ W- |
: n7 H% o4 e- F; z2 l

8 B$ `- ^$ L  j用途:用途不限,可以用于用户应用数据存储或者LCD显存。
7 s; T4 ^7 x, }8 `) S  u  m7 N8 `( e7 F: F" n
% z! E$ r6 A3 l9 M# d, g
SRAM1,SRAM2和SRAM3区9 E5 {) T/ p4 Y3 ~
位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。# |. E' j, _  y
- u# i, g5 ~1 q8 K: z/ _
6 P+ m& J- ~# d# b( i
速度:200MHz。
( W$ J# _, H; r/ u5 K% O8 h8 }, f0 s7 g2 ?$ x6 o
6 I! j) Y  N6 x( \! w4 S$ M
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。
5 M# t+ L7 u# S1 c7 \+ x: P6 [1 X1 q6 R+ o% d5 }
4 P3 y  g5 Q6 U" v+ |
SRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
! f8 R& ^' R, H8 r3 i
3 m! P1 @. y5 |, W! i9 H! a
9 W! H! H9 H! K# [) \7 l( C6 d
SRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。: W5 B  ~' x$ ?0 \- J- k" m

( A, b0 k8 J9 y" m( y0 A

8 C( M, b  n; ~0 {SRAM4区: ^' W2 V* G1 z, F$ n& D* A& t* z
位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。9 S1 j+ @* D" r: S3 k/ G5 p

, _5 s# k: p$ ]0 w( u6 @
+ R4 w9 h' r  v! x- k  h
速度:200MHz。! @; t# j+ M- ^( [' }: I9 R7 W- E# u7 p

# X/ L, r; L5 |) q$ }1 V
0 C0 \; ]' U4 }. B3 E' W! F% A
地址:0x3800 0000,大小64KB。2 q; v# c" P3 ~$ g* M, q0 a$ Z' N) v0 S7 v
3 s: w* U+ R% Q% {

; W' O5 }# }( C* m而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:9 K% H6 _* q# F7 l# }' U# f
17.JPG 3 s: l, f6 s* }4 Z; {
1 ~) m% l7 N0 w; L' e9 B
6 U: J, ?8 i& b; u1 A  t/ R+ R
想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:
- P3 t6 o8 L* R  T5 [+ C5 K( I 18.JPG . ?# y* d; n' r+ M" s
LR_IROM1 0x08000000 0x00200000  {    ; load region size_region
! l+ Q: f  W8 P$ Q; Q. V9 R, q  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address* J$ _* \; H4 a6 D& b) v1 H
   *.o (RESET, +First), c1 s4 e( K( |# t: E3 ~, E% a
   *(InRoot$$Sections)
! q, H/ [' W- ]   .ANY (+RO)6 P) h4 Z2 r8 A: `5 m' i- z
  }2 }0 K9 c" I& d$ H8 [
  % r, B) m. k: K% V+ A$ W& k1 A
  ; RW data - 128KB DTCM
; C/ C7 N. I* @7 t  RW_IRAM1 0x20000000 0x00020000  {  
' k6 H; y2 ~' n- _   .ANY (+RW +ZI)
8 S; z# t) u6 u- Q6 ^7 Q6 c  }
# w6 X: V. i, n! y  - r" \! k; d5 ?1 N3 o/ H
  ; RW data - 512KB AXI SRAM: J; d: I) `& C' s
  RW_IRAM2 0x24000000 0x00080000  {  . W2 E# I4 Z0 F2 x- d4 `
   *(.RAM_D1)
. Q8 r: t; J$ j  y  }
7 s* C# z- _3 I  R, |5 L- W  
3 U) P! a1 Y5 }  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
" ?6 u# {4 m1 @  RW_IRAM3 0x30000000 0x0004b000  {  1 {; j( n* L& y: k1 Z  P
   *(.RAM_D2)
2 V- ]9 D! S) V" P" ?# {. ?  }7 D3 w* A) Z5 L0 f  D. X
  
4 L( D) N+ D; r3 _' |* @# i  ; RW data - 64KB SRAM4(0x38000000)
/ _+ r- Z% w+ ^* q$ S+ W0 n; ]1 ^  RW_IRAM4 0x38000000 0x0004b000  {  
9 F9 L5 ^4 o6 Q  u2 _" {   *(.RAM_D3): S9 S$ c4 u( s" a; P
  }
' y' x  e0 @, u2 u, {. V}
7 [* P1 ]% i1 C% R5 E: p! p
  u" d: k. u+ i; P9 y) d
: m# Q9 ]4 L2 w9 ]
在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:
, v; a1 y6 R1 \. ~& f0 f2 a 19.JPG
; L: x/ Q3 K' Z$ _* G: ~
9 ~, X2 s- \, w链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
7 a$ `" f; u9 d2 R% f: V 20.JPG 21.JPG 22.JPG
) ?$ h& g  Y6 ^- w6 m& s 25.jpg
! h# n- |- o5 F# P
% @* s7 F" J. o+ f# y: _

# [4 A/ M9 W! Y; F0 K可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:( N5 X" O1 c8 Z0 c! I
23.JPG 24.JPG 8 j: v: |- v( s! m9 Z

! a4 K* I: W* b# N
; ]+ o8 T( ?/ ~5 \5 u) r
从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:
* ^! N% ^4 }! C! o2 t' ]$ e 26.jpg 9 t; l" _; o- q7 X

& V6 X6 j3 p6 S7 Z
4 I6 E  V' V8 f! J2 }
在main函数中启用SRAM123的时钟,没有效果:, I3 |( ^, e: i( P
27.JPG
/ D( q  L. m/ q5 I9 W1 P/ A: U, \3 w! k0 S& Z* ?
在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:
$ o8 S! R: j, M/ e) U$ V 28.JPG
5 ?% L0 o3 z( ~1 ]6 Q* t) `4 Y
' [! ]3 h6 ~6 Z2 Z4 |3 b总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。) m% J5 k6 g4 \3 b
7 d7 }1 z4 [0 X' q( `  |" Q
赞 收藏 评论0 发布时间:2026-7-16 00:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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