STM32提供从用户闪存,系统内存和嵌入式SRAM启动的选项。在固件方面,“从用户Flash启动”意味着执行自定义引导加载程序吗?
答案 0 :(得分:5)
没有
“从用户闪存启动”模式意味着复位后运行的应用程序代码位于用户闪存中。该模式下的用户闪存别名为从引导存储空间中的地址0x00000000开始。复位后,堆栈顶部值从地址0x00000000获取,然后代码在地址0x00000004处开始执行。
相反,“从系统内存引导”模式只是意味着系统内存(不是用户闪存)现在别名为从地址0x00000000开始。此情况下的应用程序代码必须已加载到系统内存中。
“从嵌入式SRAM启动”模式不会为SRAM地址设置别名。选择此模式后,器件需要使用NVIC异常表和偏移寄存器重新定位向量表,并在嵌入式SRAM的启动时开始执行。在这种情况下,应用程序代码必须已经加载到嵌入式SRAM中。
有关更多详细信息,请参阅“引导配置”一节中有关您正在使用的特定STM32器件系列的参考手册。
答案 1 :(得分:0)
要视情况而定。
选项“从用户Flash引导”将运行,无论用户Flash如何运行。此代码可以是您想要的任何代码。可能是:
根据您编写代码所要做的工作,区别是合乎逻辑的。也就是说,甚至有可能会编写一个应用来重写其部分或全部内容(您称其为您自己决定)。
如果确实使用自定义引导加载程序,则通常将有两个项目。
将应用程序加载到引导加载程序在构建时知道的特定地址(在一些免费的静态分配的内存块中-通常在页面边界上,以允许在刷新时保持引导加载程序不变)。可以在链接器文件中配置这些地址。
自定义引导加载程序是允许启用以下功能的好方法:
请注意,STM32 micros的“系统内存”已经包含ST自己的引导程序,该引导程序支持一系列串行链接以刷新Flash,而无需完全自定义的引导程序。
答案 2 :(得分:0)
ST 的文档很愚蠢。他们提到了这一点,但他们也没有告诉您只需要配置 BOOT0
和 BOOT1
引脚才能选择引导源。
所以这两个引脚二进制给你三个选项:
BOOT0
= 0
, BOOT1
= whatever,BOOT0
= 1
, BOOT1
= 0
和BOOT0
= 1
,BOOT1
= 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,但你必须做得比你现在做的更好......