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条回答
tarzar
1楼-- · 2019-12-11 18:07
布心 发表于 2014-11-4 13:35
见:http://www.amobbs.com/thread-5602759-1-1.html

谢谢!还没用到,所以没去搜
tarzar
2楼-- · 2019-12-11 22:03
布心 发表于 2014-11-4 13:35
见:http://www.amobbs.com/thread-5602759-1-1.html

原来是重开贴子
eddia2012
3楼-- · 2019-12-12 00:55
学习了,谢谢!
yebx
4楼-- · 2019-12-12 02:55
 精彩回答 2  元偷偷看……
huxiaoping
5楼-- · 2019-12-12 05:21
tarzar 发表于 2014-11-4 13:44
原来是重开贴子

非也,大多数都是不同MCU寄存器不同导致的问题,但是一般没人怀疑,所以,最好用函数库
mathison
6楼-- · 2019-12-12 07:46
huxiaoping 发表于 2014-11-5 12:42
非也,大多数都是不同MCU寄存器不同导致的问题,但是一般没人怀疑,所以,最好用函数库 ...

我之前发生过EEPROM不稳定的情况 后来懒得分析 直接用ST的函数库了

一周热门 更多>