stm32掉电前的数据存储到flash
来源:互联网 发布:现场网络直播 编辑:程序博客网 时间:2024/06/07 10:44
*********************************************************************************************
对FLASH 的操作
*********************************************************************************************
FLASh 必须是先擦 后 写
下面的函数是分析案例
void FLASH_WriteByte(u32 addr ,u16 flashdata1)
{
FLASH_Status FLASHstatus = FLASH_COMPLETE;
FLASH_Unlock();//解锁FLASH编程擦除控制器
// FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清除标志位
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
//********************************************************************
// FLASH_FLAG_BSY FLASH忙标志位
// FLASH_FLAG_EOP FLASH操作结束标志位
// FLASH_FLAG_PGERR FLASH编写错误标志位
// FLASH_FLAG_WRPRTERR FLASH页面写保护错误标净
//***********************************************************************/
FLASHstatus=FLASH_ErasePage(addr);//擦除指定地址页
FLASHstatus=FLASH_ProgramHalfWord(addr, flashdata1);//从指定页的addr地址开始写
//FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_Lock();//锁定FLASH编程擦除控制
}
基本顺序:解锁->清除标志位(可以不要)->擦除->写半字->清楚标志位(也可以不要)->上锁。
如果 FLASH_START_ADDR是宏定义的0x8000000+2048*255
1. 0x8000000是Flash的起始地址
2. 2048是因为我用的是大容量芯片,根据上一笔记Flash地址可以看出芯片每页容量2K,即2048字节,
3. 255表示芯片的最后一页,这个根据不同芯片而定。之所以从后面页写起可以防止储存数据破坏用户程序。
4. addr*2是因为每个数据占用2字节(半字),虽然写入的是1字节数据,但是编程是2字节为单位,
也就是说一个字节的数据也会占用两个字节地址。
这个子函数就是将数据flashdata1写到地址addr中去。数据的长度是可变的。
当需要读入数据的时候可以直接访问地址,
如:rdata=*(u16 *)0x08014000; //读flash中默认数据
0x08014000是存储的地址。
对FLASH 的操作
*********************************************************************************************
FLASh 必须是先擦 后 写
下面的函数是分析案例
void FLASH_WriteByte(u32 addr ,u16 flashdata1)
{
FLASH_Status FLASHstatus = FLASH_COMPLETE;
FLASH_Unlock();//解锁FLASH编程擦除控制器
// FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清除标志位
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
//********************************************************************
// FLASH_FLAG_BSY FLASH忙标志位
// FLASH_FLAG_EOP FLASH操作结束标志位
// FLASH_FLAG_PGERR FLASH编写错误标志位
// FLASH_FLAG_WRPRTERR FLASH页面写保护错误标净
//***********************************************************************/
FLASHstatus=FLASH_ErasePage(addr);//擦除指定地址页
FLASHstatus=FLASH_ProgramHalfWord(addr, flashdata1);//从指定页的addr地址开始写
//FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_Lock();//锁定FLASH编程擦除控制
}
基本顺序:解锁->清除标志位(可以不要)->擦除->写半字->清楚标志位(也可以不要)->上锁。
如果 FLASH_START_ADDR是宏定义的0x8000000+2048*255
1. 0x8000000是Flash的起始地址
2. 2048是因为我用的是大容量芯片,根据上一笔记Flash地址可以看出芯片每页容量2K,即2048字节,
3. 255表示芯片的最后一页,这个根据不同芯片而定。之所以从后面页写起可以防止储存数据破坏用户程序。
4. addr*2是因为每个数据占用2字节(半字),虽然写入的是1字节数据,但是编程是2字节为单位,
也就是说一个字节的数据也会占用两个字节地址。
这个子函数就是将数据flashdata1写到地址addr中去。数据的长度是可变的。
当需要读入数据的时候可以直接访问地址,
如:rdata=*(u16 *)0x08014000; //读flash中默认数据
0x08014000是存储的地址。
1 0
- stm32掉电前的数据存储到flash
- 存储的世界 一 flash的掉电非易失
- STM32学习笔记4(失败的尝试)-掉电检测+Flash存取
- 数据在掉电保存设备里的存储顺序,
- 利用89C52RC的DATAFLASH实现掉电存储数据
- stm32F4电源管理PVD掉电数据存储
- STM32操作访问flash,包括写入数据到flash和从flash读取数据
- 解决linux中flash掉电丢失数据问题
- flash启用数据同步功能,防止文件掉电丢失
- flash掉电备份机制
- stm32 片上flash用作EEPROM(掉电保存)(绝对可用)
- 关于掉电保存数据的思考
- 关于掉电保存数据的思考
- 非易失性存储设备写数据掉电恢复策略
- stm32数据存储
- 【STM32】使用STM32cubeMX的库读写FLASH数据
- stm32的flash编程
- STM32的FLASH操作
- BZOJ2209 [Jsoi2011]括号序列
- 面向对象与形而上学
- 使用Spring MVC的@ControllerAdvice注解做Json的异常处理
- android学习总结(16.08.23)LinearLayout(线性布局)中控件的摆放位置——orientation,gravity,layout_gravity的关系
- onTouch,onClick冲突详解
- stm32掉电前的数据存储到flash
- 基于Redis实现分布式锁
- Batch Normalization 总结
- 二叉树的存储结构
- Linux tomcat8,JDK8 启动卡住半天 后才能正常启动解决方案
- mysl lock table read
- 大牛解密阿里云直播技术平台
- ubuntu出现您的当前网络有.local域
- 不错的资料库