DFU模式下固件更新后不启动,怀疑跳转代码出错
用USB DFU更新固件,下载过程正常,校验也通过,但重启后没反应。怀疑是跳转到应用区的汇编写错了。用ST的例程也一样。试试直接在Bootloader里软复位到APP,看差别。 跳转前要先关闭中断,这一步很多人忘。 检查栈指针初始化是不是对的。 我遇过是向量表偏移没设对。 F4的DFU例程有坑,部分版本有隐藏Bug。 可以在跳转前先打印一下APP地址确认。 是不是APP编译时起始地址没改? 别忘了SYSCFG->MEMRMP要正确配置。 我当时也是跳转不成功,最后是cache问题。 用ST-LINK调进应用区看看PC指针去了哪。 中断向量表偏移可能没有正确配置吧 主堆栈指针初始化失败? 跳转前外设状态未清理? 在启动应用代码前,必须将SCB->VTOR指向应用区的向量表首地址 从向量表读取MSP,应用区的向量表首地址存储了初始MSP值,跳转前必须将其加载到主堆栈指针寄存器。 禁用所有外设时钟,跳转前通过HAL_RCC_DeInit()复位时钟配置,并禁用PLL。 关闭全局中断 复位看门狗,若启用独立看门狗(IWDG),需在跳转前喂狗或禁用。 固件烧录不完整或校验失败可能导致应用区代码无效,引发启动失败。
页:
[1]
2