0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F1_ FSMC读写外部SRAM

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-08 10:02 次阅读

前言

今天总结“STM32F103FSMC读写外部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功能,自然也不能使用,只要修改flash.h文件一个宏(页大小就可以)。其实只要适当修改工程的部分配置,STM32F1有FSCM功能的芯片都适用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • sram
    +关注

    关注

    6

    文章

    765

    浏览量

    114648
  • STM32F10
    +关注

    关注

    0

    文章

    45

    浏览量

    15618
  • FSMC
    +关注

    关注

    0

    文章

    55

    浏览量

    38116
收藏 人收藏

    评论

    相关推荐

    FPGA与STM32通过FSMC总线通信的实验

    : (1)支持不同位宽的异步读写操作。 (2)不同的BANK在映射地址空间中是独立的,可用于扩展不同的存储器。 (3)支持代码从FSMC扩展的外部存储器中直接运行。 两种工作方式:地址
    的头像 发表于 11-12 17:20 616次阅读
    FPGA与<b class='flag-5'>STM32</b>通过<b class='flag-5'>FSMC</b>总线通信的实验

    【GD32F303红枫派开发板使用手册】第二十五讲 EXMC-外部SRAM读写实验

    MCU的片内SRAM空间有限,在做一些大量数据处理、GUI显示等应用中片内SRAM容量无法满足应用需求,而外部SRAM器件读写速度快,不需要
    的头像 发表于 06-25 09:39 781次阅读
    【GD32<b class='flag-5'>F</b>303红枫派开发板使用手册】第二十五讲 EXMC-<b class='flag-5'>外部</b><b class='flag-5'>SRAM</b><b class='flag-5'>读写</b>实验

    stm32fsmc总线上同时挂载LCD屏和SRAM和单独设置一个FSMC总线设备的有哪些区别?

    我想问一下stm32fsmc总线上同时挂载LCD屏和SRAM和单独设置一个FSMC总线设备的有那些区别(我只做个单个设备的挂载)那位大神和厂家能讲一下吗,有实例最好,我就是怕不会出现
    发表于 05-31 07:31

    STM32F407读取挂在FSMC上的外部ADC数据,开启DMA的Mem to Mem模式时只能读取一次FSMC数据,为什么?

    大家好,我现在使用STM32F407,想要读取挂在FSMC上的外部ADC的数据,我利用NOE产生一个时钟信号给ADC。 现在的问题是,当我开启DMA的Mem to Mem 模式时,只能读取一次
    发表于 05-29 07:20

    用MDK将UCOS+UCGUI下载到外部SRAM中调试慢怎么解决?

    写数据。 @@触摸屏是使用STM32内部ADC采样触摸数据,同样使用了一个任务不停的对于UCGUI的GUI_TOUCH_Exec();) 外部SRAM:512K的IS61LV25616AL-10T
    发表于 05-17 11:41

    请问STM32F103与CPLD如何通信?

    读写控制线:INT1~INT5;MPUCLK;FSMC_CLK;FSMC_NOE;FSMC_NWE;FS
    发表于 05-17 07:36

    FSMC_Bank1FSMC_Bank1E没有定义是怎么回事?

    ​如标题所述, FSMC_Bank1FSMC_Bank1E 没用定义,但是在stm3f4xx.h中明明有: ​ ​#if defined (STM32F427_437xx) || d
    发表于 05-15 08:00

    求助,关于STM32F407VET6 FSMC的地址问题求解

    STM32F407VET6FSMC接口驱动 DM9000的问题,PD7 接做为片选,PD11做为指令与数据的 代码如下: #define DM9000_DATA*(vu16*)((u32
    发表于 05-15 07:49

    关于STM32F103使用FSMC同步模式问题求解

    大家好,我现在正在使用STM32F103的FSMC同步模式。 需要读取高速ADC数据,ADC是8位并口,但需要一个时钟去触发转换,在时钟上升沿读取数据,速度20M, 我看FSMC的同步模式正好有
    发表于 04-17 08:13

    请问一个大数组是不是不能同时跨用内外部SRAM

    0x2000001cData1stm32f4xx_hal.o(.data) SystemCoreClock0x20000020Data4system_stm32f4xx.o(.data) hsram10x20000024Data 80
    发表于 03-26 07:06

    FSMC模拟8080刷OLED从F1移植到F4后无法使用怎么解决?

    1STM32F103ZET6上配置的FSMC模拟8080用于刷新OLED(256*64),使用正常;2、移植至STM32F412RET6后无法使用,时钟、复用、
    发表于 03-19 07:16

    STM32实例教程,带你了解FSMC的功能和用法[‸]()

    PC 存储卡。STM32通过FSMC可以与SRAM、 ROM、 PSRAM、 NOR Flash和NANDFlash等存储器的引脚直接相连。STM32F1
    发表于 03-15 15:53

    关于雅特力AT32F403A XMC复用模式驱动SRAM芯片

    描述:AT32F403A引脚比较紧张,XMC(类似于STM32 FSMC)只支持复用模式,就是A0-A15和D0-D15都用一个引脚,如果要用,只能用锁存器将地址锁存,实现地址线和数据线的分离,目前
    发表于 01-04 10:46

    stm32f1如何将外部中断关掉hal库

    Layer)来简化芯片和外设的驱动开发。在STM32F1中,外部中断的关闭是通过HAL库中的相应函数来实现的。下面我将详细介绍如何使用HAL库关闭外部中断。 引入必要的头文件 要使用外部
    的头像 发表于 12-22 13:52 3236次阅读

    sram读写电路设计

    SRAM (Static Random Access Memory)是一种高速、随机访问的存储器,它以其快速的读写操作和不需要刷新的特点而受到广泛使用。本文将详细介绍SRAM读写电路
    的头像 发表于 12-18 11:22 2166次阅读