前言
今天总结“STM32F103 外部SRAM作为运行内存”。对于运行内存应该都知道它的意思,主要是程序运行时所使用的RAM,比如我们定义的全局变量、局部变量这些在程序运行时都会在RAM中为它们开辟一片空间,用于运行时所使用。 今天提供的工程是基于前面“TIM延时”的工程修改而来,但是今天的例子是使用ST官方提供的标准库里面“system_stm32f10x.c”文件里面现成的函数接口(使用寄存器配置),使其控制外部SRAM作为运行内存。昨天的工程使用标准库fsmc相应的函数接口来配置的FSMC,昨天工程的目的就是为了使其大家熟悉参数信息。因此,今天单独再提供一个工程”FSMC读写外部SRAM_官方配置”(就是用寄存器配置的版本),请自行下载查看和测试,效果和昨天一样只是配置FSMC的方式不同。 如何知道运行内存是使用的内部RAM还是外部RAM呢?测试方法很简单,就是定义一些全局变量或者局部变量,读出其地址就知道了。因此今天提供的例程就是使用这种方法来测试的。 每天总结的不仅仅是基础,而是重点,不起眼的重点,容易被人忽视的重点。关注微信公众号“EmbeddDeveloper”还有更多精彩等着你。 本着免费分享的原则,将总结的工程源代码分享给大家,还望看到的朋友关注一下微信公众号,并将文章分享给你的朋友。 下载 今天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘,官方配置工程是和昨天做对比(FSMC配置方式不一样)。 今天的软件工程下载地址(360云盘): FSMC读写外部SRAM_官方配置: 外部SRAM作为运行内存: STM32F10x的资料可以在我360云盘下载: 内容讲解 工程概要说明: 例程定义了一个全局BUF和一个局部BUF,通过对俩BUF赋值,再打印数值和对应其地址,这样就可以检测运行内存的地址。 提供的工程以简单为原则,详细中文注释,方便自己方便大家。 关于“STM32F103 外部SRAM作为运行内存” 我把重要的几点在下面分别讲述: 一、配置启动文件 我们使用官方标准库,拷贝标准库FSMC例程里面的“startup_stm32f10x_hd.s”文件(工程使用103ZE,若使用互联型芯片拷贝对应文件),替换掉我们之前工程的启动文件,如下图: 二、配置FSMC 我们使用官方标准库里面“system_stm32f10x.c”文件里面现成的函数接口(使用寄存器配置)来配置FSMC,只需要打开“system_stm32f10x.c”文件里面第122行的宏“DATA_IN_ExtSRAM”,见下图: 三、分配RAM RAM地址的分配是由编译器完成的,因此需要对工程进行相应配置,就是使用外部RAM,见下图: 四、测试函数说明 该函数位于main.c文件下面; 这个函数主要就是对上面配置及整改工程的测试。定义一个全局变量和一个局部变量,通过串口打印出他们的地址就可以判断运行内存是使用外部还是内部。 五、打印(测试)结果 看了测试函数就知道依次打印出来的数据是什么,这里我们很明显的可以看到打印出的地址是0x6800xxxx,这里的0x6800xxxx地址数据就是外部SRAM地址(不懂的话,请看昨天的讲解),说明运行内存确实是外部SRAM. 五、今天的重点 A.实际开发中请尽量使用官方标准库里面“system_stm32f10x.c”文件里面现成的函数接口(使用寄存器配置)来配置FSMC,这样效率高一下。或者,如果你喜欢STM32CubeMX配置的代码风格也可以使用哪一种,关于STM32CubeMX的使用方法其实很简单,网上也有一些使用教程,或者后期我会增加一片关于STM32CubeMX的文章。 说明 今天提供的软件工程基于STM32F103大容量芯片,中等及小容量芯片没有FSMC功能,自然也不能使用。其实只要适当修改工程的部分配置,STM32F1有FSCM功能的芯片都适用。 最后 如果觉得内容适合你(如:内容易读易懂等),你又想了解更多相关内容,请关注公众号,新内容持续更新中,后期将会有更多优秀内容出现。 赞是一种鼓励、分享是最好的支持!
|