STM32F1 Flash的操作

外设基本介绍

Flash是一种非易失性存储技术

在单片机中,它放在哪呢?一般flash,我们操控单片会放在所分配flash中,stm32f103c8t6分配的的空间是64K,也就代码从基地址0x08000000-080010000这一段空间用来存放代码,但我们每个人代码都会有64K吗,我们一般都是使用不完的,在kill编译代码时,我们可以看到编译完成的数据,里面就有你代码和数据的大小,上传时,会先擦除芯片,不会全擦除,stm32最小操作单位是1k,也就是说,假如我代码的大小是1.5k,实际上会擦除2k,在进行烧录,那剩下的空间都是空闲的,也就是说我现在有(64-2)k的数据数可以存放数据。

为什么要使用flash?

依据flash的特性(掉电不丢失),依据这样的特性,我们不仅可以拓充在运行中使用的内存,还可以利用它掉电不丢失的特性去存储一些东西,使单片机灵活的跑起来,当单片机的RAM在运行过程中,我们除了可以去调节单片机堆和栈的大小,还可以利用flash.

例1

我要存储大量的数据,且还要拥有掉电不丢失的特性时,这时我们使用变量去存储,就不太合适了,因为这样,不仅浪费内存,还不能做到掉电不丢失,除非你用的是一个永远不用修改的变量,但这就体现出flash的优势了,它不仅能实现大量数据的存储,掉电不丢失,还能修改并保存!

例2

什么什么传感器那些,假说我做一个需要单片机协同驱动的传感器,用户需求需要设置一些寄存器的配置(例如,串口波特率,及串口相关配置等),需要下次上电后保持相关配置,根据这些寄存器进行相关外设的初始化,例如那个ESP01s wifi模块,有没有印象,使用AT指令去改变波特率后,下一次使用,就变成你修改的波特率了,他无非使用的芯片的flash或者外接flash去设计寄存器,去存储相关数据

Flash操作指南

下面我们详细介绍flash的操作,使用芯片STM32F103C8T6单片机

该怎么操作它呢?

操作该外设不需要进行初始化,包含相应的32驱动头文件即可直接使用,官方封装得很好。

除了读取flash,操作前都需要解锁,操作完成后上锁

1.存储前先进性擦除

查出方式分两种,中断查出,直接擦除

2.检验擦除

擦除之后,所有位都变为了1,可以像这样对擦出的地址空间进行检查

3.写入

4.读取

读取就是直接读取,很简单,可以8/16/32进行读取,还是蛮简单,你可以使用memcpy进行对一整片空间进行操作,也比较方便。

操作的时候我们需要注意什么呢?

1.操作flash时,我们需要注意,不要操作代码空间段,在操作时有一个很好的办法可以规避这个问题,就是我们从基地址+flash的最大空间(也就是最后往前分配)往前存放(例如,08000000+FA00)

2.以K为单位(stm32f103c8t6),也就是1024k,例如我们存放512字节数据,我们要实际操作1k的flash,分配空时也是如此(例如,1024= 400,(08000000+FB00~08000000+FFFF)

3.操作最低字节数(stm32f103c8t6的话最低16bit的存储,而有的单片机支持最低8位),这个一定要注意,不然会发生触发异常中断(硬中断),导致程序卡死,可以在flash驱动头文件中找到操作字节数对应的宏

什么样的情况下适合使用flash?

需要大量的数据存储;

例如照片数据,历史数据等

需要掉电不丢失;

需要可更改的特性;

寄存器属性等

相关推荐
想放学的刺客42 分钟前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
天昊吖1 小时前
stc8H启用DMA发送后 卡住【踩坑日志】
单片机
李永奉1 小时前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别
BackCatK Chen1 小时前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
兆龙电子单片机设计1 小时前
【STM32项目开源】STM32单片机多功能电子秤
stm32·单片机·开源·毕业设计·智能家居
切糕师学AI2 小时前
ARM 架构中的复位(Reset)与复位流程
arm开发·单片机·嵌入式·复位
wotaifuzao2 小时前
STM32多协议网关-FreeRTOS事件驱动架构实战
stm32·嵌入式硬件·can·freertos·uart·modbus·spi
llilian_162 小时前
信号发生器 多通道多功能脉冲信号发生器应用解决方案 多功能脉冲发生器
功能测试·单片机·嵌入式硬件·测试工具
yuanmenghao2 小时前
Classic AUTOSAR深入浅出系列 - 【第十六篇】MCAL:为什么 MCU 换了,上层几乎不用动
单片机·嵌入式硬件·autosar
MickyCode4 小时前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu