用STM8L052做个项目,这几天发现写EEPROM偶尔会死机,产品频繁测试的时候,按键按下后会写一次EEPROM,按键一直按测试,发现不定时会出现一次死机,找不到什么问题,大家帮忙看看。
写EEPROM的字函数
uint8_t EEPROM_Buff_Write (uint16_t addr, uint8_t *buff, uint16_t len)
{
uint16_t i, count = 0;
//WDT_Feed (); //喂狗
//这样字节写的话会成功,但是快写的话失败。而且要全速运行才能写正确
disableInterrupts(); //关全局中断
FLASH_DUKR = 0xAE; //写入第一个密钥
FLASH_DUKR = 0x56; //写入第二个密钥
FLASH_CR2 = 0x00; //标准块编程,会先擦除的
while (((FLASH_IAPSR 0x08) == 0) (count < 0xFFFF))
{
count ++; //等待解锁完成
}
if (count == 0xFFFF)return 0;
//WDT_Feed (); //喂狗
for(i = 0; i < len; i++)
{
*((uint8_t *)(USERPAGE + addr + i)) = buff[i];
while(FLASH_IAPSR_EOP == 0);
}
FLASH_IAPSR_DUL = 0; //操作完要加锁
enableInterrupts(); //开全局中断
return 1;
}
调用时的操作
buff_Count = 0;
buff[buff_Count ++] = Manu_Temp / 100;
buff[buff_Count ++] = Manu_Temp % 100;
EEPROM_Buff_Write (0x0D0, buff, buff_Count);