STM32 bluepill USB 引导加载程序 DFU

Posted

技术标签:

【中文标题】STM32 bluepill USB 引导加载程序 DFU【英文标题】:STM32 bluepill USB bootloader DFU 【发布时间】:2020-04-29 11:41:29 【问题描述】:

我正在尝试为蓝色药丸 STM32F103 制作一个可用于多个项目的基础项目。我希望能够使用 mirco-USB 端口刷写设备并使用串行 COM 端口发送命令

目前为止:

使用 STLINK 工具成功创建了一个基于“hello world”闪烁 LED 生成文件的项目并下载到设备 创建 UART 命令接口以通过串行 FTDI 设备进行命令 将 DFU 引导加载程序刷到芯片上,并成功使用它将我自己的(makefile 编译的)bin 刷到设备上

使用 DFU 时,我发现将 .bin 刷入设备后,它不再显示为 USB 设备。按照下面链接的文章,我不需要修改我的项目代码的 ROM 地址,我在我的 makefile 项目链接器中将文件大小缩短到 55k,但仍然没有成功

https://os.mbed.com/users/devanlai/code/STM32F103C8T6_USBDFU/graph/ https://github.com/devanlai/dapboot/releases/tag/v0.1

我的问题:

在使用 DFU 引导加载程序时,如果我的应用程序代码中没有写入 USB 堆栈,一旦我的代码运行,它应该如何作为 USB 设备可见? 我需要移动 bluepill 上的跳线吗?我已经尝试了各种组合,但都没有成功 在我的项目中通过 USB 获取串行通信和引导加载程序而不编写和调试我自己独特的引导加载程序的最佳方式是什么?

【问题讨论】:

【参考方案1】:

恐怕它将不再作为 USB 设备出现,除非您在代码中实现 USB 堆栈。

什么是我获得串行通信和引导加载程序的最佳方式 在我的项目中通过 USB 无需编写和调试我自己独特的 引导加载程序?

只有一种方法 - 您需要在应用程序中使用 USB 堆栈。

【讨论】:

【参考方案2】:

因此,如果我正确理解了您的问题,那么您希望通过 USB 使用 DFU 闪存您的 MCU 板,并在它运行时连接到 USB 串行端口。

可以这样做,因为 DFU 功能是引导加载程序的一部分,而 USB 串行端口是应用程序的一部分。

创建虚拟 com 端口的最简单方法是使用 STM32 CubeMX USB CDC。 An video example is found here.CubeMX生成的源代码可以拉出来添加到自己的项目中。

【讨论】:

以上是关于STM32 bluepill USB 引导加载程序 DFU的主要内容,如果未能解决你的问题,请参考以下文章

带有 STM32f103c8t6 Bluepill 和 CAN 总线的 HAL_CAN_ERROR_PARAM

STM32 demo USB-DFU boot loader如何检查是不是加载了用户代码?

我无法在基于自定义 USB CDC 类的 STM32 设备上接收超过 64 个字节

STM32 通过引导加载程序闪烁失败 (UART1)

STM32 从外部闪存引导,QUADSPI 引导加载程序

STM32F103C8 Bluepill板HAL_delay()问题