在我的项目中,我使用的是 STM32F072C8T7 MCU。在这个 MCU 中,只有一个名为 BOOT0 的引导引脚。根据应用说明,我必须配置 BOOT0 -> GND 以选择主闪存作为引导空间。
我已经这样做了,该程序似乎正在运行。我想知道的是,当我以后想升级设备的固件时,是否需要对 BOOT0 引脚进行任何更改?
在我的项目中,我使用的是 STM32F072C8T7 MCU。在这个 MCU 中,只有一个名为 BOOT0 的引导引脚。根据应用说明,我必须配置 BOOT0 -> GND 以选择主闪存作为引导空间。
我已经这样做了,该程序似乎正在运行。我想知道的是,当我以后想升级设备的固件时,是否需要对 BOOT0 引脚进行任何更改?
我想知道的是,当我以后想升级设备的固件时,是否需要对 BOOT0 引脚进行任何更改?
如果您想使用工厂 ROM 引导加载程序来编写新固件,那么是的,对于大多数 STM32 部件,您需要将 BOOT0 引脚拉高,然后重置处理器。(在某些情况下,可以让您现有的程序跳转到工厂引导 ROM,就好像引脚处于与实际不同的状态一样,但这可能有点难以弄清楚,并且可能需要对启动进行逆向工程的引导 ROM)
但是,还有一些其他常见的方法可以更改 STM32 处理器上的程序,这些方法不通过工厂引导加载程序,因此不指向更改引导引脚的状态。其中最主要的是:
您可以使用 SWD 接口写入闪存。这在开发中很常见(您也可以通过这种方式进行断点调试),但一旦产品进入客户手中就不太常见了。
您可以让正在运行的程序接受更新的程序。有些部件有双闪存库,您可以在其中选择一个来启动一个或另一个。或者您可以在闪存开始附近编写一个小程序,在两个图像之间进行选择。有时您需要先加载一个足够小以留出空间的微型固件,然后再加载一个新的完整固件。这种方法在具有无线电连接的产品中非常常见,通常称为 OTA(空中下载)升级。执行此操作的有线接口通常被认为是自定义引导加载程序(与工厂 ROM 引导加载程序相比) - 例如,一些带有 USB 接口的早期部件没有通过工厂引导加载程序支持,所以如果你想通过 USB 进行升级你必须自己写。