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条回答
片羽之神
1楼-- · 2019-12-12 10:26
多谢分享!正要学习stm8
chenhuiedu
2楼-- · 2019-12-12 12:22
之前用AVR出现过EEPROM出问题的,最近改用了STM8S的芯片,担心会出现同样的问题,先MARK下,谢谢楼主
ycheng2004
3楼-- · 2019-12-12 13:02
 精彩回答 2  元偷偷看……
jemmy
4楼-- · 2019-12-12 13:55
顶一下,即将要用它的EEPROM。
huxiaoping
5楼-- · 2019-12-12 15:18
mathison 发表于 2014-11-13 15:25
我之前发生过EEPROM不稳定的情况 后来懒得分析 直接用ST的函数库了

对,库函数往往是直接解决问题最简单的办法,很多人跟我说用寄存器效率高,其实我想说如果想提高效率完全可以在软件架构本身上下功夫,而写EEPROM一般几率可以说很小,所以谈不上效率的问题。当然如果空间不够用了可以考虑。
huxiaoping
6楼-- · 2019-12-12 18:51
ycheng2004 发表于 2014-11-14 18:41
AVR的EEPROM,是真正的EEPROM,
STM8其实是DATA Flash,更不好用,

对,但是很多人混淆二者的差别,

一周热门 更多>