历史上的今天
今天是:2025年01月14日(星期二)
2021年01月14日 | STM32F1_FSMC读写外部SRAM
2021-01-14 来源:eefocus
前言
今天总结“STM32F103 FSMC读写外部SRAM”,主要使用FSMC来控制外部SRAM,对SRAM进行读写的操作。本文章提供的工程对SRAM读写从操作类似于对FLASH读写操作。
关于STM32的FSMC(灵活的静态存储器控制器)这一部分内容比较实用,在实际应用中也是比较重要的(对于需要实用FSMC来说)。运用FSMC来控制外接器件比运用软件模拟来控制效率要高的多,而且操作简单。
也许对于初学者来说,对FSMC不了解,或不感兴趣。因为FSMC在实际开发中主要用于外扩RAM和ROM,初学者对于RAM和ROM的需求不高,基本上内部资源都够了。对于喜欢使用LCD屏的人应该了解FSMC,因为FSMC控制LCD也是一种很好的方式,市面上很多开发板上的LCD屏都兼容FSMC。
下载
今天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。
今天的软件工程下载地址(360云盘):
https://yunpan.cn/cSrN5SYtDcyBA 访问密码 47fb
STM32F10x的资料可以在我360云盘下载:
https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90
内容讲解
工程概要说明: 提供工程是对外部SRAM读写,可以当做缓存(如:一个BUF)来使用,但并不是芯片的RAM(运行内存),只是对SRAM进行读写操作。
程序运行流程:上电写入外部SRAM数据“0 - 262143”(刚好是1M空间,4字节空间一数据),再通读读函数读出其数据,通过串口打印出来。这里每读一次串口打印一次数据,LED变化一次。(请观测现象)
提供的工程以简单为原则,详细中文注释,方便自己方便大家。
关于“STM32F103 片内FLASH编程” 我把重要的几点在下面分别讲述:
一、时钟

开启FSMC和需要使用引脚的时钟。
二、FSMC引脚配置

该函数位于fsmc.c文件下面;
使用了FSMC的引脚都须配置为“GPIO_Mode_AF_PP”,否则不能使用(感兴趣的可以试试)。对于NE3就是:NOR/PSRAM3,我测试的工程是使用FSCM存储块1(下图)的NOR/PSRAM3。所以我测试工程里面的地址是“0x68000000”,其实这个地址有讲究的,请看最后重点。

三、FSMC配置

该函数位于fsmc.c文件下面;
这里的配置和你的SRAM有一点的关联(速度、数据宽度等)。
三、外部SRAM写数据


该函数位于fsmc.c文件下面;
对1M的SRAM写数据(为了测试),方便下面读操作。
四、外部SRAM读数据


该函数位于fsmc.c文件下面;
对1M的SRAM读数据,通过串口打印出来写入的数据,每读一次,打印一次,中间有个延时,所以整个读取的过程时间比较长。
这个地址可以修改,或者选择一段来读取测试也行。希望看到的人都亲自修改程序来测试一下,方便记忆和巩固。
五、今天的重点
A.关于地址的问题,今天提供的工程外部SRAM地址是“0x68000000”(宏定义在fsmc.h里),善于发现问题和动手的人会发现一个问题,我将这个地址改为“0x68100000”或“0x68200000”测试的效果都一样。我告诉你答案,效果确实是一样的,原因就在于外部SRAM容量“SRAM_EXT_SIZE”大小是1M,而“0x00100000”刚好是1M,这里的地址溢出部分刚好抵消了,所以为什么修改地址也是一样的效果。但地址必须在存储块1的NOR/PSRAM3区域。
B.今天是自己通过标准库来配置的FSMC,其实在“system_stm32f10x.c”文件里面有使用寄存器直接配置FSMC的源代码,感兴趣的朋友可以看一下,今天使用标准库配置其实也是希望大家数据各个参数的功能作用。其实,希望大家在熟悉配置之后还是使用“system_stm32f10x.c”里的配置,毕竟这是官方提供的,它这样配置效率也比较高。
说明
今天提供的软件工程基于STM32F103大容量芯片,中等及小容量芯片没有FSMC功能,自然也不能使用。其实只要适当修改工程的部分配置,STM32F1有FSCM功能的芯片都适用。
下一篇:STM32_DAC输出三角波形
史海拾趣
|
你知道rts2008.lib和rts2008_ml.lib的区别吗? rts2800.lib:C/C++运行支持库;rts2800_ml.lib C/C++大内存模式运行支持库.rts2800_ml.lib中有大量浮点运算处理的函数而rts2800.lib没有… 查看全部问答> |
|
从ISR第一条指令,到中断线程IST响应的第一条指令(设置一个IO输出),花了1.4ms。看论坛里面有朋友测试过说只要 400us。这样说来我的中断响应速度是不是慢了。我用的是2440主频400M。同一时间因该也没有其它中断响应,导致阻塞。有没有优化中断线 ...… 查看全部问答> |
|
WINCE下一个驱动里的.C文件里怎么调用其它驱动.C文件里的函数 我现在有两个驱动,一个是按键驱动,放在E:\\ProgramFiles\\WINCE500\\PLATFORM\\smdk2440\\DRIVERS\\Userkey文件夹里.一个是蜂鸣驱动,放在E:\\ProgramFiles\\WINCE500\\PLATFORM\\smdk2440\\DRIVERS\\BUZZER文件夹里编译都没有问题了.由于我的键盘驱 ...… 查看全部问答> |
|
总共三个职位,各职位人数不等(共20人)。描述如下,工作地点均为杭州 诺西, 有意者请联系我,英文简历:becky9411@163.com(这些职位都属于公司推荐名额,所以我用自己的邮箱) Working Location: Hang Zhou 1) 3G Software Engineer Jo ...… 查看全部问答> |
|
我想把WAV音乐文件固化在ROM中,使用的是s3c44b0+ucos操作系统,现在想实现文件系统对它进行管理.看了uc/fs用户手册,摸索了很久还是搞不明白. 1.uc/fs中有驱动IDE,RAM,SMC,windrive,我要使用哪一个驱动呢? 2.实现文件系统之后,怎样把WAV音乐固化在R ...… 查看全部问答> |
|
现在我的硬件连接是这样的:单片机的p0.7 p0.1 p0.0分别通过锁存器接到8255的cs A1和A0,我计算的硬件地址是这样的: D8255 EQU FF73H ;8255状态/命令口地址 D8255A ...… 查看全部问答> |




