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);
}
}
#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);
}
}
相关文章推荐
- 图像傅立叶变换以及中心转换函数
- 使用jaxp操作xml文档
- mysql基础 事务的认识和使用
- 阿里云服务器MySQL无法连接问题解决纪实
- 图书管理系统需求说明书
- JAVA_连接池、DataSource、JNDI
- Codeforces Round #160 (Div. 2)---A. Roma and Lucky Numbers
- C#进阶 WPF基础二 布局嵌套、菜单、工具栏、多窗口
- Linux网络限速
- CentOS下面安装Tomcat
- hdu - 5236 Article(2015上海大都会赛)概率dp
- Java学习笔记(十):Java中的JNDI
- mysql基础 事务的认识和使用
- 【BZOJ】【2741】【FOTILE模拟赛】L
- luabind 和设置1字节对齐导致服务器挂掉
- 结构体
- thinkPHP 无刷新分页
- 排序算法
- sgu251:Polymania(构造)
- Fibonacci的组合数通项公式