打印
[STM8]

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

[复制链接]
3166|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的手册,写完后必须等待

使用特权

评论回复
5
Thorald| | 2016-11-12 22:01 | 只看该作者
要循环写,结尾都留个标志

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

460

帖子

3

粉丝