在嵌入式应用开发中,经常会遇到掉电后还要保存的信息,这些信息通常只能保存在外部的一些存储芯片中,如外部flash,外部EEPROM, 其实这些信息同样可以保存在STM32自带的内部flash中

文章目录

  • 一、STM32 的内部 FLASH 简介
  • 二、工程验证
  • 三、小结
  • 四、参考链接

一、STM32 的内部 FLASH 简介

在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部 FLASH 中,由于 FLASH 存储器的内容在掉电后不会丢失,芯片重新上电复位后,内核可从内部 FLASH 中加载代码并运行。

根据用途,STM32 片内的 FLASH 分成两部分:主存储块信息块
主存储块用于存储程序,我们写的程序一般存储在这里;
信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用 ISP 方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入 BootLoader,然后锁死,用户是无法改变这个区域的。 选项字节存储芯片的配置信息及对主存储块的保护信息。

除了使用外部的工具(如下载器)读写内部 FLASH 外,STM32 芯片在运行的时候,也能对自身的内部 FLASH 进行读写,因此,若内部 FLASH 存储了应用程序后还有剩余的空间,我们可以把它像外部 SPI-FLASH 那样利用起来,存储一些程序运行时产生的需要掉电保存的数据。

由于访问内部 FLASH 的速度要比外部的 SPI-FLASH 快得多,所以在紧急状态下常常会使用内部 FLASH 存储关键记录;为了防止应用程序被抄袭,有的应用会禁止读写内部FLASH 中的内容,或者在第一次运行时计算加密信息并记录到某些区域,然后删除自身的部分加密代码,这些应用都涉及到内部 FLASH 的操作。

二、工程验证

flash工程下载链接:https://pan.baidu.com/s/11Tn8TocHT8qithneDyKFIQ
提取码:pmvn

下载完成后打开文件夹,将路径stm32_Flash\Drivers\CMSIS\Device\ST\STM32F1xx\Include下的system_stm32f1xx_20190722_092746.h文件修改为system_stm32f1xx.h,否则后面编译会报错

修改好后,打开工程,可以将想要存入Flash中的内容修改为自定义内容

uint8_t FlashTest[] = "Hello!631907030123";

编译无报错
进行程序调试前,先完成配置:
注意:下载的工程代码调试用的是硬件 st-link debuger,不是软件仿真,因此用软件仿真做,可能情况略有不同(小编这里软件仿真就没有出现结果)
点击Options->Debug->右边使用硬件ST-Link Debugger

接着点击S T-Link Debugger右边的Settings

进入到Cortex-M Target Driver SetupDebug页面,其中的Port选择为SW

依次点击Flash Download->勾选Reset and Run->Add->选择STM32F10x Med-density Flash->Add->确定即可

最后点击OK完成硬件配置

由于要连接硬件ST-Link,所以要下载一个STLink驱动,不然下载不成功

链接:https://pan.baidu.com/s/13k0PVQfg5qAHXBKJ2IZiYA
提取码:1234

连线如下图

点击左上角的LOAD按钮将程序下载到STM32中

现在点击dubug按钮,进入硬件仿真调试

点击View->memory windows->memory 1打开内存观察窗口,并在地址栏中输入:0x800C000,观察将要修改的flash区间区容:

其中点击某一字符右击可选择显示格式

继续View->Watch windows->Watch 1打开一个变量观察窗口

将变量FlashWBuffFlashRBuff加入到Watch 1观察窗口


另外View->勾选Periodic Windows Update,开启变量自动更新

按如图所示的全速运行按钮或者F5

这时就可以看到Watch 1窗口的数组FlashRBuff中的内容与数组FlashWBuff中的内容是一样的

同时在Memory 1窗口中可以看到在FLASH地址0x0800C000区成功写入对应内容

断电后再重新上电进行调试,程序停在main入口处时还可以看到Flash对应区间的内容保持上一次写入内容值

三、小结

完成本次实验内容后,对STM32 的内部 FLASH 有了一定的了解,明白了FLASH 的基本功能后,以后基于STM32的开发就可以省去一些外部FLASH或EEPROM了。

四、参考链接

1.https://blog.csdn.net/zhanglifu3601881/article/details/96632971
2.https://www.eefocus.com/embedded/399467

Flash地址空间的数据读取——STM32相关推荐

  1. STM32c8t6Flash地址空间的数据读取

    STM32F103c8t6Flash地址空间的数据读取 一.项目任务 二.Flash的读写操作 1.创建STM32CubeMX工程文件 2.代码修改 3.连接STlink调试 (1)程序烧录 (2)调 ...

  2. STM32利用flash读取音频数据读取与DAC播放

    目录 一.博客内容 二.Flash地址空间的读取 2.1 Flash原理 2.2 软.硬件准备 2.3 利用CubeMX建立工程 2.4 工程代码 2.5 ST-Link的使用 ​2.6 仿真调试 三 ...

  3. STM32F103基于片内flash的数据读取与音乐播放

    目录 一.前言 二.题目要求 三.什么是片内flash 四.闪存的编程和擦除 五.基于flash的数据读取 1.工程创建 2.修改代码 3.烧录 4.调试 六.基于flash的提示音播放 1.生成正弦 ...

  4. 基于stm32f103c8t6的flash的数据读取以及提示音播放程序

    文章目录 一. 题目 二. 所使用软件硬件 三. 基于flash的数据读取 四. 基于片内Flash的提示音播放程序 1. 使用DAC输出周期2khz的正弦波 2. 使用DAC输出数字音频歌曲数据转换 ...

  5. STM32F103完成对SD卡的数据读取(fat文件模式)

    目录 一.关于SD卡 1.简介 2.SD卡的寄存器 3.SD卡读取与写入(SPI模式) 二.实验操作 1.仪器 2.代码 3.连线 4.烧录程序 5.串口调试助手初始化并写入文件 6.sd卡里hell ...

  6. STM32 FLASH的写入与读取

    STM32 FLASH的写入与读取 解释下a = (u16)(add); u16 FLASH_R(u32 add){ //参数1:FLASH地址(32位)u16 a;a = *(u16*)(add); ...

  7. 运用STM32对SD卡数据读取

    文章目录 一.利用Altium Designer 18绘制原理图 1 Altium Designer 18的安装 1.1 下载和破解 1.2 添加元件库 2 stm32最小系统的电路原理图 3 STM ...

  8. STM32+SD卡的原理图绘制以及用32完成对SD卡的数据读取(fat文件模式)

    目录 一.下载安装AD 1.1安装方法一 1.2安装方法二 二.绘制STM32最小系统原理图 2.1元件库 2.2新建工程 2.3绘制原理图 三.SD卡协议原理 3.1SD卡简介 3.2SD卡接口 3 ...

  9. Flash数据读取和保存

    实现方法 Flash数据读取和保存的目的是在单片机的程序存储区开辟一块空间专门用来保存系统需要记忆的参数和数据,从而完全取代EEROM,达到降低成本和数据保密的目的.该实现方法主要分为四个部分: FL ...

  10. 【嵌入式20】STM32F103完成对SD卡的数据读取详细操作

    本文主要利用STM32F103完成对SD卡的数据读取,介绍该实验的详细操作 一.题目要求 二.SD卡协议原理 1.SD卡简述 2.SD卡物理结构 3.SD卡寄存器 4.SD卡操作模式 5.SD卡初始化 ...

最新文章

  1. axure中怎么做出固定首行_Excel:固定表头的方法
  2. vue wabpack 切换开发环境 和生成环境 的接口地址
  3. php新特性:trait 关键字使用
  4. [转】TCP 三次握手 四次挥手
  5. Spring AOP 的切点切在Controller上没有起作用的问题。
  6. PartyUs 待添加内容(不定期更新)
  7. python---日志模块log.py
  8. java高级类_Java私塾跟我学系列——JAVA篇 第五章 Java高级类特性
  9. echarts实现平面3D柱状图
  10. 毛刺现象 java_记一次微服务耗时毛刺排查
  11. 读取MoleBox打包的可执行文件中的数据文件一法
  12. 高数_第6章无穷级数
  13. WGS84坐标转换成国家大地坐标系2000
  14. 一篇文章解决所有的 #如何下载安装xshell链接VMware虚拟机liunx系统(如SentOS,ubuntu等等)# 等问题
  15. (SCA)正弦余弦算法SCA: A Sine Cosine Algorithm(代码可复制粘贴)
  16. JPG转CAD,JPG图片如何转换成CAD图纸?
  17. 基于树莓派的智能家居控制系统设计
  18. 2019年1月28日学习日记
  19. 最早截止时间优先(EDF)
  20. oracle 用户无限期,oracle永久密码和登录次数无限制设置

热门文章

  1. oracle数据库外联,Oracle数据库-关于外联接
  2. delphi 7无法运行提示 Borland license information was found, but it is not valid for Delphi
  3. pacman 查询_archlinux pacman常用命令
  4. 服务器里怎么找到K3账套文件,金蝶K3账套自动备份步骤详解
  5. MM 移动类型-入门篇
  6. 计算机职业道德核心价值观,信息技术学科的核心价值观再认识
  7. 萧红_拔剑-浆糊的传说_新浪博客
  8. DELL笔记本FN键解锁
  9. .lib不是有效的Win32应用程序
  10. monitor java_Java中的monitor机制