本帖最后由 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);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
对,库函数往往是直接解决问题最简单的办法,很多人跟我说用寄存器效率高,其实我想说如果想提高效率完全可以在软件架构本身上下功夫,而写EEPROM一般几率可以说很小,所以谈不上效率的问题。当然如果空间不够用了可以考虑。
一周热门 更多>