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

【经验分享】STM32操作外部SRAM

[复制链接]
STMCU小助手 发布时间:2022-1-29 14:05
外部SRAM实验,让STM32的外部SRAM操作跟内部SRAM一样
5 w5 J6 D$ p9 I1 x4 {
前几天看到论坛有人在问这个问题,我特意去做了这个实验,这样用外部SRAM就跟用内部SRAM一样,不用自己去申请内存,也不用考虑什么内存地址,一切让编译器自己去解决。
        废话不多说,我直接拿外部SRAM实验来修改。在库函数的system_stm32f10x.c这个初始化文件当中其实就已经有外部SRAM的初始化,我们只要增加“#define DATA_IN_ExtSRAM 1”这句宏定义
* K1 i/ U. g& l$ q. D0 h3 q# u4 [

' {) G0 i( ~: ^
        再编译的时候就会把外部SRAM的初始化编译进去,初始化的代码大家可以去看文件中的void SystemInit_ExtMemCtl(void) 这个函数。然后我们在工程设置那里把外部SRAM地址增加进去,如下图

3 w# Y, [! s! U) ^8 o% ?; _3 @, ^

- a4 y4 I/ r9 E. S9 k
       修改启动文件中的中的第39行,把__initial_sp 修改成 __initial_sp  EQU 0x20000000 + Stack_Size
, J4 i, @& Y0 L
        然后我们把Main中的testsram中的地址去掉,让编译器自己去指定地址

* W! l3 I) s+ o% Y
        再把原子哥的外部SRAM的初始化注释掉,因为前面已经在System_init已经初始化了。其实这里我们可以把原子的SRAM.c文件去掉不用它了,我这里没去掉,其实只是为了能正常调用fsmc_sram_test()来测试实验结果
- V0 a1 l9 N8 s* m
        到这里我们可以编译了,下载到开发板,我们就可以看到实验结果
" j! C5 ?5 J4 G# n" S: M* P
        我们继续深入点,看看testsram[]这个大数组到处编译在到哪里去了,用IDA64来反汇编下编译出来的AXF文件
9 ^2 c4 S- l  o% o% ^5 m  }/ w' t
        可以看到testsram这个大数组自动编译到外部sram的0x68000000这个地址上。我们再试试再定义几个大数组看看

4 P# \$ y7 t9 a& O: b! q5 W& l
        再来看看编译后的结果

! o* Y  r# X& L( w
       可以看到每个大数组都由编译器自己分配了内存的地址,压根不用我们自己去定义。
       到这里相信大家会有一个疑问,那编译是怎么来决定把哪些变量定义在内部SRAM,那些定义在外部SRAM。这一点我也研究清楚,我只知道编译会优先把变量都定义外部SRAM,当外部SRAM不够用情况才会定义在内部SRAM上,至于怎么让编译优先使用内部SRAM,我也没有搞明白。目前我能做到的是把已经初始化的全局变量都放在SRAM,做法是修改散列文件,让RW只在内存SRAM上编译。

/ v$ [) `+ u0 N$ `, x" p
       去掉小红框的勾,然后点击Edit我们来修改SRAM.sct文件,也就是编译散列文件
3 W& [8 A- {0 L6 C9 [$ c7 I
       把RW_RAM1中(也就是外部SRAM)的+RW去掉,这样已经初始化的全局变量就只会编译在内部SRAM中
, _, E4 S/ D6 u3 @5 B
       重新编译下工程,再来反汇编下看看编译结果
6 D8 b4 ~6 F7 g) H, n3 i: L

: f3 F9 g; n6 ~: m$ C
4 r/ }9 E. c3 g% x0 S* F
        可以看到usmart_nametab[]这个已经初始化的数组编译在内部SRAM上,adc2[]这个未初始化的数组,数组的大小比较而且能在内部Sram编译得下的,却还是编译在外部SRAM上。
; e+ C" \4 N" H* {- o
        前面没有修改启动文件,其它变量全部在内部SRAM的时候,程序运行是没有问题,减小数组的时候程序运行不起来,修改前面的红字部分后,程序就可以运行起来,但是LCD偶尔正常,偶尔不正常,调试下感觉是延时的问题,没有再继续调试了

# x: r$ u. a' ~4 s
收藏 评论0 发布时间:2022-1-29 14:05

举报

0个回答

所属标签

相似分享

官网相关资源

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