嵌入式-数据存储

store.c

#include "stm32f10x.h"                  // Device header
#include "myflash.h" 
uint16_t store[512];
void store_Init()
{
	if(myflash_readhalfword(0x0800fc00)!=0xA5A5)
	{
		myflash_erasepage(0x0800fc00);
		myflash_programhalfword(0x0800fc00,0xA5A5);
//		myflash_programhalfword(0x0800fc02,5000);
//		myflash_programhalfword(0x0800fc04,2500);
		for(uint16_t i=3;i<512;i++)
		{
			myflash_programhalfword(0x0800fc00+i*2,0x0000);
		}
	}
	for(uint16_t i=0;i<512;i++)
	{
		store[i]=myflash_readhalfword(0x0800fc00+i*2);
	}
}

void store_save()
{
	//store_clear();
	myflash_erasepage(0x0800fc00);
	myflash_programhalfword(0x0800fc00,0xA5A5);
	for(uint16_t i=1;i<512;i++)
	{
		myflash_programhalfword(0x0800fc00+i*2,store[i]);
	}
}
void store_clear()
{
	
	for(uint16_t i=1;i<512;i++)
		{
			myflash_programhalfword(0x0800fc00+i*2,0x0000);
		}
	store_save();	
}

store.h

#ifndef __STORE_H
#define __STORE_H
extern uint16_t store[];
void store_Init();
void store_clear();
void store_save();

#endif

myflash.c

#include "stm32f10x.h"                  // Device header

uint32_t myflash_readword(uint32_t addr)
{
	return *((__IO uint32_t *)(addr));
		//return *((__IO uint32_t *)(Address));
}
uint16_t myflash_readhalfword(uint32_t addr)
{
	return *((__IO uint16_t *)(addr));
}
uint8_t myflash_readbyte(uint32_t addr)
{
	return *((__IO uint8_t *)(addr));
}
	
void myflash_eraseallpages()
{
	FLASH_Unlock();
	FLASH_EraseAllPages();
	FLASH_Lock();
}
void myflash_erasepage(uint32_t addr)
{
	FLASH_Unlock();
	FLASH_ErasePage(addr);
	FLASH_Lock();
}
	
void myflash_programword(uint32_t addr,uint32_t data)
{
	FLASH_Unlock();
	FLASH_ProgramWord(addr,data);
	FLASH_Lock();
}
void myflash_programhalfword(uint32_t addr,uint16_t data)
{
	FLASH_Unlock();
	FLASH_ProgramHalfWord(addr,data);
	FLASH_Lock();
}

myflash.h

#ifndef __MYFLASH_H
#define __MYFLASH_H
uint32_t myflash_readword(uint32_t addr);
uint16_t myflash_readhalfword(uint32_t addr);
uint8_t myflash_readbyte(uint32_t addr);	
void myflash_eraseallpages();
void myflash_erasepage(uint32_t addr);	
void myflash_programword(uint32_t addr,uint32_t data);
void myflash_programhalfword(uint32_t addr,uint16_t data);

#endif
posted @ 2025-04-15 19:39  LRadian  阅读(18)  评论(0)    收藏  举报