[STM8] STM8连续写内部EEPROM造成系统死机和复位

[复制链接]
3987|4
 楼主| taobaofarmer 发表于 2016-11-10 11:16 | 显示全部楼层 |阅读模式
我用的STM8S105K4T6+官方2.2.0版本的库,用如下代码连续写STM8的EEPROM

//向EEPROM中地址为add的位置写入字节值val
void EEPROM_ByteProgram(u16 add, u8 val)
{
    FLASH_Unlock(FLASH_MEMTYPE_DATA);

    FLASH_EraseByte(add);
    FLASH_ProgramByte(add, val);
   
    FLASH_Lock(FLASH_MEMTYPE_DATA);
}

for(i=0; i<8; i++)
{
    EEPROM_ByteProgram(0x4020+4*i, 0);
    EEPROM_ByteProgram(0x4021+4*i, 0);
    EEPROM_ByteProgram(0x4022+4*i, 0);
    EEPROM_ByteProgram(0x4023+4*i, 0);
}

发现上述代码连续写EEPROM时,写入10个左右的时候,是没问题的,再写的话,就会造成系统死机或者复位,断崖式的死机和复位,根本不跟你机会,这是什么原因呢?

另外,6年前我曾经给ST北京技术支持的吴颖工程师发过邮件咨询关于STM芯片的技术问题,都得到了很好的的答复,但是现在她的邮件找不到了,联系不上,谁有她的联系邮箱吗?谢谢
wuhuikai 发表于 2016-11-10 14:04 | 显示全部楼层
void FLASH_ProgramByte(uint32_t Address, uint8_t Data)
{
  /* Check parameters */
  assert_param(IS_FLASH_ADDRESS_OK(Address));
  *(PointerAttr uint8_t*) (MemoryAddressCast)Address = Data;
}
FLASH_ProgramByte没有等待FLASH写完就执行FLASH_Lock,写一个或一块的时间大概要3MS。有可能这个原因。我用寄存器暂时没有遇到这个问题
while((FLASH_IAPSR & 0x04) == 0); // 等待写操作成功
    FlashLook();
mintspring 发表于 2016-11-10 17:20 | 显示全部楼层
不能总对着一个地方写,要循环写,结尾都留个标志。要不然容易坏掉。
 楼主| taobaofarmer 发表于 2016-11-10 17:55 | 显示全部楼层
应该是2楼的说法对,我查了下ST官方关于写EEPROM的手册,写完后必须等待
Thorald 发表于 2016-11-12 22:01 | 显示全部楼层
要循环写,结尾都留个标志
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

460

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部