stm32f103 外扩SDRAM后栈空间划分的问题

做大做强,再创辉煌! 2017-07-06 10:31:18
由于内部sram大小只有64kb,为了跑函数,所以扩展了外部1mb的sdram进行使用,起始地址为0x68000000 大小为0x100000。这样用外部SRAM就跟用内部SRAM一样,不用自己去申请内存,也不用考虑什么内存地址,一切让编译器自己去解决。
根据库函数例程fsmc来实现扩展外部sdram。在库函数的system_stm32f10x.c这个初始化文件当中其实就已经有外部SRAM的初始化,我们只要增加“#define DATA_IN_ExtSRAM 1”这句宏定义

#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
/* #define DATA_IN_ExtSRAM */
#define DATA_IN_ExtSRAM 1
#endif

再编译的时候就会把外部SRAM的初始化编译进去,初始化的代码大家可以去看文件中的void SystemInit_ExtMemCtl(void) 这个函数。
有一个问题就是,调用函数的内部数组被分配在外部sdram空间中没有问题,但是sp指针(自动分配的栈区并不是很大),在函数调用过程中,出现栈空间sp值小于0x68000000的情况发生。所以问一下,外部sdram中,栈区间大小在哪里进行设置?还是说是有系统自动分配的,要是自动分配的不应该在函数调用的过程中出现栈空间不够的情况啊。。。
...全文
888 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37985824 2020-03-13
  • 打赏
  • 举报
回复
请问楼主是怎么解决问题的?需要另外配置栈吗
HuiCMs 2018-07-03
  • 打赏
  • 举报
回复
楼主遇到过外扩SRAM情况下,外围设备硬件错误,比如CAN通信引起硬件错误,这种情况吗?
qnfn 2017-07-24
  • 打赏
  • 举报
回复
谢谢~ 这个问题现在被解决了,但是放在外部SRAM中运行的结果就是时间耗时过长,不时很实用啊。 对于内部sram空间问题真是头疼。。
  • 打赏
  • 举报
回复
引用 3 楼 qq_20553613 的回复:
[quote=引用 2 楼 cyxiaotian1988 的回复:] [quote=引用 1 楼 qq_20553613 的回复:] 帮顶!更正下:STM32F1只能驱动SRAM,无法驱动SDRAM,从专业角度上,楼主描述有些不太正确,但不影响理解。
谢谢~ 这个问题现在被解决了,但是放在外部SRAM中运行的结果就是时间耗时过长,不时很实用啊。 对于内部sram空间问题真是头疼。。[/quote] 理论上会比内部的慢,但不至于太明显,检查FSMC总线时钟、速度等问题。[/quote] ok~ 检查了MDK关于时钟的设置,没有配置到和芯片时钟一样,所以sec统计的时间有误。 外部SRAM中运行的时间也是满足要求的,谢谢~
Acuity. 2017-07-09
  • 打赏
  • 举报
回复
引用 2 楼 cyxiaotian1988 的回复:
[quote=引用 1 楼 qq_20553613 的回复:] 帮顶!更正下:STM32F1只能驱动SRAM,无法驱动SDRAM,从专业角度上,楼主描述有些不太正确,但不影响理解。
谢谢~ 这个问题现在被解决了,但是放在外部SRAM中运行的结果就是时间耗时过长,不时很实用啊。 对于内部sram空间问题真是头疼。。[/quote] 理论上会比内部的慢,但不至于太明显,检查FSMC总线时钟、速度等问题。
  • 打赏
  • 举报
回复
引用 1 楼 qq_20553613 的回复:
帮顶!更正下:STM32F1只能驱动SRAM,无法驱动SDRAM,从专业角度上,楼主描述有些不太正确,但不影响理解。
谢谢~ 这个问题现在被解决了,但是放在外部SRAM中运行的结果就是时间耗时过长,不时很实用啊。 对于内部sram空间问题真是头疼。。
Acuity. 2017-07-07
  • 打赏
  • 举报
回复
帮顶!更正下:STM32F1只能驱动SRAM,无法驱动SDRAM,从专业角度上,楼主描述有些不太正确,但不影响理解。

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧