本文介绍一种特殊情况的处理。我们使用stm8芯片,有时需要使用其复用功能,就要更改CPU内部EEPROM的选项字节。在往单片机下载程序时,可能会因为误操作而导致芯片异常锁死,这时如果再想用往CPU下载程序时,就会因无法识别芯片而提示如下图所示错误(IAR环境下烧录结果):

4ae20003c1b32bf0d348?from=pc.jpg
刚接触这类问题也走过不少弯路。一开始以为是芯片损坏了,想要换芯片,结果换了芯片后还是提示错误,又以为是软件,最后发现也不是软件问题。
其实这是因为改变选项字节时操作错误导致芯片锁住了。我们一起来看看选项字节部分datasheet怎么说:
4ae30003cb2149b9f3a0?from=pc.jpg
4ae500016e23d7f55525?from=pc.jpg
我们在对选项字节OPT<option(选项)>操作时需要进行解锁,先后向FLASH_DUKR寄存器写入这两个密匙(顺序不能反,反了的话芯片就锁住了)。
do
{
FLASH->DUKR = 0x56;
FLASH->DUKR = 0xAE;
} while(!(FLASH->IAPSR & 0X08));
解锁之后就可以向选项字节OPT写入数据了,否则直接向OPT写入数据是写不进去的。
然而,如果我们因为代码出错,导致芯片被锁,该怎么处理呢?这就可以用我们在上篇文章中小编和大家介绍的另一个软件STVP来解决。
首先我们使用IAR生成任意一片代码的扩展名为.s19的文件,配置如下:
4ae20003d8f72bcb0486?from=pc.jpg
如上图选择Motorola模式,把扩展名改为.s19,编译生成这个扩展名的文件,然后打开STVP,找到该文件,如下:
4ae20003db8453f46a61?from=pc.jpg
之后注意配置选项字节为关闭保护,步骤如下图:
4ae10003de433a1ccfc2?from=pc.jpg
通过STVP的烧录,相当于强行把CPU内部flash选项字节给刷写回来。这样我们的单片机就可以再次正常使用啦。