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;
}
写之前都不用擦除先擦除,直接对字节操作,方便的不要不要的