当前位置:首页 > 单片机 > 单片机
[导读]前言今天总结“STM32F103 FSMC读写外部SRAM”,主要使用FSMC来控制外部SRAM,对SRAM进行读写的操作。本文章提供的工程对SRAM读写从操作类似于对FLASH读写操作。关于STM32的FSMC(灵活的静态存储器控制器)这一部分内

前言

今天总结“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功能的芯片都适用。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别为:1.MISO,主机数据输入从机数据输出线(“M”表示主机master,“I”表示输入in,“S”表示从机slaver,“O”表示输出o...

关键字: spi 通信协议 stm32f1

从图中我们可以看出,所有内部设备都是挂载的外设

关键字: stm32f1 位带操作 地址映射 寄存器

注意:每个区都有独立的寄存器控制,都有单独的片选引脚,故每个区都可以接不同的外设。

关键字: fsmc STM32 地址块划分

Ⅰ、概述该文写针对初学μC/OS的朋友,基于以下平台来一步一步移植μC/OS嵌入式操作系统。UCOS移植相关平台:系统平台:μC/OS-II(最新V2.92版)硬件平台:STM32F1(适合F1所以系列)开发平台:Kei...

关键字: stm32f1 ucos2 移植

前言今天讲解“STM32F103 SysTick系统滴答”,“SysTick系统滴答”是属于Cortex-M3内核的一部分,主要是为运行的操作系统提供滴答时钟,如常见的操作系统:uCOS、RTOS等。不管M3芯片属于哪一...

关键字: stm32f1 systick 系统滴答

FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的存储器扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型...

关键字: fsmc STM32

在完成IO驱动彩屏的试验后,就准备着手使用FSMC来驱动彩屏,先了解一下预备知识一、所谓的FSMC机制简单介绍FSMC在这篇博文里面很清楚,推荐一下http://blog.csdn.net/king_bingge/art...

关键字: fsmc stm32f103zet6 驱动tft

本篇文章三个主题:FSMC有关配置、一串字符显示原理、汉字显示原理。。下面进入正题一、FSMC的有关配置(博主用的是FSMC_A10): 来自别人家的博客http://blog.csdn.net/jxnu_xiaobin...

关键字: fsmc STM32 驱动tftlcd

Ⅰ、概述上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm、os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用部分的代码。该文主要针...

关键字: stm32f1 ucos2 移植

前言今天总结“STM32F103 外部SRAM作为运行内存”。对于运行内存应该都知道它的意思,主要是程序运行时所使用的RAM,比如我们定义的全局变量、局部变量这些在程序运行时都会在RAM中为它们开辟一片空间,用于运行时所

关键字: stm32f1 运行内存 外部sram
关闭
关闭