STM32学习100步之第三十步——FLASH读写程序

STM32单片机程序与数据的存储

Flash存储器存取的特点

STM32F103内部关于Flash存储器操作的库函数以及注意事项

STM32单片机程序与数据的存储:

一般来说,我们所编写的程序,下载到单片机内部的存储器中的Flash存储器,它是一种非易失性存储器,断电后,程序不会丢失。而在程序运行过程中所产生的数据,都存储在SRAM存储器中,它是一种易失性存储器,一旦断电,它的数据就会丢失,相当于复位重启。有时候断电之后再上电,我们需要程序保持着上一次运行的状态,这时就需要用Flash存储器存取保持的状态。

Flash存储器存取的特点:

单片机内部的Flash空间以地址来划分,每个地址代表一个存储空间(存放一个16位的数据),将这些地址(通常1024个地址)批量管理,就形成了页,Flash内部有许多不同的页,划分成页的目的是方便Flash进行批量管理,若要删除某页内部一个地址存储的内容,则必须将该页的所有内容全部擦除,再重新写入(由Flash电路结构决定),要删除某页内部的某个地址中存放的内容,则只需给出该页内部任何一个地址即可,STM32F103内部Flash存储器管理如下图:
STM32学习100步之第三十步——FLASH读写程序_第1张图片

STM32F103内部关于Flash存储器操作的库函数以及注意事项:

对FLASH存储器内部进行写操作步骤如下:
1、操作之前,先进行解锁操作(防止出错,设置锁定),利用FLASH_Unlock();
2、在解锁之后需要进行标志位清除,利用FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR)该语句清除标志位。
3、在往Flash存储器内部写数据时,需要先进行擦除,用FLASH_ErasePage(add),进行擦除该页内部所有地址存储的数据,add为该页内任一地址。
4、最后往相应的Flash存储器的相应地址开始写入数据,利用库函数 FLASH_ProgramHalfWord(add,dat)写入数据,add(32位)是要写数据的地址,dat(16位)是要写的数据。
5、写完数据之后再进行标志位的清除FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR)。
6、为了防止出错,再进行上锁,利用FLASH_LOCK()进行上锁即可。

对FLASH存储器内部进行读操作步骤如下:
利用库函数FLASH_R(add)即可将相应的add地址中存放的内容读取出来,FLASH_R(add)本身是一个16位的数据类型。

注意FLASH存储器的擦写次数有限,大概10万次,因此切不可将擦写函数放入死循环中无限擦写,损坏FLASH,另外再往FLASH中写数据时,尽量选择靠后的地址进行写,防止打乱原有的程序存放的内容。STM32F103内部关于FLASH的库函数如下:

STM32学习100步之第三十步——FLASH读写程序_第2张图片

你可能感兴趣的:(STM32学习100步之第三十步——FLASH读写程序)