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?

需要大量的数据存储;

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

需要掉电不丢失;

需要可更改的特性;

寄存器属性等

相关推荐
技术liul6 小时前
使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
android·stm32·电脑
anghost1508 小时前
基于 STM32 的多传感器健康监测系统设计
stm32·单片机·嵌入式硬件
玉~你还好吗9 小时前
【嵌入式电机控制#34】FOC:意法电控驱动层源码解析——HALL传感器中断(不在两大中断内,但重要)
单片机·嵌入式系统·电机控制
STC_USB_CAN_805110 小时前
所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
单片机·嵌入式硬件·51单片机
正点原子10 小时前
《ESP32-S3使用指南—IDF版 V1.6》第三十四章 RGB触摸实验
单片机·物联网·嵌入式
码小文12 小时前
Altium Designer 22使用笔记(8)---PCB电气约束设置
笔记·嵌入式硬件·硬件工程·ad22
dumpling012012 小时前
新手向:使用STM32通过RS485通信接口控制步进电机
stm32·单片机·嵌入式硬件
hazy1k12 小时前
STM32-FreeRTOS快速入门指南(中)
stm32·单片机·嵌入式硬件
清风66666613 小时前
基于51单片机自动浇花1602液晶显示设计
单片机·嵌入式硬件·mongodb·毕业设计·51单片机·课程设计
古译汉书13 小时前
嵌入式-SPI番外之按钮驱动程序的编写-Day15
c语言·stm32·单片机·嵌入式硬件·mcu·算法