对于 一些在单片机掉电后仍需保存的参数,可以写入到Flash中,再次上电前进行读取。

FLASH读操作
FLASH写操作

对STM32 的FLASH写操作时,FLASH中的位只能由1写为0,不能由0写到1。所以需要在写值前进行扇区擦除(全部写为1)。

keil中 Erase full c 和 Erase Sector 的区别

Erase full c——烧录前,先擦除整个flash(flash擦除后为数据为FF)

下图为keil 中Erase full c后,在0x0800D800处写入数据30303300。

Erase Sector——
在flash已有数据后,修改程序后选择Erase Sector,程序中继续在0x0800D800处写入数据30303300。此时0x0800D800目标处数据是对的,但其余位置(应该是0x0800D800这页的)会出现别的数据。不清楚是否是乱码。
在这里插入图片描述

但是在整片擦除后,选择Erase Sector,程序中在0x0800D800处写入数据30303300。此时正常。
(问题解决。是向flash中写入数据时,需要先读取目标flash页的数据。之前定义数组为u16 STMFLASH_BUF[2];应该是1STMFLASH_BUF[1024/2];数据长度为整页数据长度,半字读取所以除以2)。
在这里插入图片描述


版权声明:本文为weixin_41746317原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41746317/article/details/95541244