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

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

3天内不再提示

STM32F1_ 外部SRAM作为运行内存

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

前言

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

今天提供的工程是基于前面“TIM延时”的工程修改而来,但是今天的例子是使用ST官方提供的标准库里面“system_stm32f10x.c”文件里面现成的函数接口(使用寄存器配置),使其控制外部SRAM作为运行内存。昨天的工程使用标准库fsmc相应的函数接口来配置的FSMC,昨天工程的目的就是为了使其大家熟悉参数信息。因此,今天单独再提供一个工程”FSMC读写外部SRAM_官方配置”(就是用寄存器配置的版本),请自行下载查看和测试,效果和昨天一样只是配置FSMC的方式不同。

如何知道运行内存是使用的内部RAM还是外部RAM呢?测试方法很简单,就是定义一些全局变量或者局部变量,读出其地址就知道了。因此今天提供的例程就是使用这种方法来测试的。

下载

今天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘,官方配置工程是和昨天做对比(FSMC配置方式不一样)。

今天的软件工程下载地址(360云盘):

FSMC读写外部SRAM_官方配置:

https://yunpan.cn/cSq3WajiZIcx8访问密码 30c0

外部SRAM作为运行内存:

https://yunpan.cn/cSq3n5iBTHuDc访问密码 4102

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2访问密码 ca90

内容讲解

工程概要说明: 例程定义了一个全局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功能的芯片都适用。

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

    关注

    6

    文章

    763

    浏览量

    114630
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1367

    浏览量

    114521
  • STM32F10
    +关注

    关注

    0

    文章

    45

    浏览量

    15608
收藏 人收藏

    评论

    相关推荐

    Jtti:新加坡云服务器运行内存和存储内存有何区别?

    新加坡云服务器 的运行内存(RAM)和存储内存在功能、速度、用途等方面有所区别。以下是它们的主要差异: 一、功能: 运行内存(RAM):主要用于临时存储正在运行的程序和数据,以便CPU
    的头像 发表于 06-25 14:26 430次阅读

    STM32MP157F-DK2配置的4G DDR3L,为什么输入free指令的时候,显示只有300M的运行内存

    STM32MP157F-DK2配置的 4G DDR3L,但为什么输入free指令的时候,显示只有300M的运行内存
    发表于 05-30 06:22

    请问100PIN STM32F429VG内存能支持STemWin吗?

    准备用STM32F429VG1,不接外部SDRAM, 只用内部256K SRAM. 请问这点内存运行那个 freeRTOS + STemW
    发表于 05-16 07:42

    stm32h7想把sarm1作为运行内存,但上电会进入hard fault是哪里的问题?

    因项目需要,想把sarm1(0x30000000-0x3000ffff)作为运行内存,但上电会进入hard fault, 请问有哪大哥这样设置是成功的
    发表于 04-17 07:20

    STM32CubeIDE STM32F407+外部SRAM如何将数值指定存储到外部RAM?

    使用STM32CubIDE 将数组定义到外部SRAM 报错,IDE中应该如何设置 uint8_t a[300000] __attribute__((at(0x680000)));为什么编译时会报错说RAM超出限制。IDE中我应该
    发表于 04-16 06:36

    STM32如何用HAL库进行内核复位?

    STM32如何用HAL库进行内核复位 普通的系统复位函数如下: / ** 简短的系统重置 详细信息发起系统重置请求以重置MCU。 * / __STATIC_INLINE void
    发表于 04-11 06:49

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

    1048576main.o(.bss) BIgData就是那个大数组,大小1024*1024字节 那么问题来了,只要BigData的大小超过外部SRAM大小,哪怕超1字节,编译器就会报错说
    发表于 03-26 07:06

    STM32G4如何把所有程序都在SRAM运行

    通过外部引脚可配置BOOT从SRAM中启动,上电过程SRAM没有初始化,BOOT从SRAM启动的作用是什么,这个我不能理解。 我想实现所有程序都在S
    发表于 03-12 07:30

    GD32F4的TCMSRAM(紧耦合SRAM)该如何使用?

    如下图所示,GD32F4系列内部SRAM分为通用SRAM空间和TCMSRAM空间,其中通用SRAM为从0x20000000开始的空间,TCMSRAM为从0x10000000开始的64K
    的头像 发表于 02-24 09:43 1759次阅读
    GD32<b class='flag-5'>F</b>4的TCMSRAM(紧耦合<b class='flag-5'>SRAM</b>)该如何使用?

    系统内存运行内存的区别

    系统内存运行内存都是计算机中重要的概念,它们在计算机的存储和运行方面起着不可或缺的作用。虽然它们与计算机存储和运行息息相关,但是它们具有不同的功能和实现方式。接下来我将详细介绍系统
    的头像 发表于 01-15 16:32 3094次阅读

    stm32 外部晶振不振 程序能运行

    STMicroelectronics公司设计的32位ARM Cortex-M微控制器,广泛应用于各种嵌入式应用。当外部晶振无法振荡时,可能会影响STM32的正常工作。本文将探讨在外部晶振不振的情况下,
    的头像 发表于 01-04 09:33 2224次阅读

    运行内存12g和16g的区别

    运行内存12g和16g的区别  运行内存是计算机中的一种硬件组件,用于存储正在运行的程序和数据。12GB和16GB是两种常见的内存容量,它们在性能和使用方面存在一些区别和差异。本文将详
    的头像 发表于 12-25 15:12 1.1w次阅读

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

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

    ADSP-BF533将程序全部移至外部SRAM运行要怎么操作?

    ADSP-BF533执行完BOOT-ROM中的加载程序后,将复位的程序起始地址设为 0ffa08000 ,即内部L1 Instruction SRAM的起始地址,那么是不是就意味着必须将main函数文件放置在L1 Instruc
    发表于 11-29 07:12

    STM32CubeMX的外部中断的使用

    库的中断处理较为复杂:startup_stm32f103xb.s通过汇编注册了中断处理函数EXTI1_IRQHandler(),在stm32f1xx_it.c中,
    的头像 发表于 11-26 08:00 852次阅读
    <b class='flag-5'>STM32</b>CubeMX的<b class='flag-5'>外部</b>中断的使用