STM32复位启动的过程

首先要了解,stm32的存储映射解构,解构如图:(该图来自官方手册)

在存储空间的开头是Alias区域,该部分就是用于存储的重映射。

重映射的选择是由Boot引脚来抉择的。

在程序复位启动时,程序一定先从0x00000000开始执行。这时alias区又映射其他的区域(例如flash)。这时候alias区就好像一个窗口,而被映射的存储区就是透过窗口看到的风景。

于是mcu指针先看到的是映射的0x08000000的flash区的中断向量表。即是

1.初始化msp指针。

2.执行reset_hanlder函数

在s启示文件中,我们能看到

复制代码
; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

这些语句定义了Reset中断函数的运行逻辑,可以看到。他首先执行了SystemInit函数,后续再执行了__main函数。

而当执行的函数所在的代码地址均在flash上,就好像alias区只是个引入人,当指针运行到相应区域后,这个引入人便失去了作用。

相关推荐
LCG米7 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga10 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡14 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
Zw-awa15 小时前
从 CH340 到 HC-05 和 HC-06:让小车脱离电脑
stm32
硅基手札16 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
何粥学18 小时前
Vivado 2024.2 开发记录(AC820 Zynq-7020)——软件使用,点亮led灯
单片机·嵌入式硬件·zynq
Sakura_j_h_18 小时前
51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
单片机·嵌入式硬件·51单片机·嵌入式·数码管·动态扫描·限流电阻
HANDY0920020 小时前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
飞凌嵌入式1 天前
千次静电放电试炼,守住飞凌嵌入式硬件可靠底线
嵌入式硬件
蹊黎1 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机