首页 > 个性签名 正文
【空间flash模块】使用STM32内部Flash中的额外空间存储数据

时间:2023-02-13 11:18:42 阅读: 评论: 作者:佚名

这次,我将分享关于STM32内部闪光灯的笔记。

STM32芯片内部的闪存主要用于存储我们的代码。如果内部闪存存储了代码,还有剩馀的空间,则可以使用剩馀的空间来存储需要断电的数据。

本文以STM32103ZET6为例。STM32103ZET6是高容量产品,闪存模块包括:

的默认存储大小为512KB,分为256页,每页大小为2KB。我们的程序一般在0页的起始地址(0x08000000)默认燃烧。当BOOT0针脚和BOOT1针脚都接触到GND时,此地址开始执行代码。这个地址可以在keil上看到。

如果要下载的程序大小为4.05KB,则0、1和2页用于保存程序。需要断电的数据只能保存3页到255页。最后要下载的程序大小与项目相对应。可以在map文件中查看。map大象可以通过双击项目的文件名快速打开。例如:

以下是对STM32内部闪存的简单读写测试。

STM32内部闪存读写测试

流程图如下(省略例外,只考虑成功):

范例程式码:

本示例的核心代码如下:

(1)执行解锁操作

STM32的闪存编程由包含以下寄存器的集成闪存编程/删除控制器(FPEC)管理:

STM32重设后,FPEC模组受到保护,无法写入FLASH_CR登录。通过在FLASH_KEYR寄存器中写入特定序列,可以打开FPEC模块(例如,写入键1和键2)。只有在禁用写保护后,才能操作相关寄存器。固件库中的函数包括:

void FLASH _ Unlock(void);删除要写的页面

STM32中的FLASH还必须清除在编程时记录地址的FLASH。也就是说,值必须为0XFFFF。否则不能用。FLASH_SR登录的PGERR位元会显示警告。STM32的闪存删除分为两种类型:页面删除和全部删除。也就是说,最小删除单位是一页。即使一页只写10字节以下的数据,也必须先清除页面(2*1024字节)。这里使用逐页清除。固件库中的逐页删除功能如下:

flash _ status flash _ erase page(uint 32 _ tpage _ address);返回值为枚举。

(3)向上一级成功的页面写入数据写入

STM32闪存编程一次要写16位。固件库具有三种写入功能:

分别用字母(32位)、半角(16位)和字节(8位)编写函数。32位写实际上是记录了两次的16位数据,写完了第一个后置地址2,这与前面描述的STM32闪存编程每次都要写16位不矛盾。写8位也是实际占用的两个地址。和用16位几乎没有区别。

(4)写操作完成后执行锁定操作

要在写入闪存操作完成后执行锁定操作,相应的固件库函数如下:

void FLASH _ Lock(void);(5)读取数据

固件库没有用于读取操作的函数。读取操作实际上是读取闪存地址的数据。

(6)比较记录的数据和读取的数据是否相同。

最后,比较我们写的数据和读的数据是否完全匹配,如果匹配,读写测试是否成功,否则是否失败。

程序运行结果:

如所示,读取的数据与写入的数据相匹配,表明读取和写入测试成功。

最后,

STM32的内部闪存读写步骤大致如上,有时需要封装读写函数,但大多数步骤如上。写入数据之前,必须执行删除操作。以上是本次笔记本分享。如果有错误,请指出来!

  • 评论列表

发表评论: