STM32F10x Flash 模擬 EEPROM
不過,范例代碼只能保存固定大小的數(shù)據(jù)(16bits),雖然容易改成不同的固定大小,但實際用起來還是很不方便。我改寫了一下,新的特性包括:
本文引用地址:http://www.ex-cimer.com/article/201611/321584.htm- 支持不同大小數(shù)據(jù)(字符數(shù)組、結(jié)構(gòu)體等)的混合存儲;
- 增加對數(shù)據(jù)的校驗和(Checksum)檢查。
附件提供了源碼。使用方法很簡單,比如要保存一個字符數(shù)組
#include "eeprom.h"
#define TITLE_SIZE 80
#define TITLE_KEY 1
#define POINT_KEY 2
typedef struct {
} Point;
char title[TITLE_SIZE] = "eeprom test string.";
Point point;
執(zhí)行必要的初始化操作后,就可以進(jìn)行寫入和讀?。?/p>
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));
實現(xiàn)混合存儲的辦法,是給每個變量附加8字節(jié)的控制信息。因此,在存儲小數(shù)據(jù)時會有較大的空間損耗,而在存儲較大的數(shù)據(jù)結(jié)構(gòu)時空間利用率更高(相對于范例)。代碼是針對STM32F103VE的實現(xiàn)。不同芯片需要對應(yīng)修改頭文件中
#define EEPROM_START_ADDRESS ((uint32_t)0x0807F000)
附件:STM32F10x_EEPROM_Emulation.zip
評論