硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1119|回复: 4
收起左侧

[STM32H7] 炸裂!H743 BOOT_ADD0被写成0x0000怎么救?

[复制链接]

25

主题

233

回帖

308

积分

高级会员

积分
308
QQ
发表于 2024-5-30 15:25:37 | 显示全部楼层 |阅读模式

做试验呢,写BOOT_ADDR0,突然变成0就死掉了。这边自举脚也都没印出来,这种情况怎么救?


BOOT_ADDR值.png
回复

使用道具 举报

6

主题

68

回帖

86

积分

初级会员

积分
86
发表于 2024-5-30 15:47:58 | 显示全部楼层
可以用 StLink + 上位机软件写回去哦,写成0x0800 即可。
回复

使用道具 举报

25

主题

233

回帖

308

积分

高级会员

积分
308
QQ
 楼主| 发表于 2024-5-30 16:27:29 | 显示全部楼层
救活了!!!!

1.先把BOOT脚拉高上电,让芯片系统时钟正常起来,用调试器进调试模式,此时取消BOOT脚拉高。
2.强行修改pc寄存器为0x08000338(也就是程序入口),进我们可控的程序中。
程序入口.png
3.在可控程序中通过打断点的方式,在解锁FLASH、解锁FLASH配置后,配置更新前,通过地址修改BOOT_PRGR中BOOT_ADD0的值为默认值,比如我这里是改为0x0800
FLASH解锁后配置更新前.png 查找ADDR0对应地址.png
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配置锁定 */
}

回复

使用道具 举报

25

主题

233

回帖

308

积分

高级会员

积分
308
QQ
 楼主| 发表于 2024-5-30 16:28:39 | 显示全部楼层
casy99 发表于 2024-5-30 15:47
可以用 StLink + 上位机软件写回去哦,写成0x0800 即可。

感谢!就是没有STLINK呢,已经摸索出仿真器的通用恢复方式了。
回复

使用道具 举报

6

主题

68

回帖

86

积分

初级会员

积分
86
发表于 2024-5-30 16:38:22 | 显示全部楼层
楼主厉害,加油
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-15 00:12 , Processed in 0.042123 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表