STM32从用户闪存启动

时间:2015-05-26 05:08:59

标签: stm32 bootloader

STM32提供从用户闪存,系统内存和嵌入式SRAM启动的选项。在固件方面,“从用户Flash启动”意味着执行自定义引导加载程序吗?

3 个答案:

答案 0 :(得分:5)

没有

从用户闪存启动”模式意味着复位后运行的应用程序代码位于用户闪存中。该模式下的用户闪存别名为从引导存储空间中的地址0x00000000开始。复位后,堆栈顶部值从地址0x00000000获取,然后代码在地址0x00000004处开始执行。

相反,“从系统内存引导”模式只是意味着系统内存(不是用户闪存)现在别名为从地址0x00000000开始。此情况下的应用程序代码必须已加载到系统内存中。

从嵌入式SRAM启动”模式不会为SRAM地址设置别名。选择此模式后,器件需要使用NVIC异常表和偏移寄存器重新定位向量表,并在嵌入式SRAM的启动时开始执行。在这种情况下,应用程序代码必须已经加载到嵌入式SRAM中。

有关更多详细信息,请参阅“引导配置”一节中有关您正在使用的特定STM32器件系列的参考手册。

答案 1 :(得分:0)

要视情况而定。

选项“从用户Flash引导”将运行,无论用户Flash如何运行。此代码可以是您想要的任何代码。可能是:

  • 自定义引导程序或
  • 它可能是应用程序代码。

根据您编写代码所要做的工作,区别是合乎逻辑的。也就是说,甚至有可能会编写一个应用来重写其部分或全部内容(您称其为您自己决定)。

如果确实使用自定义引导加载程序,则通常将有两个项目。

  1. 自定义引导程序将具有自己的项目,并将其自己生成的二进制映像加载到Flash的开头。
  2. 应用程序代码也具有自己的项目和生成的.bin文件。

将应用程序加载到引导加载程序在构建时知道的特定地址(在一些免费的静态分配的内存块中-通常在页面边界上,以允许在刷新时保持引导加载程序不变)。可以在链接器文件中配置这些地址。

自定义引导加载程序是允许启用以下功能的好方法:

  1. 自定义coms堆栈,用于通过其他coms协议重新刷新您的应用程序。
  2. 应用程序代码的双重冗余。

请注意,STM32 micros的“系统内存”已经包含ST自己的引导程序,该引导程序支持一系列串行链接以刷新Flash,而无需完全自定义的引导程序。

答案 2 :(得分:0)

ST 的文档很愚蠢。他们提到了这一点,但他们也没有告诉您只需要配置 BOOT0BOOT1 引脚才能选择引导源。

所以这两个引脚二进制给你三个选项:

  • (A) BOOT0 = 0, BOOT1 = whatever,
  • (B) BOOT0 = 1, BOOT1 = 0
  • (C) BOOT0 = 1BOOT1 = 1

选项A在FLASH中启动,选项B在引导加载程序中启动,选项C在SRAM中启动。

那么如何使用它。首先选择配置 B 开始与您指示 (在引导加载程序自己的命令中) 的引导加载程序通信以擦除 FLASH 并将您的程序上传到 FLASH 中。然后将配置更改为 A 并使用 MCU 的 RESET 引脚重新启动。

<块引用>

注意:

我更喜欢 NXP 的文档,其中包含黑白相间的所有内容。 作为一名开发人员,我重视我的时间,良好的文档是一条必经之路。 如果文档是您所看重的,那么放弃 ST 并选择 NXP。这是 NXP 的示例文档:

https://www.nxp.com/docs/en/user-guide/UM10562.pdf

我真的很抱歉 ST,但你必须做得比你现在做的更好......