我相信你只有在解锁并验证DATA区域是否没有写保护后才能正确写入EEPROM区域。
默认情况下,EEPROM 是写保护的,需要特定的序列才能解锁:必须将两个硬件密钥写入 FLASH_DUKR 寄存器。我第一次尝试对 EEPROM 进行编程时,它不起作用。原因是我忽略了参考手册中的以下声明:“在开始编程之前,应用程序必须验证 DATA 区域没有写保护”。我把它解释为“你不应该写入写保护区域”,而真正的意思是“解锁 EEPROM 需要一些时间”。
https://lujji.github.io/blog/bare-metal-programming-stm8-part2/
不幸的是,也许你真的需要一个程序来填充 EEPROM:
//[...]
#define FLASH_IAPSR *(unsigned char*)0x505F
#define FLASH_DUKR *(unsigned char*)0x5064
#define _MEM_(mem_addr) (*(volatile unsigned char*)(mem_addr))
//[...]
void main(){
//[...]
info1 = 127;
info2 = 32767;
FLASH_DUKR = 0xAE;
FLASH_DUKR = 0x56;
while (!(FLASH_IAPSR & (1 << 3)));
_MEM_(0x4000) = info1;
while (!(FLASH_IAPSR & (1 << 2)));
_MEM_(0x4001) = (unsigned char) (info2 & 0xFF);
while (!(FLASH_IAPSR & (1 << 2)));
_MEM_(0x4002) = (unsigned char) ((info2 >> 8) & 0xFF);
while (!(FLASH_IAPSR & (1 << 2)));
FLASH_IAPSR &= ~(1 << 3);
//[...]
}