stm8s有自帶的eeprom,起始地址是0x4000,終止到哪看手冊,因爲我用的時候只寫一個4字節數據,配置如下:
入參:eeprom偏移地址,寫入的數據
void eeprom_write(const unsigned char addr,unsigned long date)
{
asm("sim");
FLASH_CR1_FIX = 1;//編程時間固定爲標準編程時間
FLASH_CR2_WPRG = 1;//使能字編程
FLASH_NCR2_NWPRG = 0;/使能字編程
do
{
FLASH_DUKR = 0xAE;
FLASH_DUKR = 0x56;
}
while(!(FLASH_IAPSR_DUL & 1));//等待解鎖
unsigned long *p = (unsigned long*)(0x4000 + addr);
*p = date;
//while(!FLASH_IAPSR_EOP & 1);//等待寫完成//加上掉電寫入不準
FLASH_IAPSR_DUL = 0;//上鎖
asm("rim");
}
說明:while(!FLASH_IAPSR_EOP & 1);被我註釋掉了,原因如註釋所寫的那樣,我也不知道爲什麼。然後寫完之後記得上鎖,要不然會不準。另外就是這裏中文手冊又出錯了,就是do while語句中的那兩句給FLASH_DUKR寫入密鑰,中文手冊寫反了。
讀eeprom就比較簡單了,代碼如下:
入參:eeprom地址偏移量 出參:相應地址的值*/
unsigned long eeprom_read(const unsigned char addr)
{
return *((unsigned long*)(0x4000 + addr));
}