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);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
qiguoqiang
1楼-- · 2019-12-09 23:27
 精彩回答 2  元偷偷看……
hemingjing
2楼-- · 2019-12-09 23:35
弱弱的问下楼主 看门狗没打开过  这个打开,操作EEPROM会影响到WDG吗?
hemingjing
3楼-- · 2019-12-10 04:54
楼主的意思是说漏写  FLASH_Lock(FLASH_MEMTYPE_DATA);这句导致不稳定的?
zhq0571
4楼-- · 2019-12-10 08:26
收藏了  谢谢
huxiaoping
5楼-- · 2019-12-10 09:03
hemingjing 发表于 2014-11-3 17:49
楼主的意思是说漏写  FLASH_Lock(FLASH_MEMTYPE_DATA);这句导致不稳定的?

我上面是说最后的写法,但是实际工程中我看很多没写下面的很多,比如:
FLASH_DeInit();
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

另外:最后是把写标记放到最后,也就是即使在写的这个时候导致断电或者别的,但是也不会下次进来不写了,避免刚好把标记写了但是实际参数没写
FLASH_ProgramByte(0x4000, 0x55);
FLASH_ProgramByte(0x4001, 0xAA);

horbour
6楼-- · 2019-12-10 13:34
 精彩回答 2  元偷偷看……

一周热门 更多>