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?

需要大量的数据存储;

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

需要掉电不丢失;

需要可更改的特性;

寄存器属性等

相关推荐
集芯微电科技有限公司17 分钟前
集芯微电科技推出5.5V/10A集成功率MOSFET降压DC/DC转换器
人工智能·科技·单片机·嵌入式硬件·神经网络·生成对抗网络
送外卖的工程师18 分钟前
STM32智能家居语音系统(ASRPRO版)
stm32·单片机·嵌入式硬件
硅基手札24 分钟前
SPI技术系列 13 · SPI 调试与排查
linux·运维·stm32·单片机·嵌入式硬件·bug
我不管我就要叫小猪31 分钟前
stm32——CAN总线通信
stm32·单片机·嵌入式硬件
Yiran_G1 小时前
ZigBee通信正常,数据却是错的?嵌入式开发中的数据链路排查
网络·嵌入式硬件·物联网·智能家居
深圳老胡1 小时前
STM32C5A3ZG开发板:基于STM32CubeMX与VSCode的按键检测与LED闪烁实战
笔记·stm32·单片机·代码规范
像枫一样1 小时前
STM32串口轮询收发实战教程
arm开发·c++·stm32·单片机·嵌入式硬件·fpga开发·51单片机
糖糖单片机设计1 小时前
基于 STM32 的智能书桌控制系统
stm32·单片机·嵌入式硬件
逐步前行1 小时前
嵌入式图形库-LVGL v9.6-环境搭建(Windows+VSCode模拟)
单片机·嵌入式硬件
lhbweilai1 小时前
分析FreeRTOS内核对象API的源码实现(六)
c语言·stm32·单片机