您的位置:首页 > 其它

STM32 Flash模拟E2prom

2015-06-04 21:26 323 查看
#define PAGE 254 //第254页 255 256 //eeprom

#define ADDR_BASE (0x08000000+PAGE*2048)
//存储数据Flash页首地址(0-254)

/*****************************************************************************************************

** 函数名称: SavePara()

** 函数描述: 保存参数

** 接口参数: addr,data

** 全局变量: 无

** 宏 定 义:ADDR_BASE

** 作 者:

** 日 期:

------------------------------------------------------------------------------------------------------

** 备注:每次写数据前得先擦除所要存储位置所在的整个页,这是和EEPROM的不同之处。Flash不具备修改功能,

只能先擦除再写,而擦除时,只支持页擦除。

addr地址范围:ADDR_BASE ~ADDR_BASE+2026 (偶数)

*****************************************************************************************************/

void SavePara(u32_t addr,u16_t data)

{

FLASH_Unlock(); //每次擦除Flash中数据时得先解锁

FLASH_ErasePage(ADDR_BASE); //擦除页

FLASH_ProgramHalfWord(addr,data);//写16位半字

FLASH_Lock();
//上锁

}

void WriteStrToFlash(u8_t RamPage,u8_t *data,u8_t len) // len 0-1023

{

u8_t i;

FLASH_Unlock(); //每次擦除Flash中数据时得先解锁

FLASH_ErasePage(ADDR_BASE+RamPage*2048); //擦除页

for(i=0;i<len;i++)

{

FLASH_ProgramHalfWord( ADDR_BASE+RamPage*2048 + 2*i,data[i] );//写16位半字

}

FLASH_Lock();
//上锁

}

/*****************************************************************************************************

** 函数名称: GetPara()

** 函数描述: 读出参数

** 接口参数: addr 读取数据所在的Flash地址

** 全局变量: 无

** 宏 定 义:ADDR_BASE

** 引用函数:

** 作 者:

** 日 期:

------------------------------------------------------------------------------------------------------

** 备注: addr地址范围:ADDR_BASE ~ADDR_BASE+2046(偶数)

*****************************************************************************************************/

u8_t GetPara(u32_t addr)

{

u16_t data;

data=(u16_t)(*(u32_t*)addr); //读取相应地址中的16位数据

return (u8_t)data;

}

void ReadStrFormFlash(u8_t RamPage,u8_t *data,u8_t len) //len 0-1023

{

u8_t i;

for(i=0;i<len;i++)

{

data[i] = GetPara(ADDR_BASE+RamPage*2048+2*i);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: