[STM32F4] STM32外扩SRAM怎么使用

[复制链接]
23000|25
 楼主| chenferrari 发表于 2014-8-8 15:05 | 显示全部楼层 |阅读模式
这几天做一些数据处理,用到大的内存,STM32F407的芯片,自带192KB的竟然不够!!!现在外扩有一个1M的SRAM,这个要怎么使用?电路部分已经接好,就是程序里面要怎么设置,就可以在KEIL里面直接申请一个大的内存空间来用?谢谢。。。
wsd1b 发表于 2014-8-8 15:13 | 显示全部楼层
需要配置FSMC,具体配置方式要根据你的板子连接外部SRAM的情况来定,网上找个简单的例子,在结合参考的datashit来改一下就可以了
airwill 发表于 2014-8-8 16:09 | 显示全部楼层
现在外扩有一个1M的SRAM,这个要怎么使用?电路部分已经接好,就是程序里面要怎么设置,就可以在KEIL里面直接申请一个大的内存空间来用?

很奇怪, 还没有搞明白怎么使用, 电路就已经接好?!
软件方面: 外设库里参考例程, 直接可以参考, 倒是硬件调试, 上来的工作也不小.
zzyybb22 发表于 2014-8-8 17:27 | 显示全部楼层
配置fsmc后 mdk设置外部的sram,让编译器可以分配这段内存
grant_jx 发表于 2014-8-8 18:32 | 显示全部楼层
初始化配好FSMC,内存加载文件定好外扩的RAM范围,调用的时候直接申请地址啊。

不知道就去看看Keil下的例程,我记得keil的官方版有这个配置例程
\MDK4\ARM\Boards\ST\STM3210E-EVAL\RTX_Blinky\startup_stm32f10x_hd.asm

;* Version            : V3.5.0
;* Date               : 11-March-2011
;* Description        : STM32F10x High Density Devices vector table for MDK-ARM
;*                      toolchain.
;*                      This module performs:
;*                      - Set the initial SP
;*                      - Set the initial PC == Reset_Handler
;*                      - Set the vector table entries with the exceptions ISR address
;*                      - Configure the clock system and also configure the external
;*                        SRAM mounted on STM3210E-EVAL board to be used as data
;*                        memory (optional, to be enabled by user)

;*                      - Branches to __main in the C library (which eventually
;*                        calls main()).
;*                      After Reset the CortexM3 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>   
mmuuss586 发表于 2014-8-8 18:34 | 显示全部楼层
捕获.JPG
还需要配置下这个地方
cmyldd 发表于 2014-8-9 23:09 | 显示全部楼层
学习了
KC_CEC 发表于 2014-8-9 23:22 | 显示全部楼层
也可以参考原子的内存管理一章,使用动态内存分配使利用率比较高
 楼主| chenferrari 发表于 2014-8-11 10:14 | 显示全部楼层
wsd1b 发表于 2014-8-8 15:13
需要配置FSMC,具体配置方式要根据你的板子连接外部SRAM的情况来定,网上找个简单的例子,在结合参考的data ...

找到一些例子,是用函数接口方式访问,类似于EEPROM的方式,但是现在要像RAM一样,可以申请变量的方式,就是说,我不需要提供访问地址,这些都是由编译器决定的。
 楼主| chenferrari 发表于 2014-8-11 12:05 | 显示全部楼层
本帖最后由 grant_jx 于 2014-8-11 14:17 编辑
grant_jx 发表于 2014-8-8 18:32
初始化配好FSMC,内存加载文件定好外扩的RAM范围,调用的时候直接申请地址啊。

不知道就去看看Keil下的例 ...

现在小量的数据是可以的,数据量一大,就直接死机,LWIP就连不上了。也不知道出现什么问题了
 楼主| chenferrari 发表于 2014-8-11 12:06 | 显示全部楼层
zzyybb22 发表于 2014-8-8 17:27
配置fsmc后 mdk设置外部的sram,让编译器可以分配这段内存

可以指点一下吗?是在哪里配置?
 楼主| chenferrari 发表于 2014-8-11 12:06 | 显示全部楼层
KC_CEC 发表于 2014-8-9 23:22
也可以参考原子的内存管理一章,使用动态内存分配使利用率比较高

都是一些定死的数据,就跟表格一样,没必要用动态的
myxiaonia 发表于 2014-8-11 12:20 | 显示全部楼层
chenferrari 发表于 2014-8-11 12:06
都是一些定死的数据,就跟表格一样,没必要用动态的

如果是mdk的话,将要定义到sram的全局变量放到一个单独的c文件中,在左侧项目窗口中此文件右键选Option...,在Memory Assign中,后两个项目选择off-chip地址段,此地址段就是6楼给出选项中设置
myxiaonia 发表于 2014-8-11 12:23 | 显示全部楼层
grant_jx 发表于 2014-8-8 18:32
初始化配好FSMC,内存加载文件定好外扩的RAM范围,调用的时候直接申请地址啊。

不知道就去看看Keil下的例 ...

mdk的example目录下就有Memory这个例程
grant_jx 发表于 2014-8-11 14:18 | 显示全部楼层
chenferrari 发表于 2014-8-11 12:05
现在小量的数据是可以的,数据量一大,就直接死机,LWIP就连不上了。也不知道出现什么问题了
...

你定义好了,声明的时候没有强制声明要指定特定的地址,通常都是编译器自动来分配的。
至于你说的LWIP连不上,或者死机,你的现象描述不清楚,我想你应该跟踪下,问题未必RAM分配导致的。
 楼主| chenferrari 发表于 2014-8-11 14:58 | 显示全部楼层
grant_jx 发表于 2014-8-11 14:18
你定义好了,声明的时候没有强制声明要指定特定的地址,通常都是编译器自动来分配的。
至于你说的LWIP连 ...

把这个任务注销掉就可以连上了,一旦打开就会连不上。freertos实时系统,LWIP有一个任务,数据处理有一个任务,把数据处理这个任务打开,就连不上,关掉就可以了。是这种情况,数据处理这个任务里面有3、4个5K的数组
 楼主| chenferrari 发表于 2014-8-11 15:01 | 显示全部楼层
myxiaonia 发表于 2014-8-11 12:23
mdk的example目录下就有Memory这个例程

好的,我找找看
 楼主| chenferrari 发表于 2014-8-11 15:06 | 显示全部楼层
chenferrari 发表于 2014-8-11 15:01
好的,我找找看

他这个跟M4的例程一样,是把SRAM当做一段存储空间来用的,需要指定地址,数据,长度这些,我的意思是,就直接在外部SRAM上运行所有程序,CPU直接访问外部RAM,内部的是不是可以不用了
王紫豪 发表于 2014-8-11 21:59 | 显示全部楼层
myxiaonia 发表于 2014-8-11 22:40 来自手机 | 显示全部楼层
chenferrari 发表于 2014-8-11 15:06
他这个跟M4的例程一样,是把SRAM当做一段存储空间来用的,需要指定地址,数据,长度这些,我的意思是,就 ...

是的,把code/const勾上,函数也在sram了,不过一般没必要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

52

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部