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

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

[复制链接]
donatello1996 发布时间:2026-7-16 00:26
       查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:
. I, a  \, J; \( y, M) R. n2 K 16.JPG 4 v5 V( y% ^- r6 ~, U1 H, Q
9 I, _) |/ Z$ K) b' }0 D

: Y# G7 B, U1 p- u4 Y TCM区
; n: l$ b) C1 w/ B5 G9 qTCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。
! }( [: t, m5 b) c0 J# ]9 g8 v8 p$ W! O0 J9 D3 y* {( |

3 }1 ?% q9 }2 }- l( D速度:400MHz。
/ `6 m5 t( }3 k4 f- C4 @
! O6 f) r4 O. E5 h
9 K) }- M! s5 ?" F4 ~% O9 [1 t: r
DTCM地址:0x2000 0000,大小128KB。
2 N. g/ U8 ^+ p* b) z5 [# b+ F
- [4 u9 I6 D; T

/ q; g. r8 @. c* x( UITCM地址:0x0000 0000,大小64KB。
9 F: x) ?* ?4 |8 d5 G; |# v  {! e
( t# p2 u0 D' L/ N/ i. W

8 q! ^1 V/ @6 _% e; N& H. c AXI SRAM区) k/ _8 e! Z3 T- G, K
位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。
# l0 t# A; J  N, v2 p
3 H& U% q" G1 ?# ~" z( ^
5 Q$ Z* M2 Q% t6 A" }' c: F, I
速度:200MHz。
6 P! F! |1 b: j* b
" k2 C" x6 D2 a" ]6 u) p9 o
& c2 q3 g  s" J
地址:0x2400 0000,大小512KB。
8 k: b' E/ h, i$ K* B+ {, G- K$ N; ]1 o9 E; J6 y

% ]+ \) J! S3 R8 P4 k用途:用途不限,可以用于用户应用数据存储或者LCD显存。: G) O7 [5 {. [
0 G0 ~  U9 e9 G9 y# X( Q

" N" E. T# X# {: o1 |) u( HSRAM1,SRAM2和SRAM3区
. L3 [7 v! D1 l1 H8 q3 y8 n位于D2域,数据带宽是32bit,挂在AHB总线上。除了D3域中的BDMB主控不能访问这三块SRAM,其它都可以访问这几个RAM区。
3 T! [- l0 i+ M, t: v% M5 ]9 K" |2 W1 Y8 z9 Z7 _* p
2 G7 ]; P% [+ T3 e4 ]
速度:200MHz。
" }7 l, H1 W8 K" I5 B/ ^! H% d; l0 Q8 A, H
3 Q' v# u8 }8 u% y1 ?
SRAM1:地址0x3000 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以当D1域断电后用于运行程序代码。- z+ i  C+ Y" q! _; ]

! \; P8 N6 ?# U! K9 I/ X

1 j, o' i7 f$ x+ bSRAM2:地址0x3002 0000,大小128KB,用途不限,可用于D2域中的DMA缓冲,也可以用于用户数据存取。
9 R2 h: ?, y* ]- h) q+ W  K* C) U4 d& c4 o& `

4 ^( G" W, r; ]5 QSRAM3:地址0x3004 0000,大小32KB,用途不限,主要用于以太网和USB的缓冲。
0 @7 P# Q+ f" X& H* j, A% }8 A- Q% v
+ K  M# ?# u8 U8 e# h2 M% t

0 {: ^2 W7 L* J; P0 n) b6 S  pSRAM4区
- u) O# b- P' ]- |6 z, T/ u: h位于D3域,数据带宽是32bit,挂在AHB总线上,大部分主控都能访这块SRAM区。
: A" P& [- \8 [* h
1 @; H5 w* c) v9 Q2 W
9 j2 c) f" k6 X2 E! m& V7 X
速度:200MHz。
& |( e! m3 M9 @3 d' V4 R4 [3 @- k+ W) c4 w) g
, s. P5 O7 |+ m: w; Y2 J; u
地址:0x3800 0000,大小64KB。3 L# Q4 z+ K6 E
5 D' a( k4 Q0 q9 k/ V( v" D
( @% p0 x8 r; ?$ U
而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:, ^" t; m3 b' Z! G
17.JPG 0 h# D6 U) p# W! L( M, ?8 X
8 \; Y1 E& N' Z& {7 U9 A; o

7 S  H7 E8 K! a$ _, L9 e6 L想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:
. v2 q+ ^  ~( W- S$ L4 F 18.JPG
! x' U: [3 W( T. t; s2 v5 rLR_IROM1 0x08000000 0x00200000  {    ; load region size_region
& N: F! B" `1 \/ W  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address- d( T% L# D, }/ |8 D1 m' u4 H
   *.o (RESET, +First)+ J5 z. q; y6 C9 }0 o2 O! y* r: d5 [/ V
   *(InRoot$$Sections)9 s1 y5 l8 H& ]0 h/ o! L
   .ANY (+RO)
% U0 \, {& _" m% A& \  }9 `% l5 h& `# z- j# J+ W+ g
  5 Q+ q0 |8 h% a& w7 j) @; ]
  ; RW data - 128KB DTCM( K" x+ U. P! @1 F! p
  RW_IRAM1 0x20000000 0x00020000  {  
3 C+ f0 ]) _6 C- G   .ANY (+RW +ZI)
, w* a$ ~9 c/ i% e3 @  }4 L# E0 ~" ]; B+ P& g/ q0 l5 j
  
2 h9 t# C8 |( H- C" s( I  ; RW data - 512KB AXI SRAM
5 O8 a" l% i: h0 T& P* p& G# o  RW_IRAM2 0x24000000 0x00080000  {  ' D1 D% b* I1 M
   *(.RAM_D1) 4 Y. K+ Z% q1 ~
  }
- P! j- v4 R; `* a  
- p8 B7 q1 O7 k+ o: [$ E  ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
! ]6 Y4 e1 @; S: J  RW_IRAM3 0x30000000 0x0004b000  {  , w+ ^9 H0 o; G3 M3 Q
   *(.RAM_D2)
% Z  V+ ^9 v# E; X  }  h! r+ h6 T( k) r
  
' N; D" y! w" L5 H3 A% U  ; RW data - 64KB SRAM4(0x38000000)5 H; p0 J& R) s- W) c: n; Q
  RW_IRAM4 0x38000000 0x0004b000  {  
% `/ E- I; e7 U+ q  \% W# I   *(.RAM_D3)
: y8 m( W& O* m2 I  }
/ v  a1 p; n1 Q& E- d8 M}- @. @( d4 N8 {% E

# K' s# v) U' @; y8 i5 V  ?4 y1 i

) f5 n* b3 O* ~6 {在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:) A. i% w2 w/ t6 W( J2 I; i% S
19.JPG ( ]" ~0 W/ _: @5 x# G# _
% O* j: ^# A5 A/ T& o0 k
链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
/ n5 F# K4 o! [$ p0 b 20.JPG 21.JPG 22.JPG 1 Y+ x4 X( M& u; B
25.jpg
" f+ ]$ r( p! t1 l  Y8 c! Q, P4 K2 Q7 o7 ^  _
& }; T& j7 x2 d
可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:9 d4 Y9 |4 g" f
23.JPG 24.JPG
" \. t+ h; F3 G  b1 H8 \9 ~  V& y3 Z# Y7 M8 Q+ {5 n% \
9 A7 ~- ]& r* {8 Q% n: M+ w
从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:
7 q& e3 k& t' v! q, c 26.jpg
& s% P3 O9 `/ e* l4 J2 W/ N8 l8 v" g) o9 D' c, c4 {

9 _, l2 \8 j4 {在main函数中启用SRAM123的时钟,没有效果:# O6 d% G5 ^, b9 U4 X
27.JPG 1 S% M; Y' O6 y- Z  ^
0 }0 E! i' L2 B" }
在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:
0 R* m! O; i# G+ w& ~+ j/ I 28.JPG
$ G( I2 l. n4 V& h3 h; v4 a4 }
" C8 D6 R7 _. E) d+ n) B, v总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。( C# ~- l, c4 C1 `

4 a2 q. a0 ?8 p! N7 T# ~7 C! \( w
赞 收藏 评论0 发布时间:2026-7-16 00:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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