返回列表 发新帖我要提问本帖赏金: 20.00元(功能说明)

[APM32E1] APM32E1的SDRAM内存管理

[复制链接]
 楼主| 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的可能。
c4eafaeb8a5c66ee3713b6ef60d6326c
图1-1产品命名规范
根据图1-1可以看出APM32后缀带S就是合封了2MB的SDRAM,不带后缀S是没有的,那么再来对比下这2者的区别,如图1-2所示,合封了SDRAM的会把SDRAM所使用到的引脚隐藏起来了,但是官方没有把PB11隐藏起来,与SDRAM存在冲突,如有使用建议更换其他IO口。
a0b067c5173d4b5ac920569c5f4208d5
图1-2 合封与非合封的区别
接下来看官方芯片数据手册如图1-3,Flash:512KB,SRAM:128KB,SDRAM:2MB
1c7fbac4318cd8eddc947cc4293a39e5
图1-3存储器
4ff8785ac3b89b113e98dcfc02872319
图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
a70b2539e1c1a374df6a82bd7db862ff
2、修改malloc.h,我这里SDRAM用1920K,留了点没用完
f5387854cdc1f11c6d9d3fbfa649d04a
3、移植完成,下面测试下
a13a0e235aebd2ca617c19d1c2930a95
运行串口打印如下:
e564979c34b2fc4d2f063b55b567dc55
Err Count : 0证明SDRAM测试读写正常。然后再看打印的p地址不是0x20000000H,而是在60000000H到60200000H之间,就证明申请的内存用在SDRAM内。
好了,以后程序里就可以用mymalloc(SRAMEX,xxx)函数申请SDRAM自动分配的内存或者mymalloc(SRAMIN,xxx)申请内部SRAM自动分配的内存啦。



DMC_SDRAM.zip

6.24 MB, 下载次数: 20

打赏榜单

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

评论

赞,来学习一下!  发表于 2023-10-12 11:47
经典的SDRAM外扩实例,通过扩展SDRAM可以适用内存需求较高的应用场合  发表于 2023-9-27 18:54
煊哥 发表于 2023-9-15 00:30 | 显示全部楼层
我的项目跑界面ram不够用了,刚好看到这篇文章,顶
煊哥 发表于 2023-9-15 00:31 | 显示全部楼层
我的项目跑界面ram不够用,刚好看到这篇文章,顶
ljm9823 发表于 2023-9-15 10:47 | 显示全部楼层
大佬,厉害呀,谢谢分享
yuexiaoban 发表于 2023-9-16 20:28 | 显示全部楼层
这颗芯片多少钱
xu@xupt 发表于 2023-9-17 08:24 | 显示全部楼层
很好的资源,学习啦~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

58

帖子

0

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