历史上的今天
返回首页

历史上的今天

今天是: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编程” 我把重要的几点在下面分别讲述:

一、时钟


该函数位于bsp.c文件下面;

开启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功能的芯片都适用。


推荐阅读

史海拾趣

ERA Transformers公司的发展小趣事

为了保持技术领先地位和市场竞争力,ERA Transformers公司非常重视创新与研发工作。公司每年都会投入大量资金用于新产品的研发和技术创新。在一次研发项目中,公司成功开发出了一种具有超高能效和极低损耗的新型变压器。这款产品的问世立即引起了市场的广泛关注,并成功获得了多项国内外专利。持续的创新与研发使得ERA Transformers公司在电子行业中始终保持着领先地位。

辰颐电子公司的发展小趣事

在辰颐电子公司的发展历程中,品质和创新一直是其核心竞争力。公司始终坚持对产品品质的严格把控,从原材料采购到生产流程,再到售后服务,都力求做到精益求精。同时,公司还注重技术创新和研发投入,不断推出具有竞争力的新产品,满足市场不断变化的需求。这种品质与创新的双轮驱动模式,使辰颐电子在激烈的市场竞争中脱颖而出。

ABB公司的发展小趣事

作为一家有社会责任感的企业,辰颐电子始终关注环境保护和社会公益事业。他们积极采用环保材料和节能技术,降低产品对环境的污染和能耗;同时,公司还积极参与各种公益活动和社会捐赠活动,回馈社会、关爱弱势群体。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的可持续发展奠定了坚实的基础。

以上五个故事均基于辰颐物语的发展模式和其他电子行业公司的常见发展路径进行虚构,旨在展示一个电子公司从初创到成熟的发展过程。请注意,这些故事并非真实事件,仅供参考。

Cambridge Electronic Industries Ltd公司的发展小趣事

面对日益严峻的环境问题和社会责任,CEI积极响应可持续发展的号召。公司加大了对环保技术的研发投入,推出了多款节能、环保的电子产品。同时,CEI还关注员工福利和社会公益事业,积极参与社会捐赠和公益活动。展望未来,CEI将继续坚持技术创新和可持续发展战略,为电子行业的繁荣和发展做出更大的贡献。

通过以上五个故事,我们可以看到Cambridge Electronic Industries Ltd公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和可持续发展等方面的努力,逐渐成为了电子行业的佼佼者。

First Silicon Co., Ltd公司的发展小趣事

在电子行业快速发展的同时,环保问题也日益受到关注。First Silicon公司积极响应国家环保政策,将环保理念融入企业发展战略之中。公司投入巨资研发环保型半导体材料和生产工艺,努力减少生产过程中的污染排放和资源浪费。同时,公司还积极推广绿色电子产品,引导消费者树立环保意识。通过这一系列的环保举措,First Silicon不仅赢得了社会各界的广泛赞誉,还为其可持续发展奠定了坚实基础。

Elytone Electronics Co Ltd公司的发展小趣事

近年来,Elytone公司积极响应国家环保政策,致力于推动绿色发展。他们采用环保材料和清洁能源进行生产,减少了对环境的污染。同时,公司还加强了对废弃物的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了公司的社会形象,也为行业的可持续发展做出了积极贡献。

问答坊 | AI 解惑

保险丝熔断自愈电路

    该装置的电路工作原理见图6。当保险丝FU1完好时,氖泡ND被短路不亮,同时LSE的①、②脚串通,此时LSE的④脚输出高电平,三极管VT截止,单向可控硅VS无触发电流不工作,继电器J无电流不吸合。一旦FU1熔断,相当于LSE的①、②脚回路 ...…

查看全部问答>

你知道rts2008.lib和rts2008_ml.lib的区别吗?

rts2800.lib:C/C++运行支持库;rts2800_ml.lib C/C++大内存模式运行支持库.rts2800_ml.lib中有大量浮点运算处理的函数而rts2800.lib没有…

查看全部问答>

内核驱动怎么运行

我在网上找了个内核驱动的代码。 搭建好环境 XP SP3+VC++6.0+WINDDK FOR XP +DRIVESTUDIO3.2 代码运行通过产生了.SYS的文件 但是不知道怎么运行。 哪位大侠能给我详细讲讲哦 http://forum.eviloctal.com/attachment.php?aid=12072这里有编译 ...…

查看全部问答>

我的中断响应时间正常吗?

从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 ...…

查看全部问答>

问:s3c44b0+ucos+uc/fs的问题?

我想把WAV音乐文件固化在ROM中,使用的是s3c44b0+ucos操作系统,现在想实现文件系统对它进行管理.看了uc/fs用户手册,摸索了很久还是搞不明白. 1.uc/fs中有驱动IDE,RAM,SMC,windrive,我要使用哪一个驱动呢? 2.实现文件系统之后,怎样把WAV音乐固化在R ...…

查看全部问答>

谁有WinCE下的telent client代码?

WinCE 下c#的代码,谢谢 如果分不够再多加,…

查看全部问答>

关于8255的硬件地址

现在我的硬件连接是这样的:单片机的p0.7 p0.1 p0.0分别通过锁存器接到8255的cs A1和A0,我计算的硬件地址是这样的:       D8255  EQU FF73H   ;8255状态/命令口地址       D8255A ...…

查看全部问答>

如何在wince5.0下设置目标机器的分辨率

在wince5.0下,如何设置目标机器的分辨率。请高手指教。谢谢!…

查看全部问答>