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

news2024/10/6 9:40:44

一、存储器

我们正常编译生成的二进制文件,需要下载烧录到单片机里面去,这个文件保存在单片机的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);

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解

毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解 文章目录毫米波雷达系列 | 基于前后向空间平滑的MUSIC算法详解DOA阵列模型MUSIC算法空间平滑算法整体流程仿真代码忙了一阵子的中期和专利,基本上告一段落,简单的写一个比较常见的解相干MUSIC角度估…

阿里高工珍藏版“亿级高并发系统设计手册(2023版)”面面俱到,太全了!

高并发 俗话说:罗马不是一天建成的,系统的设计当然也是如此。 从原来谁都不看好的淘宝到现在的电商巨头,展现的不仅仅是一家互联网巨头的兴起,也是国内互联网行业迎来井喷式发展的历程,网络信号从 2G 发展到现在的 5…

ATtiny13与Proteus仿真-UART信号模拟仿真

UART信号模拟仿真 ATtiny13没有UART模块,因此在调试程序时,使用软件模拟UART信号很有必要。本文将介绍如何如何控制2个GPIO来模拟UART TX和RX信号,并在Proteus仿真。 1、UART信号介绍 UART的信号一般由如下三部分组成: 开始信号数据信号停止信号UART 信号保持高电平。 作…

软件测试概念基础——小记

文章目录1. 什么是软件测试2. 软件测试和软件开发的区别3. 什么是需求4. 需求是软件测试的依据5. 什么是BUG6. 什么是测试用例7. 开发模型瀑布模型螺旋模型增量模型 迭代模型敏捷模型scrum8. 测试模型V模型W模型9. 软件测试的生命周期(软件测试的流程)10…

Web大学生个人网页作业成品——学生个人爱好展示网站设计与实现(HTML+CSS+JS)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

FlinkCDC部署

文章目录Flink安装job部署1、测试代码2、打包插件3、打包4、测试Flink安装 1、解压 wget -b https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-bin-scala_2.12.tgz tar -zxf flink-1.13.6-bin-scala_2.12.tgz mv flink-1.13.6 /opt/module/flink2、环境变量…

快手某HR吐槽:职位要求写得很清楚,照着写简历不行吗?有的工作经历不相关,有的工作好几年还写学生会奖学金,这种一秒扔垃圾桶!...

求职时,你的简历是什么样的?能否帮你顺利通过初筛?一位快手的面试官吐槽很多求职者的简历“一塌糊涂”:职位要求已经写得很明白了,就把里面罗列的技术和跟业务相关的项目经验贴上来就好了,有人偏写航空公司…

Vue 不重新打包,动态加载全局配置的实现过程

背景 项目前端采用了 Vue.js ,跟传统前端 html 技术不同之处在于,每次打包后都重新生成新的 js 文件,而且不可读,必须全量替换。但最近碰到一个漏洞扫描的问题,系统通过单点登录方式访问时,是不能有登录首…

【MySQL基础】数据库操作语言DML相关操作有那些?

目录 一、什么是DML 二、数据插入insert 三、数据的修改update 四、数据的删除delete 五、delete和truncate有什么不同? 六、DML操作知识构图 七、DML操作练习 💟 创作不易,不妨点赞💚评论❤️收藏💙一下 一、什…

【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

通过前面的学习,我们已经知道,怎么将本地自己制作的镜像发布到阿里云远程镜像仓库中去。但是在实际工作开发中,一般,我们都是将公司的镜像发布到公司自己搭建的私服镜像仓库中,那么一个私服的镜像仓库怎么搭建&#xf…

Android之Service

一、Service简介: Service是一种后台服务机制,允许在没有用户界面的情况下,使程序能够长时间在后台运行。 Service是四大组件之一,适用于开发无UI界面、长时间后台运行、做一些用时比较长的操作。 二、Service创建:…

Frida - App逆向 JavaScript代码注入 基本语法以及数据类型介绍

Frida - App逆向 JavaScript代码注入 常用语法介绍 文章目录Frida - App逆向 JavaScript代码注入 常用语法介绍前言一、逆向步骤二、重载(Overload) / Frida数据类型1.重载函数介绍2.重载函数常用的类型三、Frida Hook常用代码介绍1.基本代码框架四、注入JavaScript代码运行监听…

功能测试的工作流程

测试工作人员接收到项目需求、验收标准和原型图并对需求进行分析以了解项目的需求。 一、测试计划:个人觉得测试计划应在在详细设计确认后,代码开始编写的时候开始编写。测试计划主要给后面的测试工作的一些指南。 其内容包含: 1、测试团队人…

kubernetes学习之路--Pod配置学习

写在前面:上篇文章提供了两种简单搭建一个k8s集群的方法,其中两种方式的区别是:kubeadm是直接在主机上进行k8s搭建,kind是在docker中搭建。本文主要分享新建pod等方法。(想了想,对于像我这刚入门的人来说&a…

面试常问的《进程创建—进程终止—进程等待—进程替换》!

送给正在努力前行的你一句话:要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 博主主页 目录 1.进程创建 fork函数初识 fork函数返回值 写时拷贝 2.进程终止 进程退出场景 进程如何退出 3.进程等待 进程等待的必要性 …

Java泛型简介

参考博客:https://www.jb51.net/article/192850.htm 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的…

vuex持久化

下载: vuex-persistedstate npm install --save vuex-persistedstate 或者: npm install --save vuex-persistedstate --legacy-peer-deps 引入使用:在store文件夹下的index文件中,也就是放vuex的js代码中引入: i…

周末福利 | 21天学通Python完整版,豆瓣评分9.6!

前言 又到了周末啦,小编例行给大家发福利! 今天福利的内容是21天学通Python完整版,这是一本豆瓣评分9.6的人工智能入门书籍!全面、系统、深入地讲解了Python编程基础语法与高级应用。在讲解过程中,通过大量实际操作的…

mac m1 安装docker docker 安装php 5.6 和 7.2 避坑指南

通过该link可以下载兼容mac m1核心的docker-desktop: Docker Desktop - Docker 所有基于amd64架构核心的都加上--platform linux/amd64来运行,这样就能愉快的玩耍了: docker search centos7 php56 #搜索 docker images #显示所有镜像 docker pull sglim2/centos7 建议使用ln…

如何让青少年在AI时代抢占先机

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入!11月17日,由智谱AI支持,北京市科委、中关村管委会科普专项经费资助的系列栏目“科普大佬说”很荣幸邀请到国家科技部“新一代人工智能创新发展与应用研究”项目、中小学人工智能教育服务平台…