[APM32E1]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自动分配的内存啦。:
---------------------
作者:Peixu
链接:https://bbs.21ic.com/icview-3327108-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值