#include "stm32f0xx_flash.h"
extern uint16_t P1,P2,P3,P4,KG;
void FLASH_D()//读取Flash
{
// 检查存储在Flash中的变量是否已被初始化
if (*((uint32_t*)(0x08000000+30*1024 )) == 0xFFFFFFFF)
{
// 如果未初始化,则设置默认值并将其保存到Flash中
uint16_t CS_ARR[5]={160,260,60,90,0};// 设置默认值
FLASH_Unlock(); // 解锁Flash以便写入操作
FLASH_ErasePage(0x08000000+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000002+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000004+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000006+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000008+(1024*30)); // 擦除第30页Flash
FLASH_ProgramHalfWord(0x08000000+(1024*30),CS_ARR[0]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000002+(1024*30),CS_ARR[1]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000004+(1024*30),CS_ARR[2]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000006+(1024*30),CS_ARR[3]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000008+(1024*30),CS_ARR[4]); // 将默认值写入Flash
FLASH_Lock(); // 锁定Flash以保护数据不受非法访问
}
// 如果已初始化,则从Flash中加载变量的值
P1 = *((uint16_t*)(0x08000000 + 30 * 1024 ));
P2 = *((uint16_t*)(0x08000002 + 30 * 1024 ));
P3 = *((uint16_t*)(0x08000004 + 30 * 1024 ));
P4 = *((uint16_t*)(0x08000006 + 30 * 1024 ));
KG = *((uint16_t*)(0x08000008 + 30 * 1024 ));
}
void FLASH_X()//保存值
{
uint16_t CS_ARR[5]={P1,P2,P3,P4,KG};
FLASH_Unlock(); // 解锁Flash以便写入操作
FLASH_ErasePage(0x08000000+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000002+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000004+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000006+(1024*30)); // 擦除第30页Flash
FLASH_ErasePage(0x08000008+(1024*30)); // 擦除第30页Flash
FLASH_ProgramHalfWord(0x08000000+(1024*30),CS_ARR[0]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000002+(1024*30),CS_ARR[1]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000004+(1024*30),CS_ARR[2]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000006+(1024*30),CS_ARR[3]); // 将默认值写入Flash
FLASH_ProgramHalfWord(0x08000008+(1024*30),CS_ARR[4]);
FLASH_Lock(); // 锁定Flash以保护数据不受非法访问
}
FLASH读写变量操作
最新推荐文章于 2024-07-13 19:17:19 发布