stm8的EEPROM的搽除是写0,FLASH_PRO与FLASH_DATA写的秘钥顺序相反
EEPROM读写前要解锁的。这个很简单,在技术文档里讲得很清楚。我用一个宏定义来代表EEPROM单元。
#define EEPROM_BASE_ADDR 0x4000
#define ADDRESS(i) (*(volatile unsigned char *)(EEPROM_BASE_ADDR + i))
读0x4000单元,用 x = ADDRESS(0); 读0x4001单元,用 x = ADDRESS(1);。。。。。。。。。。
写0x4000单元,用 ADDRESS(0) = x; 写0x4001单元,用 ADDRESS(1) = x; 。。。。。。。。。。
调试时,用 memory 窗口可以看到数据是否写进去。
FLASH_Unlock(FLASH_MEMTYPE_DATA);
while(!(FLASH->IAPSR & FLASH_IAPSR_DUL));/* ADD 等待解锁完毕*/
ADDRESS(1) = x
FLASH_Lock(FLASH_MEMTYPE_DATA);
stvd:
//#define EEPROM_BASE_ADDR XXXX
//#define ADDRESS(i) (*(volatile @far unsigned char *)(EEPROM_BASE_ADDR + i))
uchar @far *Flash_addr=(uchar @far*)(addrEEPROM_BASE_ADDR );