目录
一、STM32内部FLASH地址简介
在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写 好应用程序后,使用下载器把编译后的代码文件烧录到该内部 FLASH 中,由于 FLASH 存 储器的内容在掉电后不会丢失,芯片重新上电复位后,内核可从内部 FLASH 中加载代码并 运行,见图
图 STM32 的内部框架图
除了使用外部的工具(如下载器)读写内部 FLASH 外,STM32 芯片在运行的时候, 也能对自身的内部 FLASH 进行读写,因此,若内部 FLASH 存储了应用程序后还有剩余的 空间,我们可以把它像外部 SPI-FLASH 那样利用起来,存储一些程序运行时产生的需要掉 电保存的数据。
由于访问内部 FLASH 的速度要比外部的 SPI-FLASH 快得多,所以在紧急状态下常常 会使用内部 FLASH 存储关键记录;为了防止应用程序被抄袭,有的应用会禁止读写内部 FLASH 中的内容,或者在第一次运行时计算加密信息并记录到某些区域,然后删除自身的 部分加密代码,这些应用都涉及到内部 FLASH 的操作。
二、Flash地址空间的数据读取
1.CubeMX创建工程
选择stm32f103c8芯片后,配置SYS
配置RCC
配置引脚
配置时钟树
中断配置
调整堆栈大小
2.工程代码修改
提取码:pmvn
将工程源码中的flash.c和flash.h加入到工程中(flash.h文件放在INC文件夹下即可)
在main.c中添加代码
3.调试前配置
打开魔法棒,点击Debug,选择ST-Link Debugger、
点击Settings,选择Debug页面,其中Port选择SW
选择Flash Download,设置如下图
4.硬件连接
连接硬件ST-Link,需要下载STLink驱动
提取码:07tq
硬件连接如下图:
5.调试
点击,将程序下载到STM32中,结果如下图
点击,进入调试
点击View->memory windows->memory1,打开内存观察窗口
在地址栏中输入0x800C000,观察FLASH区间内容
点击鼠标右键选择显示格式
点击View->Watch?windows->memory1,打开变量观察窗口
将变量FlashWBuff和FlashRBuff加入到Watch1观察窗口
点击View,勾选Periodic Windows Update,开启变量自动更新
全速运行,这时候就会看到Watch1窗口中?FlashWBuff,FlashRBuff中的内容全部变的一样
在Memory1窗口中可以看到在FLASH地址0x0800C000成功写入内容
断电后在重新接电调试,可以发现程序停在main函数入口处时还可以看到Flash对应区间的内容保持上一次写入内容值。
三、总结
此次实验最大的阻碍就是,好几次当我快要写完博客时,sb csdn突然抽风搞得我之前写的东西都没了,只能重写,2021年最后一天心态全无。