Flash做为存储器存储数据
Flash做为存储器存储数据

STM32学习笔记-Flash做为存储器储存数据说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。
当然, FLASH 还可以用来装数据。
自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。
FLASH分类根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。
主存储块用于存储程序,我们写的程序一般存储在这里。
信息块又分成两部分:系统存储器、选项字节。
系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。
这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。
选项字节存储芯片的配置信息及对主存储块的保护信息。
FLASH的页面STM32的FLASH主存储块按页组织,有的产品每页1KB,有的产品每页2KB。
页面典型的用途就是用于按页擦除FLASH。
从这点来看,页面有点像通用FLASH 的扇区。
STM32产品的分类STM32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。
小容量产品主存储块1-32KB,每页1KB。
系统存储器2KB。
中容量产品主存储块64-128KB,每页1KB。
系统存储器2KB。
大容量产品主存储块256KB以上,每页2KB。
系统存储器2KB。
互联型产品主存储块256KB以上,每页2KB。
系统存储器18KB。
对于具体一个产品属于哪类,可以查数据手册,或根据以下简单的规则进行区分:STM32F101xx、STM32F102xx 、STM32F103xx产品,根据其主存储块容量,一定是小容量、中容量、大容量产品中的一种,STM32F105xx、STM32F107xx是互联型产品。
互联型产品与其它三类的不同之处就是BootLoader的不同,小中大容量产品的BootLoader只有2KB,只能通过USART1进行ISP,而互联型产品的BootLoader有18KB,能通过USAT1、4、CAN等多种方式进行ISP。
单片机内的Flash与EEPROM作用及区别(精)

单片机内的 Flash 与 EEPROM 作用及区别单片机运行时的数据都存在于 RAM (随机存储器中, 在掉电后 RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用 EEPROM 或FLASHROM 等存储器来实现。
在传统的单片机系统中, 一般是在片外扩展存储器, 单片机与存储器之间通过 IIC 或 SPI 等接口来进行数据通信。
这样不光会增加开发成本,同时在程序开发上也要花更多的心思。
在 STC 单片机中内置了 EEPROM (其实是采用 IAP 技术读写内部 FLASH 来实现 EEPROM ,这样就节省了片外资源,使用起来也更加方便。
下面就详细介绍 STC 单片机内置 EEPROM 及其使用方法。
flash 是用来放程序的,可以称之为程序存储器,可以擦出写入但是基本都是整个扇区进行的 .一般来说单片机里的 flash 都用于存放运行代码,在运行过程中不能改; EEPROM 是用来保存用户数据,运行过程中可以改变,比如一个时钟的闹铃时间初始化设定为 12:00,后来在运行中改为 6:00,这是保存在 EEPROM 里, 不怕掉电,就算重新上电也不需要重新调整到 6:00下面是网上详细的说法,感觉不错:FLASH 和 EEPROM 的最大区别是 FLASH 按扇区操作, EEPROM 则按字节操作, 二者寻址方法不同,存储单元的结构也不同, FLASH 的电路结构较简单,同样容量占芯片面积较小,成本自然比 EEPROM 低,因而适合用作程序存储器, EEPROM 则更多的用作非易失的数据存储器。
当然用 FLASH 做数据存储器也行, 但操作比EEPROM 麻烦的多,所以更“人性化”的 MCU 设计会集成 FLASH 和 EEPROM 两种非易失性存储器,而廉价型设计往往只有 FLASH ,早期可电擦写型 MCU 则都是EEPRM 结构,现在已基本上停产了。
在芯片的内电路中, FLASH 和 EEPROM 不仅电路不同,地址空间也不同,操作方法和指令自然也不同, 不论冯诺伊曼结构还是哈佛结构都是这样。
flash存储器原理

flash存储器原理Flash存储器原理。
Flash存储器是一种非易失性存储器,它使用了一种称为闪存的技术,可以在断电后仍然保持数据。
它通常用于嵌入式系统、移动设备和存储卡等产品中。
Flash存储器的原理非常复杂,它涉及到许多物理和电子学的知识。
在本文中,我们将深入探讨Flash存储器的原理,帮助读者更好地理解这一技术。
Flash存储器的工作原理主要基于两种不同的技术,NAND和NOR。
NAND和NOR是两种不同的存储单元结构,它们分别适用于不同的应用场景。
NAND适用于大容量、高速度的存储,而NOR适用于低容量、低速度的存储。
这两种技术都是基于晶体管的工作原理,但它们的结构和工作方式有所不同。
NAND存储器是一种串行存储器,它使用了串行连接的晶体管结构来存储数据。
NAND存储器的每个存储单元都是一个晶体管,通过控制晶体管的导通和截断来实现数据的读写操作。
NAND存储器的存储密度很高,可以存储大量的数据,因此被广泛应用于固态硬盘和存储卡等产品中。
NOR存储器是一种并行存储器,它使用了并行连接的晶体管结构来存储数据。
NOR存储器的每个存储单元都是一个晶体管,通过控制晶体管的导通和截断来实现数据的读写操作。
NOR存储器的读取速度比NAND存储器快,但存储密度较低,因此适用于低容量、低速度的存储需求。
除了NAND和NOR存储器,还有一种称为EEPROM的存储器技术,它是一种可擦除可编程只读存储器。
EEPROM存储器可以通过电子擦除操作来擦除存储的数据,然后再进行编程操作来写入新的数据。
EEPROM存储器的擦除和编程操作都是通过电子信号来实现的,因此它是一种非易失性存储器。
总的来说,Flash存储器的原理涉及到晶体管的工作原理、存储单元的结构和连接方式,以及擦除和编程操作的实现方式。
通过深入理解这些原理,我们可以更好地应用Flash存储器技术,设计出更加高效、可靠的存储产品。
希望本文对读者有所帮助,谢谢阅读!。
单片机flash储存结构体的方式

单片机flash储存结构体的方式单片机的Flash存储结构体的方式可以通过以下几种方式实现:
1. 直接存储,将结构体直接存储到Flash中。
这种方式需要考
虑Flash的写入擦除次数,以及Flash的页大小和擦除块大小,避
免频繁写入导致Flash寿命缩短。
2. 分页存储,将结构体分成适当大小的页,然后按页写入Flash。
这样可以减少对Flash的擦除次数,延长Flash的使用寿命。
3. 压缩存储,对结构体进行压缩,然后再存储到Flash中。
这
种方式可以节省Flash的空间,但在读取时需要进行解压缩操作。
4. 文件系统存储,使用文件系统将结构体以文件的形式存储到Flash中,例如FAT文件系统。
这种方式可以方便地管理存储的结
构体数据,但会增加额外的存储空间和读写开销。
无论采用哪种方式,都需要考虑数据的完整性和一致性,以及
对Flash的读写操作进行合理的管理,避免出现数据损坏或者
Flash寿命缩短的情况。
同时,还需要考虑结构体数据的访问方式和频率,选择合适的存储方式来满足系统的需求。
flash存储原理

flash存储原理
Flash存储是一种基于电子存储技术的非易失性存储器,具有
快速读写、低功耗、高可靠性和较长寿命等优点。
其原理主要是利用电荷积累和释放来实现信息的存储和读取。
Flash存储器由若干个存储单元组成,每个存储单元称为一个
存储位。
每个存储位内部有一个浮动栅极和一个控制栅极,它们之间被一层绝缘物隔开。
存储位的状态通过栅极中的电子的分布来表示,而电子的分布状态决定了存储位的读写操作。
Flash存储器的读取过程是非破坏性的。
在读取数据时,电压
被施加在控制栅极上,而浮动栅极上的电荷透过绝缘物被传递到控制栅极上。
通过测量控制栅极上的电流来判断存储位的电荷分布状态,从而读取出存储的数据。
写入数据时,需要将数据转化为电荷形式,并将电荷注入到浮动栅极中。
具体的写入方法有两种:擦除和编程。
擦除是将存储位中的电荷全部清空,使其回复到初始状态;编程是将存储位中的电荷写入或去除,以改变其状态。
根据以上的工作原理,Flash存储器可以分为两种主要类型:NAND Flash和 NOR Flash。
NAND Flash主要用于大容量存储,具有高容量和较低的成本,广泛应用于固态硬盘、闪存卡等设备;NOR Flash则适用于小容量、高性能的应用,如嵌入式系
统中的代码存储等。
总的来说,Flash存储器是一种通过电子的存储和释放来实现
数据的读写操作的存储技术。
它在各个领域中得到广泛应用,成为现代电子设备中重要的存储介质之一。
单片机FLASH与RAM、ROM的关系

单片机FLASH主要用作程序存贮器,就是替代以前的ROM,最大的有有点是降低了芯片的成本并且可以做到电擦写,目前市场上单片机的FALSH寿命相差比较大,擦写次数从1000~10万的都有,但存储时间可以保证40年,在选用时要注意.还有一些廉价的单片机为了集成可掉电的数据存储器,没有选用价格昂贵的EEPROM,而用FALSH来做的,但要注意其寿命最多就10万次,而且擦写不能字节擦写,这要注意使用的场合其寿命是否满足要求.
RAM是数据存储器,跟计算机里面的内存差不多,主要是用来存放程序运行中的过程数据,掉电后就会丢失之前的数据,所以程序在上电时需要进行初始化,否则上电后的数据是一个随机数,可能导致程序奔溃.
ROM就是程序存储器,掉电后数据不会丢失,但在程序运行过程中其数据不会改变.早期的单片机的ROM因为擦写修改麻烦,价格昂贵或者价格低廉的OTP型无法修改数据等原因已经被现在的FLASH存储器替代了.因为FLASH的擦写很容易,现在的部分单片机支持在线内部编程,通过特定的程序执行方式可以修改FALSH 的内容,而实现在线修改程序存储器.这与上面说的程序存储器的内容在运行的时候不可被改变是不冲突的,因为在程序正常运行时,其内容不会改变,只工作在只读状态下的.
现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储
器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据. 楼上说的很好
另外,一些变量,都是放到RAM里的,一些初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失。
数据存储在程序存储器(flash)空间的定义

数据存储在程序存储器(flash)空间的定义(1)flash 常量:#include//须增加的头文件const prog_uchar FlashConst = 3;//定义uchar 型的常量n 定义在flash 里(flash 常量)unsigned char RamVar; //定义无符号整型变量(Ram 变量)RamVar = pgm_read_byte(&FlashConst); //读取flash常量到ram 变量(2)flash 一维数据:#includeconst prog_uchar s[5] = { 1, 2, 3, 4,5 };unsigned char RamVar; //定义无符号整型变量(Ram 变量)RamVar = pgm_read_byte( &s[1] ); //读取s[1]的值到RamVar, or RamVar = pgm_read_byte(s+1 );(3)flash 多维数据:#includeconst prog_uchar s[4][16] = { {14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7 },{ 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8 },{ 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0 },{15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13 }};unsigned char RamVar[4],[16]; //定义无符号整型变量(Ram 变量)register char i, j;for(i=0; i<4; ++){for(j=0; j<16; j++){RamVar[i][j] = pgm_read_byte( &s[i][j]); //读取数组s 的值到RamVar}//end for 2}//end for 1(4)扩展部分avr 对ram和flash 是独立编址的,ram 是按8 位编址,而flash 却按16 位编址,读ram 和读flash 的汇编指令也是不同的。
FLASH-SRAM-EEPROM-区别-【专业篇】加【通俗篇】

FLASH和EEPROM的最大区别专业篇FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM 则更多的用作非易失的数据存储器。
当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。
至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。
在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。
技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。
没有严谨的工作精神,根本无法成为真正的技术高手。
现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM 主要是用以在程序运行保存一些需要掉电不丢失的数据. 楼上说的很好另外,一些变量,都是放到RAM里的,一些初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。
ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32学习笔记-Flash做为存储器储存数据说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。
当然, FLASH 还可以用来装数据。
自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。
FLASH分类根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。
主存储块用于存储程序,我们写的程序一般存储在这里。
信息块又分成两部分:系统存储器、选项字节。
系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。
这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。
选项字节存储芯片的配置信息及对主存储块的保护信息。
FLASH的页面STM32的FLASH主存储块按页组织,有的产品每页1KB,有的产品每页2KB。
页面典型的用途就是用于按页擦除FLASH。
从这点来看,页面有点像通用FLASH 的扇区。
STM32产品的分类STM32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。
小容量产品主存储块1-32KB,每页1KB。
系统存储器2KB。
中容量产品主存储块64-128KB,每页1KB。
系统存储器2KB。
大容量产品主存储块256KB以上,每页2KB。
系统存储器2KB。
互联型产品主存储块256KB以上,每页2KB。
系统存储器18KB。
对于具体一个产品属于哪类,可以查数据手册,或根据以下简单的规则进行区分:STM32F101xx、STM32F102xx 、STM32F103xx产品,根据其主存储块容量,一定是小容量、中容量、大容量产品中的一种,STM32F105xx、STM32F107xx是互联型产品。
互联型产品与其它三类的不同之处就是BootLoader的不同,小中大容量产品的BootLoader只有2KB,只能通过USART1进行ISP,而互联型产品的BootLoader有18KB,能通过USAT1、4、CAN等多种方式进行ISP。
小空量产品、中容量产品的BootLoader与大容量产品相同。
关于ISP与IAPISP(In System Programming)在系统编程,是指直接在目标电路板上对芯片进行编程,一般需要一个自举程序(BootLoader)来执行。
ISP也有叫ICP (In Circuit Programming)、在电路编程、在线编程。
IAP(In Application Programming)在应用中编程,是指最终产品出厂后,由最终用户在使用中对用户程序部分进行编程,实现在线升级。
IAP要求将程序分成两部分:引导程序、用户程序。
引导程序总是不变的。
IAP也有叫在程序中编程。
ISP与IAP的区别在于,ISP一般是对芯片整片重新编程,用的是芯片厂的自举程序。
而IAP只是更新程序的一部分,用的是电器厂开发的IAP引导程序。
综合来看,ISP受到的限制更多,而IAP由于是自己开发的程序,更换程序的时候更容易操作。
FPECFPEC(FLASH Program/Erase controller 闪存编程/擦除控制器),STM32通过FPEC来擦除和编程FLASH。
FPEC使用7个寄存器来操作闪存:FPEC键寄存器(FLASH_KEYR) 写入键值解锁。
选项字节键寄存器(FLASH_OPTKEYR) 写入键值解锁选项字节操作。
闪存控制寄存器(FLASH_CR) 选择并启动闪存操作。
闪存状态寄存器(FLASH_SR) 查询闪存操作状态。
闪存地址寄存器(FLASH_AR) 存储闪存操作地址。
选项字节寄存器(FLASH_OBR) 选项字节中主要数据的映象。
写保护寄存器(FLASH_WRPR) 选项字节中写保护字节的映象。
键值为了增强安全性,进行某项操作时,须要向某个位置写入特定的数值,来验证是否为安全的操作,这些数值称为键值。
STM32的FLASH共有三个键值:RDPRT键 = 0x000000A5 用于解除读保护KEY1 = 0x45670123 用于解除闪存锁KEY2 = 0xCDEF89AB 用于解除闪存锁闪存锁在FLASH_CR中,有一个LOCK位,该位为1时,不能写FLASH_CR寄存器,从而也就不能擦除和编程FLASH,这称为闪存锁。
当LOCK位为1时,闪存锁有效,只有向FLASH_KEYR依次写入KEY1、KEY2后,LOCK位才会被硬件清零,从而解除闪存锁。
当LOCK位为1时,对FLASH_KEYR的任何错误写操作(第一次不是KEY1,或第二次不是KEY2),都将会导致闪存锁的彻底锁死,一旦闪存锁彻底锁死,在下一次复位前,都无法解锁,只有复位后,闪存锁才恢复为一般锁住状态。
复位后,LOCK位默认为1,闪存锁有效,此时,可以进行解锁。
解锁后,可进行FLASH的擦除编程工作。
任何时候,都可以通过对LOCK位置1来软件加锁,软件加锁与复位加锁是一样的,都可以解锁。
主存储块的擦除主存储块可以按页擦除,也可以整片擦除。
页擦除主存储块的任何一页都可以通过FPEC的页擦除功能擦除。
建议使用以下步骤进行页擦除:1.检查FLASH_SR寄存器的BSY位。
以确认没有其他正在进行的闪存操作。
必须等待BSY位为0,才能继续操作。
2.设置FLASH_CR寄存器的PER位为1。
选择页擦除操作。
3.设置FLASH_AR寄存器为要擦除页所在地址,选择要擦除的页。
FLASH_AR的值在哪一页范围内,就表示要擦除哪一页。
4.设置FLASH_CR寄存器的STRT位为1,启动擦除操作。
5.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
6.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。
7.读出被擦除的页并做验证。
擦完后所有数据位都为1。
整片擦除整片擦除功能擦除整个主存储块,信息块不受此操作影响。
建议使用以下步骤进行整片擦除:1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作。
2.设置FLASH_CR寄存器的MER位为1。
选择整片擦除操作。
3.设置FLASH_CR寄存器的STRT位为1。
启动整片擦除操作。
4.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
5.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。
6.读出所有页并做验证。
擦完后所有数据位都为1。
主存储块的编程对主存储块编程每次可以写入16位。
当FLASH_CR寄存器的PG位为1时,在一个闪存地址写入一个半字(16位)将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。
在编程过程中(BSY位为1时),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束。
建议使用如下步骤对主存储块进行编:1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作。
2.设置FLASH_CR寄存器的PG位为1。
选择编程操作。
3.在指定的地址写入要编程的半字。
直接用指针写。
4.等待FLASH_SR寄存器的BSY位变为0,表示操作完成。
5.查询FLASH_SR寄存器的EOP位,EOP为1时,表示操作成功。
6.读出写入的地址并验证数据。
关于主存储块擦除编程操作的一些疑问1.为什么每次都要检查BSY位是否为0?因为BSY位为1时,不能对任何FPEC寄存器执行写操作,所以必须要等BSY位为0时,才能执行闪存操作。
2.如果没有擦除就进行编程,会出现什么结果?STM32在执行编程操作前,会先检查要编程的地址是否被擦除,如果没有,则不进行编程,并置FLASH_SR寄存器的PGERR位为1。
唯一例外的是,当要编程的数据为0X0000时,即使未擦除,也会进行编程,因为0X0000即使擦除也可以正确编程。
3.为什么操作后要读出数据并验证?STM32在某些特殊情况下(例如FPEC被锁住),可能根本就没有执行所要的操作,仅通过寄存器无法判断操作是否成功。
所以,保险起见,操作后都要读出所有数据检查。
4.等待BSY位为1的时间以多少为合适?请参考STM32固件库中的数据。
5. FLASH编程手册上说进行闪存操作(擦除或编程)时,必须打开内部的RC 振荡器(HSI),是不是一定要用HIS进行闪存的擦除及编程操作?对于这点,我的理解是,进行闪存操作时,必须要保证HIS没有被关闭,但是操作时的系统仍然可以是HSE时钟。
STM32复位后,HIS默认是开的,只要你不为了低功耗去主动关闭它,则用什么时钟都可以进行闪存操作的。
我所编的程序也验证了这一点。
选项字节选项字节用于存储芯片使用者对芯片的配置信息。
目前,所有的STM32101xx、STM32102xx、STM32103xx、STM32105xx、STM32107xx 产品,选项字节都是16字节。
但是这16字节,每两个字节组成一个正反对,即,字节1是字节0的反码,字节3是字节2的反码,...,字节15是字节14的反码,所以,芯片使用者只要设置8个字节就行了,另外8个字节系统自动填充为反码。
因此,有时候,也说STM32的选项字节是8个字节,但是占了16字节的空间。
选项字节的8字节正码概述如下:RDP 字节0。
读保护字节,存储对主存储块的读保护设置。
USER 字节2。
用户字节,配置看门狗、停机、待机。
Data0 字节4。
数据字节0,由芯片使用者自由使用。
Data1 字节6。
数据字节1,由芯片使用者自由使用。
WRP0 字节8。
写保护字节0,存储对主存储块的写保护设置。
WRP1 字节10。
写保护字节1,存储对主存储块的写保护设置。
WRP2 字节12。
写保护字节2,存储对主存储块的写保护设置。
WRP3 字节14。
写保护字节3,存储对主存储块的写保护设置。
选项字节写使能在FLASH_CR中,有一个OPTWRE位,该位为0时,不允许进行选项字节操作(擦除、编程)。
这称为选项字节写使能。
只有该位为1时,才能进行选项字节操作。
该位不能软件置1,但可以软件清零。
只有向FLASH_OPTKEYR依次写入KEY1和KEY2后,硬件会自动对该位置1,此时,才允许选项字节操作。
这称为解锁(打开)选项字节写使能。
该位为1后,可以由软件清零,关闭写使能。
复位后,该位为0。
错误操作不会永远关闭写使能,只要写入正确的键序列,则又可以打开写使能。
写使能已打开时,再次打开,不会出错,并且依然是打开的。
很显然,进行选项字节操作前,先要解开闪存锁,然后打开选项字节写使能,之后,才能进行选项字节操作。
选项字节擦除建议使用如下步骤对选项字节进行擦除:1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作。