如何从用户闪存启动STM32?

如何从用户闪存启动STM32?,stm32,microcontroller,bootloader,Stm32,Microcontroller,Bootloader,STM32微控制器能够从不同的源启动,例如: 用户快闪 系统存储器 嵌入式SRAM 在固件方面,“从用户闪存引导”是否意味着执行自定义引导加载程序?否 “从用户闪存启动”模式意味着复位后运行的应用程序代码位于用户闪存中。该模式下的用户闪存别名为启动内存空间中的地址0x00000000。重置后,从地址0x00000000获取堆栈顶部值,然后代码在地址0x00000004处开始执行 相反,“从系统内存启动”“模式只是意味着系统内存(而不是用户闪存)现在被别名为从地址0x00000000开始。在这种情

STM32微控制器能够从不同的源启动,例如:

  • 用户快闪
  • 系统存储器
  • 嵌入式SRAM
  • 在固件方面,“从用户闪存引导”是否意味着执行自定义引导加载程序?

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

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

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

    有关更多详细信息,请参阅您正在使用的特定STM32设备系列的参考手册中标题为“引导配置”的部分。具体取决于

    选项“从用户闪存引导”将运行用户闪存中的任何内容。此代码可以是您想要的任何代码。它可以是:

    • 自定义引导加载程序或
    • 它可能是应用程序代码
    区别是基于您编写代码的目的的逻辑区别。i、 甚至有可能让一个应用程序重写部分或全部(你称之为什么取决于你自己)

    如果您确实使用自定义引导加载程序,那么您通常会有两个项目

  • 自定义引导加载程序将有自己的项目,并将自己生成的二进制映像加载到flash的开始部分
  • 应用程序代码也有自己的项目和生成的.bin文件 应用程序被加载到一个特定的地址中,引导加载程序在构建时就知道这个地址(在一些空闲的静态分配内存块中-通常在页面边界上,以允许在保持引导加载程序不变的情况下重新刷新)。这些地址可以在链接器文件中配置

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

  • 自定义COM堆栈,用于通过其他COM协议刷新应用程序
  • 应用程序代码的双重冗余

  • 请注意,STM32 micros“系统内存”已经包含ST自己的引导加载程序,它支持一系列串行链接来刷新micro,而不需要完全自定义的引导加载程序。

    ST的文档很愚蠢。他们提到了这一点,但他们也没有告诉你只需要配置
    BOOT0
    BOOT1
    引脚就可以选择启动源

    这两个管脚提供了三个选项:

    • A
      BOOT0
      =
      0
      BOOT1
      =无论什么
    • B
      BOOT0
      =
      1
      BOOT1
      =
      0
    • C
      BOOT0
      =
      1
      BOOT1
      =
      1
    选项A在闪存中引导,选项B在引导加载程序中引导,选项C在SRAM中引导

    那么如何使用这个。首先选择configurationB开始与引导加载程序通信,引导加载程序(在引导加载程序自己的命令中)擦除闪存并在闪存中上载程序。然后将配置更改为A,并使用MCU的重置引脚重新启动

    注意:

    我喜欢NXP的文档,它的所有内容都是黑白相间的。 作为一名开发人员,我重视我的时间,好的文档是一条路要走。 如果您重视文档,请放弃ST,转而使用NXP。以下是NXP的示例文档:

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