救活了!!!!
1.先把BOOT脚拉高上电,让芯片系统时钟正常起来,用调试器进调试模式,此时取消BOOT脚拉高。
2.强行修改pc寄存器为0x08000338(也就是程序入口),进我们可控的程序中。
3.在可控程序中通过打断点的方式,在解锁FLASH、解锁FLASH配置后,配置更新前,通过地址修改BOOT_PRGR中BOOT_ADD0的值为默认值,比如我这里是改为0x0800
4.继续运行走过配置加载、FLASH锁定的过程,ADD0的值就正常了
这是比较保险的恢复方式,当然也可以使用完全的HAL库方式进行恢复。我就是用HAL操作做试验整成0x0000的,恢复就没有采用HAL设置。
[C] 纯文本查看 复制代码 int main(void)
{
InitCpu( );
FLASH_OBProgramInitTypeDef BootAddrUpdata;
HAL_FLASH_Unlock( ); /* FLASH 解锁 */
HAL_FLASH_OB_Unlock( ); /* FLASH配置解锁 */
HAL_FLASHEx_OBGetConfig(&BootAddrUpdata);
BootAddrUpdata.OptionType = OPTIONBYTE_BOOTADD;
BootAddrUpdata.BootAddr0 = 0x08000000;
HAL_FLASH_OB_Launch( ); /* 启动配置加载 */
HAL_FLASH_Lock( ); /* FLASH 锁定 */
HAL_FLASH_OB_Lock( ); /* FLASH配置锁定 */
}
|