当前位置: 首页 > news >正文

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?

需要大量的数据存储;

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

需要掉电不丢失;

需要可更改的特性;

寄存器属性等

http://www.lryc.cn/news/605382.html

相关文章:

  • Python Day19 时间模块 和 json模块 及例题分析
  • C语言15-构造数据类型、位运算符、内存管理
  • 2018 年 NOI 最后一题题解
  • yolo8+阿里千问图片理解(华为简易版小艺看世界)
  • CSS 工作原理
  • 卡尔曼滤波通俗入门:预测、测量与最优融合
  • 重生之我在暑假学习微服务第五天《Docker部署项目篇》
  • 【人工智能99问】混合专家模型(MoE)是如何训练的?(18/99)
  • lesson28:Python单例模式全解析:从基础实现到企业级最佳实践
  • QT笔记--》QMenu
  • Java String类练习
  • 编程算法:从理论基石到产业变革的核心驱动力
  • 数字化转型-制造业未来蓝图:“超自动化”工厂
  • HTTPS基本工作过程:基本加密过程
  • List 接口
  • 基于动态权重-二维云模型的川藏铁路桥梁施工风险评估MATLAB代码
  • 人形机器人_双足行走动力学:基于OpenSim平台的股骨模型与建模
  • Python并发与性能革命:自由线程、JIT编译器的深度解析与未来展望
  • pytorch入门2:利用pytorch进行概率预测
  • C++中sizeof运算符全面详解和代码示例
  • sqli-labs:Less-5关卡详细解析
  • MySQL学习---分库和分表
  • vulhub ica1靶场攻略
  • GCC链接技术深度解析:性能与空间优化
  • VUE -- 基础知识讲解(二)
  • JavaWeb 核心:AJAX 深入详解与实战(Java 开发者视角)
  • AI 代码助手在大前端项目中的协作开发模式探索
  • Effective C++ 条款12:复制对象时勿忘其每一个成分
  • MATLAB R2023b下载与保姆级安装教程!!
  • 如何读懂 火山方舟 API 部分的内容