EEPROM可用于MCU断电时的重要数据的保存。
以下为STM8S003F3的EEPROM程序代码,验证可行。
#define EEPROM_HEAD_ADDR 0x004000
//当写EEPROM时,将此字节的数据写入到EEPROM的首地址,表示操作过EEPROM。
//上电读EEPROM时,若检测到EEPROM的首地址的字节为此字节则读出内部数据。
#define FLAG_VALIDDATA 0x55
//------------------------------------------------------------------------------------------------------------
// 名称: Read_EEPROM 。
// 功能: 读EEPROM,若内有有效数据则读出 。
// 调用:无 。
// 返回: 无 。
// 说明: 无。
// 形参: 无 。
// 形参取值范围: 无 。
//------------------------------------------------------------------------------------------------------------
void Read_EEPROM(void)
{
u8 i,j;
//EEPROM解除保护。
FLASH_Unlock(FLASH_MEMTYPE_DATA);
//若EEPROM的首地址即第一个字节是标志字节,可知之前向EEPROM中写入过数据,应读出。
if(FLASH_ReadByte(EEPROM_HEAD_ADDR) == FLAG_VALIDDATA)
{
//将10组共60个字节的数据从EEPROM中读出 。
for(i=0; i<10; i++)
{
for(j=0; j<6; j++)
{
Timer_Setting[i][j] = FLASH_ReadByte(EEPROM_HEAD_ADDR+1+i*6+j);
}
}
}
//EEPROM加上保护。
FLASH_Lock(FLASH_MEMTYPE_DATA);
}
//------------------------------------------------------------------------------------------------------------
// 名称: Write_EEPROM 。
// 功能: 将数据写入到EEPROM中 。
// 调用:无 。
// 返回: 无 。
// 说明: 无。
// 形参: 无 。
// 形参取值范围: 无 。
//------------------------------------------------------------------------------------------------------------
void Write_EEPROM(void)
{
u8 i,j;
//EEPROM解除保护。
FLASH_Unlock(FLASH_MEMTYPE_DATA);
//STM8S003F3一共有128字节的EEPROM空间。
//写入前,全部擦除。
for(i=0; i<128; i++)
{
FLASH_EraseByte(EEPROM_HEAD_ADDR + i);
}
//在EEPROM的首地址写入标志字节,表示EEPROM被使用过,内有有效数据。
FLASH_ProgramByte(EEPROM_HEAD_ADDR, FLAG_VALIDDATA);
//将10组共60个字节的数据写入EEPROM中。
for(i=0; i<10; i++)
{
for(j=0; j<6; j++)
{
FLASH_ProgramByte((EEPROM_HEAD_ADDR+1+i*6+j), Timer_Setting[i][j]);
}
}
//EEPROM加上保护。
FLASH_Lock(FLASH_MEMTYPE_DATA);
}