嵌入式-数据存储
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
浙公网安备 33010602011771号