STM8L系列單片機內置1K字節的EEPROM,使用起來很方便。
EEPROM的地址為:
使用1.6.1的固件庫
void EEPROM_Write_Byte(uint16_t Addr,uint8_t Data)
{
asm("sim");//關閉中斷
FLASH_Unlock(FLASH_MemType_Data);
//while(!FLASH_IAPSR_DUL);//如果DUL沒有置位,說明解鎖不成功,最好加入超時判斷
//FLASH_EraseByte(EEPROM_STARTADDR+Addr);//先擦除再寫
//FLASH_WaitForLastOperation(FLASH_MemType_Data);//等待操作完成
FLASH_ProgramByte(EEPROM_STARTADDR+Addr, Data);
FLASH_WaitForLastOperation(FLASH_MemType_Data);
FLASH_Lock(FLASH_MemType_Data);
asm("rim");//打開中斷
}
//注意寫的時候一定要寫入4字節的整數倍
void EEPROM_Write_Word(uint16_t Addr,uint32_t Data)
{
asm("sim");//關閉中斷
FLASH_Unlock(FLASH_MemType_Data);
//FLASH_EraseByte(EEPROM_STARTADDR+Addr);//先擦除再寫
//FLASH_WaitForLastOperation(FLASH_MemType_Data);//等待操作完成
//FLASH_EraseByte(EEPROM_STARTADDR+Addr+1);//先擦除再寫
//FLASH_WaitForLastOperation(FLASH_MemType_Data);//等待操作完成
//FLASH_EraseByte(EEPROM_STARTADDR+Addr+2);//先擦除再寫
//FLASH_WaitForLastOperation(FLASH_MemType_Data);//等待操作完成
//FLASH_EraseByte(EEPROM_STARTADDR+Addr+3);//先擦除再寫
//FLASH_WaitForLastOperation(FLASH_MemType_Data);//等待操作完成
FLASH_ProgramWord(EEPROM_STARTADDR+Addr, Data);
FLASH_WaitForLastOperation(FLASH_MemType_Data);//等待操作完成
FLASH_Lock(FLASH_MemType_Data);
asm("rim");//打開中斷
}
uint8_t EEPROM_Read_Byte(uint16_t Addr)
{
uint8_t res;
res = FLASH_ReadByte(EEPROM_STARTADDR+Addr);
return res;
}
寫之前都不用擦除先擦除,直接對字節操作,方便的不要不要的