STM32F4——FLASH闪存编程原理
一、简介:
首先是对FLASH闪存的一个基本了解和认识。FLASH闪存分为多个模块。其中有:主存储器、系统存储器、OTP区域、选项字节。现在主要认识的是有关主存储器的相关结构,主存储器分为了多个扇区,每个扇区都有相关字节的存储区域,通过扇区的方式来管理内存可以方便数据的存储。
二、有关FLASH闪存的操作。
1、锁定和解锁操作:
为了对FLASH闪存数据做好一定的防护工作,需要在不必要操作闪存数据时锁定闪存,同时在需要操作闪存数据时执行解锁操作,相关库函数;void FLASH_Unlock(void)和void FLASH_Lock(void);
2、写操作:
根据写入的数据长度的不同可以分为字节、半字、字、双字写入。都分别提供了相应的函数。有关FLASH的写入操作下边还会做相关介绍。
3、擦除操作:
由于在向FLASH内存入数据之前先要保证FLASH中的数据时被擦除过的,所以在写入操作之前需要进行擦除操作。擦除可以整个扇区的擦除也可以做整片的擦除。
4、读操作。
对于读可以直接通过语句return *(vu32*)faddr来返回地址的数据值。
三、对FLASH运用的相关代码分析。
1、写操作:
void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)
{ FLASH_Status status = FLASH_COMPLETE;u32 addrx=0;u32 endaddr=0; if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return; //非法地址FLASH_Unlock(); //解锁 FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存addrx=WriteAddr; //写入的起始地址endaddr=WriteAddr+NumToWrite*4; //写入的结束地址if(addrx<0X1FFF0000) //只有主存储区,才需要执行擦除操作!!{while(addrx<endaddr) //扫清一切障碍.(对非FFFFFFFF的地方,先擦除){if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//有非0XFFFFFFFF的地方,要擦除这个扇区{ status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);//VCC=2.7~3.6V之间!!if(status!=FLASH_COMPLETE)break; //发生错误了}else addrx+=4;} }if(status==FLASH_COMPLETE){while(WriteAddr<endaddr)//写数据{if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)//写入数据{ break; //写入异常}WriteAddr+=4;pBuffer++;} }FLASH_DataCacheCmd(ENABLE); //FLASH擦除结束,开启数据缓存FLASH_Lock();//上锁
}
对于写操作需要说明的是:由于数据写入过程中数据要写入的扇区必须是整个扇区都是被擦除的,所以有必要在擦除操作之前作出相应的判断,遍历扇区的地址是否是被全部擦除的,如果不是就需要对扇区做擦除操作。而且在写的前后分别做解锁和上锁操作。
2、读操作:
//读取指定地址的半字(16位数据)
u32 STMFLASH_ReadWord(u32 faddr)
{return *(vu32*)faddr;
} //从指定地址开始读出指定长度的数据
void STMFLASH_Read(u32 ReadAddr,u32 *pBuffer,u32 NumToRead)
{u32 i;for(i=0;i<NumToRead;i++){pBuffer[i]=STMFLASH_ReadWord(ReadAddr);//读取4个字节.ReadAddr+=4;//偏移4个字节. }
}
四、总结:
对于FLASH的学习只是做了一个初步的认识,可以对其做一些基本的操作和运用,其中还有很大一部分没有做相关认识,需要慢慢积累。这一段时间的学习总体感觉是:感觉学习过程是有很多的困难,但是还是在受着一个方向的吸引和强烈的好奇心,智能设备的运作和物联网相关技术的应用和操作,下边是一个了解到的一个人设计的一些有关家庭设备,虽然有些简易,但是却感觉非常有意思!!还有很多东西需要去学习和慢慢积累,呵呵.....
视频演示:http://v.youku.com/v_show/id_XNzI2OTQyMTk2.html
STM32F4——FLASH闪存编程原理相关推荐
- Flash闪存颗粒和工艺知识深度解析
Wafer即晶圆,是半导体组件"晶片"或"芯片"的基材,从沙子里面高温拉伸生长出来的高纯度硅晶体柱(Crystal Ingot)上切下来的圆形薄片称为" ...
- 洋桃开发板笔记(六 ) STM32自带的Flash闪存使用,主要配合其他外设
Flash闪存与其他外设的使用 杜洋工作室 www.DoYoung.net 洋桃电子 www.DoYoung.net/YT 在此声明一下所有代码均为 杜洋工作室 的不允许复制,转发等,本人只是在此程序 ...
- (39)STM32——FLASH闪存
目录 学习目标 成果展示 介绍 组成 主存储器 系统存储器 OTP 区域 选项字节 读取 编程 寄存器 步骤 擦除 扇区擦除 批量擦除 寄存器 代码 总结 学习目标 本节我们要来介绍一下关于FLASH ...
- flash闪存使用和STM32CUBEMX安装教程【第三天】
flash闪存使用和STM32CUBEMX安装教程 [1]STM32 FLASH [2]嵌入式 Flash 接口 [3]嵌入式 Flash [4]FLASH写入数据函数 [5]FLASH接收数据 [6 ...
- 冷知识:SSD或U盘或FLASH闪存要温度高通电使用,温度低断电保存,数据才能更久不丢失!
SSD或U盘或FLASH闪存,通电使用时温度在50多度,断电保存时温度在25度以下,数据才能断电多年不丢失! 当然太热的话,肯定也不好,SSD一般会有热保护吧,过热的话会降频降速,以减少热量,一般可能 ...
- 使用UniFlash闪存编程工具为TM4C129x芯片写入MAC地址
对MAC地址进行检查和编程 网络上的每个 NIC(网络接口控制器)都必须由一个 MAC 地址唯一标识,以便在网段内进行通信.MAC 地址是一个 48 位值,表示为两个十六进制数字的六个八位字节.MAC ...
- 内存颗粒和闪存颗粒的区别_NAND Flash闪存颗粒与SSD知识深度解析
谈闪存,须从Wafer开始.Wafer即晶圆,是半导体组件"晶片"或"芯片"的基材,从沙子里面高温拉伸生长出来的高纯度硅晶体柱(Crystal Ingot)上切 ...
- 基于闪存存储原理的U盘数据安全测试和U盘数据保护软件
第一章 摘要 Flash Memory是一种长寿命的非易失性存储介质,其存储原理存在诸多漏洞.其中最为严重的则为写入次数上限.而以闪存作为存储介质的U盘是否会因闪存的存储缺陷而成为不安全的存储设备,这 ...
- 【STM32】详解嵌入式中FLASH闪存的特性和代码示例
一.存储器 我们正常编译生成的二进制文件,需要下载烧录到单片机里面去,这个文件保存在单片机的ROM(read only memory)中,所有可以完成这种特性的存储介质都可以称为ROM. 分类 ROM ...
- NAND FLASH 闪存基本概念及逻辑组件
1 NAND闪存基本概念 NAND SSD由几个主要组件组成:NAND闪存,SSD控制器,连接器,DRAM,PCB和无源器件,nand SSD的存储单元被封装以形成阵列的形式以优化硅面积占用.根据矩阵 ...
最新文章
- PCB Editor 布线后操作
- Unity NGUI ScrollView 苹果式滑动
- java文件下载大小限制,完整PDF
- 空场景在安卓上的渲染消耗问题
- 【数据库】数据库的四个基本概念Data DB DBMS DBS
- php解决与处理网站高并发 大流量访问的方法
- 你们班上的同学现在都怎么样了?
- 史上最通俗分布式锁解读
- Web API——添加Swagger、SQL Server、日志记录、导出到Excel和Docker
- linux 访问文件软件,Linux下访问文件的基本模式
- mysql分布式写入_分布式系统知识点七:mysql读写分离简介(转载)
- winform文件迁移工具
- layui 解决浏览器自动填充form表单账号和密码输入框的问题
- JS弹出窗口的运用与技巧
- 利用WaitForInputIdle等待初始化完成CreateProcess
- graphx 基础算法
- PackageManager.getPackageSizeInfo||UserHandle.myUserId()
- kuangbin专题五并查集总结
- Java服务器环境搭建(JDK+TOMCAT)
- Google大数据论文GFS(Google File System)介绍
热门文章
- Ti的C28x系列的DSP(28069)(28377D)使用经验,CMD文件
- js日期格式化函数示例:将日期时间格式化成yyyy-mm-dd hh:ii:ss格式
- python运行报错,系统找不到指定的文件
- 写文章不会起标题?爬取虎嗅5万篇文章告诉你
- R语言中的apply(),lapply(),sapply(),tapply()函数以及示例
- 请求报错provisional headers are shown
- redis-trib.rb 使用详解
- JAVA第一次授课心得_关于第一次java课的感想
- JavaScript 索引、关联、对象数组增删改查循环
- python绘制正态分布图_在python中画正态分布图像的实例