Uriah 发表于 2025-10-20 07:48

DFU模式下固件更新后不启动,怀疑跳转代码出错

用USB DFU更新固件,下载过程正常,校验也通过,但重启后没反应。怀疑是跳转到应用区的汇编写错了。用ST的例程也一样。

Clyde011 发表于 2025-10-20 07:51

试试直接在Bootloader里软复位到APP,看差别。

公羊子丹 发表于 2025-10-20 07:52

跳转前要先关闭中断,这一步很多人忘。

周半梅 发表于 2025-10-20 07:53

检查栈指针初始化是不是对的。

帛灿灿 发表于 2025-10-20 07:54

我遇过是向量表偏移没设对。

童雨竹 发表于 2025-10-20 07:55

F4的DFU例程有坑,部分版本有隐藏Bug。

万图 发表于 2025-10-20 07:56

可以在跳转前先打印一下APP地址确认。

Wordsworth 发表于 2025-10-20 07:57

是不是APP编译时起始地址没改?

Bblythe 发表于 2025-10-20 07:58

别忘了SYSCFG->MEMRMP要正确配置。

Pulitzer 发表于 2025-10-20 07:59

我当时也是跳转不成功,最后是cache问题。

Uriah 发表于 2025-10-20 08:00

用ST-LINK调进应用区看看PC指针去了哪。

故里说长安 发表于 2025-10-20 10:27

中断向量表偏移可能没有正确配置吧

豌豆爹 发表于 2025-10-20 11:27

主堆栈指针初始化失败?

进入猫次元 发表于 2025-10-20 13:28

跳转前外设状态未清理?

进入猫次元 发表于 2025-10-20 15:29

在启动应用代码前,必须将SCB->VTOR指向应用区的向量表首地址

麻花油条 发表于 2025-10-20 16:30

从向量表读取MSP,应用区的向量表首地址存储了初始MSP值,跳转前必须将其加载到主堆栈指针寄存器。

classroom 发表于 2025-10-20 18:31

禁用所有外设时钟,跳转前通过HAL_RCC_DeInit()复位时钟配置,并禁用PLL。

cr315 发表于 2025-10-20 19:31

关闭全局中断

duo点 发表于 2025-10-20 19:32

复位看门狗,若启用独立看门狗(IWDG),需在跳转前喂狗或禁用。

elephant00 发表于 2025-10-20 10:32

固件烧录不完整或校验失败可能导致应用区代码无效,引发启动失败。
页: [1] 2
查看完整版本: DFU模式下固件更新后不启动,怀疑跳转代码出错