嵌入式应用中经常会遇到需要保存一些数据比如选项和设置等等,为了在设备关机或掉电情况下数据不丢失,我们会讲数据保存在EEPROM里面。STM32系列MCU已经被广泛的使用,可是该芯片内没有EEPROM。如果外接一片EEPRM会增加硬件成本。
本文将以STM32F0为例介绍一种使用片内Flash替代EEPROM的方法,仅供大家参考。
STM32F0芯片内部Flash页尺寸为1k。
首先程序需要使用STMicroelectronics提供的标准外设库中的stm32f0xx_flash.h。如下:
#include "stm32f0xx_flash.h"
//定义常量 (以STM32F051R8为例)
#define
FLASH_PAGE_SIZE ((uint32_t)0x00000400) #define FLASH_USER_START_ADDR ((uint32_t)0x0800FC00) #define
FLASH_USER_END_ADDR ((uint32_t)0x08010000)
//定义需保存数据的结构
typedef struct
{
uint8_t
sensitivity;
uint8_t
track_no;
uint8_t
high_lumi;
uint8_t
low_lumi;
uint32_t
hold_time;
uint8_t
adc_output;
uint8_t
dim_step;
uint16_t
reserved;
uint32_t
data_va