一、存储器

我们正常编译生成的二进制文件,需要下载烧录到单片机里面去,这个文件保存在单片机的ROM(read only memory)中,所有可以完成这种特性的存储介质都可以称为ROM。
分类
ROM一般分为四大类
①PROM:可编程只读存储器,只可擦写一次。例如:芯片的全球唯一ID码
②EPROM:可擦除可编程只读存储器,一旦编程完成后,EPROM只能用强紫外线照射来擦除。
③EEPROM:带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。
④FLASH:可以擦写多次,按扇区/块擦除。
我们一般使用的单片机里面使用的是EEPROM,STM32则使用的是FLASH。

编程:是指将数据写入到存储器。

二、FLASH(闪存)

如果从电擦除这个特性上说的话,FLASH也是EEPROM的一种,不同的是,FLASH的擦除区块不是一个字节,而是扇区来擦除,也是因为这样的特性,才导致FLASH价格比EEPROM便宜。

闪存,是一种长寿命的非易失性(在断电情况下仍然保持所存储的数据信息)的存储器。应用:SD卡、固态硬盘、芯片内存存储单元存储代码。

FLASH的作用:

  • 存储程序代码
  • 存储小图片、音频
  • 存储密码、自定义数据

FLASH如何写入数据?
前提条件:当前写入数据的地址一定要被擦除过,才能被写入。
如果要修改写入的数据,是怎么做的呢?
单独修改某个字节会失败的,需要这么做:

  • 先保存整个扇区的所有数据
  • 针对保存的数据进行修改
  • 擦除该扇区
  • 将修改后的数据全部写入到该扇区

三、示例代码

 printf("this is flash test\r\n");__IO uint32_t *d;/* 解锁FLASH(闪存)*/FLASH_Unlock();/* 擦除扇区4 */if(FLASH_EraseSector(FLASH_Sector_4, VoltageRange_3) != FLASH_COMPLETE){printf("FLASH_EraseSector error\r\n");while(1);}/* 向扇区4首地址写入0x12345678 */if(FLASH_ProgramWord(0x8010000,0x12345678)!= FLASH_COMPLETE){printf("FLASH_ProgramWord error\r\n");while(1);     }/* 不再需要修改数据,则锁定闪存 */FLASH_Lock(); //读取数据d = *(__IO uint32_t*)0x8010000;printf("read addr at 0x8010000 is 0x%08x\r\n", d);

结果:

【STM32】详解嵌入式中FLASH闪存的特性和代码示例相关推荐

  1. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发

    strncmp函数用法详解_后端开发 strncmp函数为字符串比较函数,其函数语法为"int strncmp ( const char * str1, const char * str2, ...

  2. 详解Unity中的Nav Mesh新特性|导航寻路系统 (二)

    前言 第一篇我们简要概述了新版NavMesh的一些新增功能,以及旧版的对比.本篇我们来讲一讲NavMeshSurface.NavMeshLink这两个组件的参数以及如何应用,接下来就进入正题吧. 本系 ...

  3. python中ttk详解_Python 中的Property 动态属性和特性详解

    在Python开发时,考虑到安全性,我们会通过使用 '__' 定义私有属性,以限制类外或者子类都不能直接进行访问.操作.但同时,这些私有属性并不是一成不变的,所以我们还需要提供私有属性的对外操作方式. ...

  4. 详解Spring中的CharacterEncodingFilter--forceEncoding为true在java代码中设置失效--html设置编码无效...

    在项目中有很多让人头疼的问题,其中,编码问题位列其一,那么在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?下面我们来看看Spring框架给我们提供过滤器CharacterEncodin ...

  5. 详解Python中get函数的用法(附代码)

    描述: Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法: get()方法语法: dict.get(key, default=None) 参数: key – 字典 ...

  6. python中的get函数什么意思_详解python中get函数的用法(附代码)

    描述 Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法:dict.get(key, default=None) 参数 key – 字典中要查找 ...

  7. python get函数用法_详解python中get函数的用法(附代码)

    描述 Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 get()方法语法:dict.get(key, default=None) 参数 key – 字典中要查找 ...

  8. 【pickle】详解python中的pickle模块(常用函数、示例)

    1.序列化.反序列化介绍 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 2.pickle模块说明 python中的pickle模块实现 ...

  9. 一文详解PHP用流方式实现下载文件(附代码示例)

    一淘模板给大家带来了关于PHP的相关知识,其中主要介绍了在PHP中怎么使用流方式来实现下载文件的,下面一起来看一下,希望对大家有帮助. PHP 中使用流方式下载文件 在 PHP 中,可以使用 fope ...

最新文章

  1. 大学计算机实验教程实验报告2.2,大学计算机实验2-实验报告.pdf
  2. Asp.net SignalR快速入门 ---- /signalr/hubs 404
  3. Django之请求和响应
  4. Condition中的transferForSignal()方法的不解
  5. spark.mllib源码阅读:GradientBoostedTrees
  6. android闹钟详细设计,基于LabVIEW的闹钟设计 详细文档+程序
  7. George and Job(动态规划)
  8. 【数据结构】图的深度优先搜索
  9. [译]聊聊C#中的泛型的使用
  10. ext中的EXT.XTemplate()
  11. 零基础学习AI也有快捷方式?一文帮你提升竞争力!
  12. ArcGIS土地利用转移矩阵(附土地利用数据下载)
  13. 橡胶支座抗压弹性模量计算公式_板式橡胶支座抗压弹性模量检测方法的试验研究...
  14. run()方法和start()方法的区别
  15. html规范eml文件,eml文件【操作办法】
  16. ITSM:免费开源与收费的究竟差别在哪里?
  17. 张云雷的《探清水河》登上央视,为什么蔡国庆可以随心所欲地唱
  18. 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
  19. 在mysql调用存储过程完成spilt切割
  20. html如何防止内部撑开,父div没有被撑开,该怎么解决?_html/css_WEB-ITnose

热门文章

  1. jdk各个版本及其代号
  2. 秘籍:打造自己的Flash游戏
  3. Java毕设项目基于Web生鲜O2O订购平台的设计与实现(java+VUE+Mybatis+Maven+Mysql)
  4. SQL 判断字段值是否有中文、英文、数字、提取中文、英文、数字
  5. QC 新建缺陷,如何定制缺陷描述模板
  6. 六种主流身份验证方法
  7. php imagepng 保存,php imagepng 路径
  8. 他靠一支粉笔在路上养了29年动物 粉丝从0飙涨到百万
  9. Git版本控制系统的基本使用
  10. 关于编译pytorch3D遇到的问题