STM32F0 使 DFU 升级 Leave DFU
Mode 不能用户
前言
很多 STM32 System Memory 中所带的 Bootloader 都支持 USB DFU 功能,可以使用 USB 更新代码,详见《AN2606
STM32 微控制器系统存储器自举模式》。
问题
某客户在其产品的设计中,需要使用了 STM32F072RBT6。客户在使用过程中,使用 System Memory 中的 USB DFU 功能对
代码进行更新,并直接使用“Leave DFU mode”跑用户代码,进行功能观察。但是,发现 STM32F0 在点击“Leave DFU
mode”按钮后,用户代码并没有正常工作,这是为什么呢?
调研
1.了解问题
客户使用了 STM32F072B-Discovery 板进行调试的。在使用\STM32F072B-
Discovery_FW_V1.0.1\Projects\Peripheral_Examples\TIM_TimeBase 例程进行测试,先使用 IAR 将此例程进行编译,生成
TIM_TimeBase.hex 文件。使用 STM32 ST-Link Utility 软件进行烧写,烧写后可见 Discovery 板上 4 LED 灯在闪烁,确认
例程及 hex 文件的正确性。
使用 Dfu file manager 软件将 TIM_TimeBase.hex 文件生成 TIM_TimeBase.dfu 件。将 STM32F072 Boot0 引脚拉高,对
芯片进行复位,进入 System Memory 运行 Bootloader,使用 Mini USB 线连接 USB USER (CN2) PC,打开 Dfuse
Demo 软件,可发现 STM32F072 已经进入 DFU mode,如下:
点击右下的“Choose”按钮选择 TIM_TimeBase.dfu,勾选“Verify after download”后点击“Upgrade”进行代码烧写,烧
写成功后,点击“Leave DFU mode”离开 DFU 模式,发现 Discovery 板确实没有任何变化,4 LED 灯并没有闪烁,也就
是说,用户代码没有正常运行。
但是客户使用 STM32F4-Discovery 板进行测试的时候,使用\STM32F4-
Discovery_FW_V1.1.0\Project\Peripheral_Examples\TIM_TimeBase 例程,点击“Leave DFU mode”离开 DFU 模式后却可
以正常运行程序。
2.分析问题
先来看一下《AN3156USB DFU protocol used in the STM32 bootloader》中对 Leave DFU mode 的描述: