Embedded 使用USB的STM32F072C8T7(Boot0)引导加载程序

Embedded 使用USB的STM32F072C8T7(Boot0)引导加载程序,embedded,boot,bootloader,stm32f0,Embedded,Boot,Bootloader,Stm32f0,在我的项目中,我使用的是STM32F072C8T7 MCU。在这个MCU中,只有一个名为BOOT0的引导引脚。根据应用说明,我必须配置BOOT0->GND以选择主闪存作为引导空间 我已经这样做了,这个项目似乎正在运行。我想知道的是,当我以后想升级我设备的固件时,我是否需要对BOOT0引脚进行任何更改 我想知道的是,当我以后想升级我设备的固件时,我是否需要对BOOT0引脚进行任何更改 如果您想使用出厂ROM引导加载程序来编写新固件,那么是的,对于大多数STM32部件,您需要将BOOT0引脚设置为

在我的项目中,我使用的是STM32F072C8T7 MCU。在这个MCU中,只有一个名为BOOT0的引导引脚。根据应用说明,我必须配置BOOT0->GND以选择主闪存作为引导空间

我已经这样做了,这个项目似乎正在运行。我想知道的是,当我以后想升级我设备的固件时,我是否需要对BOOT0引脚进行任何更改

我想知道的是,当我以后想升级我设备的固件时,我是否需要对BOOT0引脚进行任何更改

如果您想使用出厂ROM引导加载程序来编写新固件,那么是的,对于大多数STM32部件,您需要将BOOT0引脚设置为高,然后重置处理器。(在某些情况下,您可以将现有程序跳转到出厂引导ROM中,就好像pin处于与实际状态不同的状态,但这可能有点棘手,可能需要反向工程引导ROM的启动)

但是,在STM32处理器上更改程序还有一些其他常用方法,这些方法不经过出厂引导加载程序,因此不指向更改引导引脚的状态。其中主要有:

  • 您可以使用SWD接口写入闪存。这在开发中很常见(您也可以通过这种方式进行断点调试),但一旦产品进入客户手中,这种情况就不常见了

  • 您可以让正在运行的程序接受更新的程序。有些部件有双闪存组,您可以在其中选择一个位来启动一个或另一个。或者,您可以在flash开始时编写一个小例程,在两个图像之间进行选择。有时,您需要首先加载一个小到足以留出空间的微型固件,然后加载一个新的完整固件。这种方法在具有无线电连接的产品中非常常见,通常称为OTA(空中)升级。执行此操作的有线接口通常被认为是自定义引导加载程序(与factory ROM引导加载程序相比)-例如,一些早期的USB接口部件没有factory引导加载程序支持的功能,因此如果您想通过USB进行升级,您必须编写自己的


  • 谢谢你的详细回答。在我当前的配置中,我将boot0引脚连接到地上,程序存储在用户闪存中。由于我有一个蓝牙模块连接到STM,我可以使用您答案第2部分中提到的方法发布OTA固件更新?此外,在此过程中,我也会将boot0引脚绑在地上?当您使用自己的片上软件而不是出厂的bootloader写入闪存时,您确实会将boot0引脚设置为从闪存开始。但是,要意识到,实现固件升级方案比编写普通固件更具挑战性,这远远超出了本文的讨论范围。