历史上的今天

今天是:2024年09月24日(星期二)

正在发生

2019年09月24日 | STM32F1x系列——Flash 模拟 EEPROM

发布者:德州小孙 来源: eefocus关键字:STM32F1x系列  Flash  模拟  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

STM32F10x芯片本身没有集成EEPROM,替代方案是用片上Flash来模拟EEPROM。Flash与EEPROM的区别主要是:一、EEPROM可以按位擦写,而Flash只能按块(页)擦除;二、Flash的擦除寿命约1 万次,较EEPROM低一个量级。ST网站有个Flash模拟EEPROM的范例:AN2594: EEPROM emulation in STM32F10x microcontrollers(包括源码和文档)。范例在保存修改的数据时,以写入新数据来替代对原数据的修改,并使用两个页面轮流写入,单页写满后进行数据迁移,再一次性擦除旧页面。这个策略可以有效降低Flash擦除次数。


不过,范例代码只能保存固定大小的数据(16bits),虽然容易改成不同的固定大小,但实际用起来还是很不方便。我改写了一下,新的特性包括:


支持不同大小数据(字符数组、结构体等)的混合存储;

增加对数据的校验和(Checksum)检查。


附件提供了源码。使用方法很简单,比如要保存一个字符数组 title 和一个 point 结构体:


#include "eeprom.h"

 

#define TITLE_SIZE    80

#define TITLE_KEY     1

#define POINT_KEY     2

 

typedef struct {

    float x;

    float y;

    float z;

} Point;

 

char title[TITLE_SIZE] = "eeprom test string.";

Point point;


执行必要的初始化操作后,就可以进行写入和读取:


uint16_t result = 0;

 

FLASH_Unlock();

 

EE_Init();

 

result = memcpy_to_eeprom_with_checksum(TITLE_KEY, title, TITLE_SIZE);

result = memcpy_to_eeprom_with_checksum(POINT_KEY, &point, sizeof(point));

 

result = memcpy_from_eeprom_with_checksum(title, TITLE_KEY, TITLE_SIZE);

result = memcpy_from_eeprom_with_checksum(&point, POINT_KEY, sizeof(point));


实现混合存储的办法,是给每个变量附加8字节的控制信息。因此,在存储小数据时会有较大的空间损耗,而在存储较大的数据结构时空间利用率更高(相对于范例)。代码是针对STM32F103VE的实现。不同芯片需要对应修改头文件中 EEPROM_START_ADDRESS 的定义:


#define EEPROM_START_ADDRESS    ((uint32_t)0x0807F000)


关键字:STM32F1x系列  Flash  模拟  EEPROM 引用地址:STM32F1x系列——Flash 模拟 EEPROM

上一篇:STM32F1x系列——12864
下一篇:FPGA配置芯片EPCS读写操作--STM32读写

推荐阅读

能源互联网研究与实践快速推进,新理念、新技术开始涌现,呈现开放、融合态势。准确把握能源互联网发展方向与基本特征对研判中国能源行业未来形态、科学推进能源转型尤为重要。立足于中国中长期能源转型不同路径比较,着眼于“能源+”的高度去定位能源在未来经济高质量发展中的位置,结合对能源互联网架构与运行机理的分析以及对跨界融合实践特点的总结...
9月24日消息,L4级自动驾驶全栈解决方案提供商——深圳元戎启行科技有限公司(下称“元戎启行”),宣布完成近5000万美元的Pre-A轮融资。本轮融资由复星锐正领投,金沙江资本、云启资本、Ventech China、松禾资本等知名机构跟投。在谈到对元戎启行的投资,复星锐正资本董事长金华龙表示:“复星锐正从2016年开始关注自动驾驶系统技术及核心零部件产业链...
在所有Zynq All Programmable SoC 的内部, 你都会发现一个双核的ARM Cortex -A9 MPCore处理器,而且Zynq SoC中的这两个处理器中都设有ARM NEON SIMD架构扩展集。那么为什么您需要采用ARM NEON SIMD扩展集呢?那是因为你可以因此大幅提升你的软件性能。你可能看不到您把关键任务转入Zynq SoC可编程逻辑所获得的那么大幅的加速,但是在很多应...
广告摘要声明广告撰文 | 歌者2021世界机器人大会开幕式上,工信部副部长辛国斌表示,经过近年来的不懈努力,中国已成为支撑世界机器人产业发展的中坚力量,总体规模快速增长,2020年更是首次突破千亿元。目前,中国工业机器人核心零部件加速突破,行业应用深入拓展,已在国民经济47个行业门类中广泛应用。“十四五”时期,工信部将持续推动机器人产业高...

史海拾趣

问答坊 | AI 解惑

书籍转载--嵌入式硬件设计

书籍转载--嵌入式硬件设计 …

查看全部问答∨

新产品快递High-Side Current Monitors Simplify Measurement at High Voltage

Diodes’ High-Side Current Monitors Simplify Measurement at High Voltage Diodes Incorporated has introduced a family of 6 high reliability current monitors for 40V and 60V operation.  The ZXCT108X devices dete ...…

查看全部问答∨

单片机开发什么网站好?

单片机开发网究竟怎么样?…

查看全部问答∨

串口转并口

我有一款串口刻录机,但主板只支持并口,怎样转换一下,能把串口刻录机连接到并口主板上, …

查看全部问答∨

UniButton 在WINCE环境中更新text闪烁的问题

WINCE中的UI想使用一个好看的界面 我使用了http://www.codeproject.com/KB/buttons/UniButton.aspx 中的button。 但是我在App中需要定时更新button上显示的text,更新的时候 button会闪烁! 这个怎么解决??…

查看全部问答∨

设备仿真器有关设置

  询问高手~本人在设备仿真管理器模拟PPC,还有一个usb的红外适配器,现已用ircomm2k软件将其映射到虚拟串口com3,请问能否在仿真器中实现红外传输功能,本来想配置一下外围设备,但一映射串行端口com3就出错,敬请赐教。     ...…

查看全部问答∨

evc 4.0 下 调用软件盘

在evc4.0下 如何调用软键盘       头文件里已经包含了  #include "Sipapi.h"    在Edit获得焦点,和失去焦点是这样写的 void student::OnSetfocusEdit1() {         HWND m ...…

查看全部问答∨

2440 nandflash 启动问题

从nandflash启动,RAM应该有前面4k与nand相同。可是却在ram里从200h有66个字节为FF。后面又一样了。后来烧了个大点的程序到nandflash,每隔200h就会有66个字节为FF。不知何故,求高手帮忙分析分析。…

查看全部问答∨

LED玻璃应用与特性

Power Glass 是一款新颖的高科技含量的玻璃产品,是LED技术在玻璃领域重点全新运用,既保持玻璃超高透明的特性,又可通过LED特性使玻璃内部发出夺目的光彩,通过自由组合的光点图案,可使闪果变化多端,颜色丰富多彩。 ● 属安全建筑材料,具有抗压 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved