分析STM32单片机的RAM和FLASH(一)

1.导学

 存储器是单片机结构的重要组成部分,存储器是用来存储编译好的程序代码和数据的,有了存储器单片机系统才具有记忆功能。

 按照存储介质的特性,可以分“易失性存储器”和“非易失性存储器”两类。易失性存储器断电后,里面存储的内容会丢失;非易失性存储器断电后,数据可以依然保持。

2.单片机的存储器

1)

如下图所示是STM32F103RB系列单片机所使用的存储器大小,Flash为128KB,RAM为20KB,这里的RAM是指SRAM。

 这两个存储器的寄存器输入输出端口被组织在同一个4GB的虚拟线性地址空间内。

可访问的存储器空间被分成8个主要块,每个块为512MB。

Flash用来存储编译好的程序文件,SRAM用来存储运行程序时所创建的临时数据。所以如果不加入外置存储器,那么程序里的东西就会出现在这两个存储器中。

2)

 下图为STM32F103RB单片机的内存映射图(部分),可以看到画红圈的两个就是SRAM和Flash存储器。不知道大家有没有注意,当使用J-Flash软件给stm32下载bin文件的时候需要填写起始地址,那个0x08000000其实就是Flash存储器的起始地址。

3.关于编译器生成的文件

1)

如果你玩过单片机,那你应该对Keil这款软件不会感到陌生,下图是我的那款OLED时钟的软件用Keil编译后的编译信息。

2)

 很多人并不一定知道Program Size的含义,我来给大家解释一下。

    Code:是程序中代码所占字节大小;

    RO-data:程序只读的变量,也就是带const的,和已初始化的字符串等;

    RW-data:已初始化的可读写全局/静态变量;

    ZI-data:未初始化的可读写全局/静态变量;

    那么这个程序占用的Flash存储器的空间大小是多少呢?程序所占Flash空间大小=Code+RO data+RW data=生成的bin文件大小。

这些信息除了在编译器下方的信息栏里面看到,也可以在项目文件里的.map文件的最下面找到,如下图:

4.数据在存储器上的存储结构

程序在Flash上的存储结构如下图所示,通过阅读hex文件和MDK下调试综合提炼出来的。

其中,ZI-data对应未初始化数据段,RW-data对应已初始化数据段,Code对应代码段。

数据在SRAM上的结构,如下图所示。这部分大家可以参考上面的内存映射图来理解。

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32中,读写寄存器的操作相对简单。首先,需要定义一个指针来存储要读写的寄存器地址。这个指针的类型通常是__IO uint16_t,表示它是一个易变的、无符号的、大小为16位的指针。然后,将这个指针指向要读写的寄存器地址。最后,通过指针来进行读取或写入操作。 例如,如果要读取Flash的数据,可以定义一个指针flashPtr,并将其指向Flash的读写地址。然后,通过*flashPtr来读取数据。 示例代码如下: ``` __IO uint16_t *flashPtr; // 定义一个指针来存储Flash读写地址 flashPtr = (__IO uint16_t *)0x08007C00; // 将指针指向数据地址 uint16_t Flash_Data = *flashPtr; // 通过指针读取数据 ``` 这样就可以通过指针来读取或写入寄存器的数据了。需要注意的是,具体的寄存器地址和数据类型可能会有所不同,需要根据具体的情况进行调整。 #### 引用[.reference_title] - *1* *3* [(超详细)STM32芯片Flash读写操作讲解和代码(寄存器版本)](https://blog.csdn.net/luoxianfadde/article/details/129260271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【STM32】 相关寄存器总结](https://blog.csdn.net/Lushengshi/article/details/126213405)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值