1

我正在尝试在 DFU 模式下对我们板上的 STM32F401 闪存进行编程。我在我的 linux 计算机上使用 dfu-util 工具。对于我的项目要求,BOOT 0 引脚在整个过程中始终保持高电平。

我正在使用以下命令闪烁并跳转到应用程序代码。

dfu-util -a 0 -s 0x08000000:leave -D <location-to-binary>.bin

刷写完成后,我可以通过“lsusb”命令看到,有时 MCU 没有脱离 DFU 引导加载程序,有时也没有脱离它。无论哪种方式,应用程序都不会启动。

当我在引导加载程序中进一步尝试使用 leave 命令时,它显示以下日志并且上述情况继续,

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Opening DFU capable USB device...
Device ID 0483:df11
Device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(10) = dfuERROR, status(10) = Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations
Clearing status
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
DfuSe command mode
Submitting leave request...
Transitioning to dfuMANIFEST state

提前感谢您的任何建议或帮助。

4

1 回答 1

1

我发现了这个问题。我不得不取消注释system_stm32f4xx.c文件define USER_VECT_TAB_ADDRESS中的注释。

基本上发生的事情是引导加载程序正在从闪存应用程序中寻找可加载的向量地址。注释后,指向向量地址的USER_VECT_TAB_ADDRESS指针一直指向引导加载程序向量表,从而有效地使闪存应用程序崩溃并重置控制器。在 BOOT 0 引脚为高电平的情况下,它会在每次复位时不断加载到引导加载程序中。

在这个类似的问题中提供了有关此的更多信息: STM32G474 bootloader exit

于 2021-08-30T06:43:06.397 回答