STM32引导过程常见问题解答
STM32引导过程和系统引导加载程序是什么?摘要本文提供了有关STM32引导过程的信息。在第一部分中,它概述了这个过程,并介绍了不同的引导模式。在第二部分中,它。。。
STM32引导过程和系统引导加载程序是什么?
总结
本文提供了有关STM32引导过程的信息。在第一部分中,它概述了这个过程,并介绍了不同的引导模式。在第二部分中,它详细介绍了STM32系统引导加载程序和从内部用户闪存引导STM32。
请注意,STM32MP1未包含在本常见问题解答中。有关更多信息,请参阅wiki页面。
请注意,STM32MP1未包含在本常见问题解答中。有关更多信息,请参阅wiki页面。
1.STM32引导过程概述
所有STM32微控制器都具有从以下位置启动的功能:
- 主快闪存储器,通常是固件所在的位置:默认值地址0x80000000或选项字节中定义的值(如果可能)。
- ST嵌入式引导加载程序位于系统闪存中:生产时闪存的代码,不能以任何方式修改。
- SRAM公司:通常用于调试目的,或需要高性能或不访问闪存的特定操作。
对于STM32,这是仅有的三个可能的引导目标。
1.1如何选择引导目标?
答案可在STM32的参考手册引导配置一章中找到。
STM32G071的引导配置定义示例:

见第66页第2.5节RM0444参考手册STM320x1。
根据所选的STM32,此配置将取决于以下各项的组合:
根据所选的STM32,此配置将取决于以下各项的组合:
- 引脚值:
BOOT0和BOOT1引脚级别,如果在您的包中可用 - 选项字节数:
nBoot0/nBoot1/nBoot0_SW
BOOT_ADD0/BOOT_ADD1/nBOOTO_SEL(引导_附加数据0/引导_附加信息1/引导_选择)
nDBAN/BFB2银行
引导锁定
TZen/NSBOOTADD0/NSBOOTADD 1
RSSCMD/SECBOOTADD0/SECBOOTADD1
RDP公司 - 用户flash的内容
警告:在RDP级别2中,设备只能从主闪存启动
1.2关于引导过程的详细信息
当STM32通电时,嵌入式闪存会自动加载选项字节。在选项字节加载序列期间,设备仍处于重置状态,无法访问嵌入式闪存。BOOT引脚上的值在重置释放后锁定在SYSCLK的第4个上升沿,然后解析引导模式配置。
2.STM32系统引导程序
2.1定义
引导加载程序存储在内部引导ROM(闪存的系统内存部分),并在生产过程中由ST编程。它的主要任务是通过可用的串行外围设备之一,如USART、CAN、USB、I2C或SPI,将应用程序下载到内部闪存。
2.2参考文件:安2606
这文件,AN2606STM32微控制器系统内存引导模式,提供了有关以下方面的所有详细信息:
- 激活模式
- 有关的信息引导程序版本和限制
- 硬件连接建议
- 许多的“注意事项”需仔细阅读(本申请说明中列出了所有已知的限制条件)
- 如何从用户应用程序跳转到引导加载程序。
备注:在一些具有闪存空检查机制的STM32上,不可能从用户闪存中运行的应用程序跳入引导加载程序。所有细节描述在这个安2606。
检查是否正确激活引导加载程序,或者为了调查与引导加载程序的任何通信问题,我们可以建议您也遵循我们的相关MOOC公司:STM32引导和启动提示MOOC
2.3 STM32引导加载程序中使用的协议。
对于每个通信接口(CAN/USART/USB/I2C/SPI/FDCAN),专用应用说明描述了协议:
- 安3154:STM32引导加载程序中使用的CAN协议。
- 安3155:STM32引导加载程序中使用的USART协议。
- 安3156:STM32引导加载程序中使用的USB DFU协议。
- 安4221:STM32引导加载程序中使用的I²C协议。
- AN4286年:STM32引导加载程序中使用的SPI协议。
- 安5405:STM32引导加载程序中使用的FDCAN协议。
2.4与嵌入式引导加载程序通信的PC工具。
- STM32管式编程器:UART/USB DFU和STLinkV3:I²C、SPI和CAN。
- DFuse演示:(USB DFU)在维护中考虑。
- 闪速装载机演示器:(UART)。
3.从主闪存启动STM32
所有STM32均基于Arm Cortex-M内核。该核心的引导过程是:
-
从地址0x0000_0000中获取MSP的初始值。
-
从地址0x0000_0004中获取PC的值。
-
从与该值对应的地址继续执行。
在许多STM32系列上,内部闪存中的启动地址为0x8000000。此地址通过引导模式机制重新映射到地址0x00000000。位于0x0000_0004的地址将指向重置处理程序。
在一些系列(如STM32H7或STM32L5)上,启动地址可能不同,并且由于选项字节而指定。
牢记二进制文件的第一个32位字是主堆栈指针位置以及第二个32位字是地址或重置处理程序。
重置处理程序实现可以在名为startup_stm32g071xx.s的程序集文件中找到(命名取决于目标设备)。
这个应该出现在您的STM32项目中。
根据您的IDE,您可以在STM32CubeFirmware中找到CMSIS包中的实现。
牢记二进制文件的第一个32位字是主堆栈指针位置以及第二个32位字是地址或重置处理程序。
重置处理程序实现可以在名为startup_stm32g071xx.s的程序集文件中找到(命名取决于目标设备)。
这个应该出现在您的STM32项目中。
根据您的IDE,您可以在STM32CubeFirmware中找到CMSIS包中的实现。
STM32Cube_FW_G0_VX.Y.Z\Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\iar
STM32Cube_FW_G0_VX.Y.Z\Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\gcc
STM32Cube_FW_G0_VX.Y.Z\Drivers\CMSIS\Device\ST\STM32F0xx\Source\Templates\arm
例如,在STM32CubeIDE项目中,可以在文件startup_stm32g071xx.s中的以下行设置断点:
重置句柄:ldr r0,=_estack mov sp,r0/*设置堆栈指针*/然后调试目标的启动。
结论
本文为您提供了有关STM32引导过程的信息。它向您概述了:
- 可能的不同引导模式
- 有关嵌入式引导加载程序的信息
- 从内部闪存机制启动STM32的基本信息