STM8 EEPROM不稳定解决方法

2019-12-09 19:17发布

本帖最后由 huxiaoping 于 2014-11-3 18:20 编辑

STM8 EEPROM不稳定解决方法:

大多是写步奏或者漏写导致,下面是标准流程:

void EEPROM_WriteDefault(void)
{
    FLASH_DeInit();
    if((FLASH_ReadByte(0x04000)!=0x55) || (FLASH_ReadByte(0x04001)!=0xAA))
    {
        /*Define FLASH programming time*/
        FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

        /* Unlock Data memory */
        FLASH_Unlock(FLASH_MEMTYPE_DATA);
        
        FLASH_ProgramByte(0x4002, 0x22);
        FLASH_ProgramByte(0x4003, 0x33);
        FLASH_ProgramByte(0x4004, 0x44);
        FLASH_ProgramByte(0x4005, 0x55);
        FLASH_ProgramByte(0x4006, 0x66);

        FLASH_ProgramByte(0x4000, 0x55);        //标记留到最后写,避免刚好把标记写了但是实际参数没写
        FLASH_ProgramByte(0x4001, 0xAA);

        //FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
        FLASH_Lock(FLASH_MEMTYPE_DATA);
        //FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
        WWDG->CR = 0x80;//复位stm8
    }
}


实际工程中我看很多没写下面的很多,比如:
FLASH_DeInit();
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

另外:最后是把写标记放到最后,也就是即使在写的这个时候导致断电或者别的,但是也不会下次进来不写了,避免刚好把标记写了但是实际参数没写
FLASH_ProgramByte(0x4000, 0x55);
FLASH_ProgramByte(0x4001, 0xAA);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。