|
最近调试STM8的I2C,用的是stm8s105k4,datasheet里面显示两个引脚的SDA和SCL功能为option bit,则需要我修改存储在EEPROM里面的Option Byte,参考了三年前的帖子,abner的“stm8蜂鸣器(beep)发声实验,程序里修改OptionByte位,软件复位”,基于其中的代码进行修改,准备用IAP的方法:
void main(void)
{
......
FLASH_DeInit();
FLASH_Unlock(FLASH_MEMTYPE_DATA);
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
if(FLASH_ReadOptionByte(0x4803) != 0x60)
{
FLASH_ProgramOptionByte(0x4803,0x60);//将相应的管脚remap为SDA SCL ( 有一些误操作,应该是赋值0x40,但是我想问题应该不大,大不了多remap一个引脚吧)
WWDG->CR = 0x80;//复位stm8
}
......
}
采用ST-LINK的SWIM进行debug,发现程序运行在WWDG->CR之后就跑飞了。。。。
更加悲剧的是,当我第三次进行debug的时候,发现IAR报错,主要是“Error on Option Bytes (complementary bytes). Reprogram Option Bytes of device”相关的问题。上网查了资料,就准备用STVP的ICP方法进行erase:将Option Byte部分烧写成默认值。但是发现无法正确烧写,也是报错“Error on Option Bytes (complementary bytes). Reprogram Option Bytes of device”。看到下面的log窗口显示的是Verify eroor,所以将Edit->Preferences->Verify after programming 勾掉,这样一来就可以对Option Byte进行擦除了。但是还是显示“Error on Option Bytes (complementary bytes). Reprogram Option Bytes of device”的错误。。。。
仔细分析以后,认为是擦除不彻底,查看了STM8的application note :PM0047:STM8 Flash programming。这篇文档的P14里面有表,下面有一句话:
When ROP is removed, the whole memory is erased, including option bytes
抱着死马当活马医的态度,就在Option Byte里面的ROP改为disable,再enable。。。最后问题解决了,又可以正常debug了!!!
网上关于这个问题的详细解答较少,所以将我迷迷糊糊的debug经历分享出来。还请高人点拨其中的关键点
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|