你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1_FSMC读写外部SRAM

[复制链接]
ybhuangfugui 发布时间:2016-5-21 23:50
本帖最后由 ybhuangfugui 于 2016-5-22 09:44 编辑
0 K% C6 ?& r- Y  A9 v4 ]$ D. P( h% L+ u* L! W
前言
    今天总结“STM32F103 FSMC读写外部SRAM”,主要使用FSMC来控制外部SRAM,对SRAM进行读写的操作。本文章提供的工程对SRAM读写从操作类似于对FLASH读写操作。
    关于STM32的FSMC(灵活的静态存储器控制器)这一部分内容比较实用,在实际应用中也是比较重要的(对于需要实用FSMC来说)。运用FSMC来控制外接器件比运用软件模拟来控制效率要高的多,而且操作简单。
    也许对于初学者来说,对FSMC不了解,或不感兴趣。因为FSMC在实际开发中主要用于外扩RAM和ROM,初学者对于RAM和ROM的需求不高,基本上内部资源都够了。对于喜欢使用LCD屏的人应该了解FSMC,因为FSMC控制LCD也是一种很好的方式,市面上很多开发板上的LCD屏都兼容FSMC。

% a* P% p+ @7 f0 }1 [4 U3 C
每天总结的不仅仅是基础,而是重点,不起眼的重点,容易被人忽视的重点。关注微信公众号“EmbeddDeveloper”还有更多精彩等着你。
公众号0.5m.jpg
本着免费分享的原则,将总结的工程源代码分享给大家,还望看到的朋友关注一下微信公众号,并将文章分享给你的朋友。
8 U% T" i: @# V. I4 F# A6 I; k
下载
今天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。

3 M, r9 g2 R' l  E' G
今天的软件工程下载地址(360云盘):
http://yunpan.cn/cSrN5SYtDcyBA  访问密码 47fb
# ?4 s8 G% L0 e. x. K
STM32F10x的资料可以在我360云盘下载:
http://yunpan.cn/crBUdUGdYKam2   访问密码 ca90
- I. V) T- ~; i" J; X; ^
内容讲解
工程概要说明: 提供工程是对外部SRAM读写,可以当做缓存(如:一个BUF)来使用,但并不是芯片的RAM(运行内存),只是对SRAM进行读写操作。
程序运行流程:上电写入外部SRAM数据“0 - 262143”(刚好是1M空间,4字节空间一数据),再通读读函数读出其数据,通过串口打印出来。这里每读一次串口打印一次数据,LED变化一次。(请观测现象)

+ |, m+ I6 G$ w5 t
提供的工程以简单为原则,详细中文注释,方便自己方便大家。
0 N$ j- ~8 N; d% N- k, q
关于“STM32F103  片内FLASH编程” 我把重要的几点在下面分别讲述:
一、时钟
FSMC读写SRAM_1.png
该函数位于bsp.c文件下面;
开启FSMC和需要使用引脚的时钟。
) F# d2 s3 [0 H1 e3 i4 L$ N
二、FSMC引脚配置
FSMC读写SRAM_2.png
该函数位于fsmc.c文件下面;
使用了FSMC的引脚都须配置为“GPIO_Mode_AF_PP”,否则不能使用(感兴趣的可以试试)。对于NE3就是:NOR/PSRAM3,我测试的工程是使用FSCM存储块1(下图)的NOR/PSRAM3。所以我测试工程里面的地址是“0x68000000”,其实这个地址有讲究的,请看最后重点。
FSMC读写SRAM_3.png

' r+ X) P; |% p' z
三、FSMC配置
FSMC读写SRAM_4.png
该函数位于fsmc.c文件下面;
这里的配置和你的SRAM有一点的关联(速度、数据宽度等)。
- l/ E6 I# `, F. U9 }. o
三、外部SRAM写数据
FSMC读写SRAM_5.png
FSMC读写SRAM_6.png
该函数位于fsmc.c文件下面;
对1M的SRAM写数据(为了测试),方便下面读操作。

. `# G& V! L1 n
四、外部SRAM读数据
FSMC读写SRAM_7.png
该函数位于fsmc.c文件下面;
对1M的SRAM读数据,通过串口打印出来写入的数据,每读一次,打印一次,中间有个延时,所以整个读取的过程时间比较长。
这个地址可以修改,或者选择一段来读取测试也行。希望看到的人都亲自修改程序来测试一下,方便记忆和巩固。
  }. u' @+ |: C1 J$ ^6 M1 ]
五、今天的重点
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”里的配置,毕竟这是官方提供的,它这样配置效率也比较高。
3 x- t0 w7 X% D. O. h, J; g; ]
说明
今天提供的软件工程基于STM32F103大容量芯片,中等及小容量芯片没有FSMC功能,自然也不能使用。其实只要适当修改工程的部分配置,STM32F1有FSCM功能的芯片都适用。
最后
如果觉得内容适合你(如:内容易读易懂等),你又想了解更多相关内容,请关注公众号,新内容持续更新中,后期将会有更多优秀内容出现。
1 w  s- |& v1 t3 w+ {
赞是一种鼓励、分享是最好的支持!
& K2 p7 [/ s8 x; ^3 m: I; x

6 K( U# I* ]- J" k) U/ [
收藏 2 评论2 发布时间:2016-5-21 23:50

举报

2个回答
xmshao 回答时间:2016-5-22 10:18:46
如果楼主把芯片改到STM32F4/STM32F0更好了。
( ]( J4 S! @* f+ c. _" Y
* r2 F; t7 i" z# k另外,最后把库改为STM32CUBE库,这个是趋势。
7 I$ o6 ?. u* v2 p% q2 s; n% E. [8 Q
0 P' L- y+ d7 v" hSTM32CUBE相关技术手册哪里找
  d' a8 k% [$ ?( M0 X& C1 r* Q) p: N& b# s7 T! R9 b
xyufeng2008 回答时间:2018-1-9 21:54:10
有用的东西什么时候看都觉得是精品,感谢!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版