发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表
打印
[APM32E1]

APM32E1的SDRAM内存管理

[复制链接]
7487|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Peixu|  楼主 | 2023-9-14 15:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Peixu 于 2023-9-14 16:01 编辑

#申请原创#
@21小跑堂
APM32E1的SDRAM内存管理
【介绍】:
​一般我们开发mcu自带的SRAM,对一般应用来说,已经够用了,但是对于内存需求较高的场合,比如跑GUI或者算法等,自带的内存会就不够用,这个时候就要外扩SRAM或SDRAM。
​不过还好找到了APM32E103VET6S,这款芯片合封了2MB的SDRAM,就是集成在芯片内部的意思,据我阅读数据手册了解,合封的SDRAM只是跟mcu封装在一起,初始化程序写法跟外扩SDRAM是一样的。在程序中使用SDRAM的时候我们都需要填入起始地址,很不方便,这时候就需要内存管理来帮助我们自动分配内存,大大减少开发时间和出现bug的可能。

图1-1产品命名规范
根据图1-1可以看出APM32后缀带S就是合封了2MB的SDRAM,不带后缀S是没有的,那么再来对比下这2者的区别,如图1-2所示,合封了SDRAM的会把SDRAM所使用到的引脚隐藏起来了,但是官方没有把PB11隐藏起来,与SDRAM存在冲突,如有使用建议更换其他IO口。

图1-2 合封与非合封的区别
接下来看官方芯片数据手册如图1-3,Flash:512KB,SRAM:128KB,SDRAM:2MB

图1-3存储器

图1-4地址映射图
从地址映射可以看到SDRAM的地址从60000000H开始,记住这个地址,待会程序里用到。
【准备材料】:
接下来用到2个程序,正点原子战舰内存管理例子和APM32E1的SDK的DMC_SDRAM例子,我们在DMC_SDRAM程序的基础上移植正点原子战舰内存管理例子:
1、【正点原子】战舰STM32F103开发板资料 资料盘(A盘)\4,程序源码\实验37 内存管理实验
2、APM32E10x_SDK_V1.2\Examples\EMMC\DMC_SDRAM
【移植说明】:
1、首先复制正点原子战舰内存管理例子里的malloc.c和malloc.h到DMC_SDRAM工程下,修改malloc.c中的外部内存地址为0x60000000

2、修改malloc.h,我这里SDRAM用1920K,留了点没用完

3、移植完成,下面测试下

运行串口打印如下:

Err Count : 0证明SDRAM测试读写正常。然后再看打印的p地址不是0x20000000H,而是在60000000H到60200000H之间,就证明申请的内存用在SDRAM内。
好了,以后程序里就可以用mymalloc(SRAMEX,xxx)函数申请SDRAM自动分配的内存或者mymalloc(SRAMIN,xxx)申请内部SRAM自动分配的内存啦。



DMC_SDRAM.zip

6.24 MB

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 20.00 元 2023-09-27
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
forgot 2023-10-12 11:47 回复TA
赞,来学习一下! 
21小跑堂 2023-9-27 18:54 回复TA
经典的SDRAM外扩实例,通过扩展SDRAM可以适用内存需求较高的应用场合 
沙发
煊哥| | 2023-9-15 00:30 | 只看该作者
我的项目跑界面ram不够用了,刚好看到这篇文章,顶

使用特权

评论回复
板凳
煊哥| | 2023-9-15 00:31 | 只看该作者
我的项目跑界面ram不够用,刚好看到这篇文章,顶

使用特权

评论回复
地板
ljm9823| | 2023-9-15 10:47 | 只看该作者
大佬,厉害呀,谢谢分享

使用特权

评论回复
5
yuexiaoban| | 2023-9-16 20:28 | 只看该作者
这颗芯片多少钱

使用特权

评论回复
6
xu@xupt| | 2023-9-17 08:24 | 只看该作者
很好的资源,学习啦~~

使用特权

评论回复
发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

37

帖子

0

粉丝