在嵌入式系统中,实现数据的掉电存储通常是为了确保关键数据在系统断电或重启时不会丢失。
实现方式:数据量不大时将数据保存在片内flash中。(注意flash的读写寿命)
一、STM32内部flash简介


void flash_write(void)
{
/* 解锁 */
FLASH_Unlock();
/* 清空所有标志位 */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
/* 擦除 */
FLASHStatus = FLASH_ErasePage(Address);
/* 向内部FLASH写入数据 */
while(FLASHStatus == FLASH_COMPLETE) //判断是否擦除成功
{
FLASHStatus = FLASH_ProgramWord(Address, data); //写入数据
}
/* 上锁 */
FLASH_Lock();
}
2. flash读出函数:使用指针寻址读出地址的内容
//读取flash的值
FLASH_Unlock();
data = (*(__IO uint32_t*) Address);
FLASH_Lock();
3. 整体显示代码:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
uint32_t data = 1000; //定义一个变量,4个字节
uint32_t Address = 0x08008000; //记录写入的地址
typedef enum
{
FAILED = 0,
PASSED = !FAILED
} TestStatus;
FLASH_Status FLASHStatus = FLASH_COMPLETE; //记录每次擦除的结果
TestStatus MemoryProgramStatus = PASSED; //记录整个测试结果
void flash_write(void)
{
/* 解锁 */
FLASH_Unlock();
/* 清空所有标志位 */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
/* 擦除 */
FLASHStatus = FLASH_ErasePage(Address);
/* 向内部FLASH写入数据 */
while(FLASHStatus == FLASH_COMPLETE) //判断是否擦除成功
{
FLASHStatus = FLASH_ProgramWord(Address, data); //写入数据
}
/* 上锁 */
FLASH_Lock();
}
//按下key1,data减小10
void key1_handler(void)
{
data += 10;
flash_write();
}
//按下key2,data增加10
void key2_handler(void)
{
data -= 10;
flash_write();
}
u16 count=0;
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(115200); //串口初始化为115200
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
printf("\r\n STM32 flash 读写测试 \r\n");
//读取flash的值
FLASH_Unlock();
data = (*(__IO uint32_t*) Address);
FLASH_Lock();
while(1)
{
u8 t=0;
if(0==count%1)
{
t=KEY_Scan(0); //得到键值
switch(t)
{
case 1:
{
key1_handler();
}
break;
case 2:
{
key2_handler();
}
break;
default:
break;
}
}
if(0==count%1000)
{
printf("The duchu
4. 实现效果:
通过按键修改数值为:6160
重新断电重启,观察数值:
可以看到数值就是最后保存的数值。文章来源:https://www.toymoban.com/news/detail-780587.html
完整代码:https://download.csdn.net/download/qq_39742246/88582982文章来源地址https://www.toymoban.com/news/detail-780587.html
到了这里,关于STM32实现数据掉电存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!