总:STM32——学习总纲

参考文件:

STM32 MAP文件浅析-V1.1

STM32 启动文件浅析_V1.2

Cortex-M3权威指南(中文)ARM Cotrex-M3权威指南(英文).zip

一、Map文件解析

1.1 MDK编译过程文件

在编译中,会生成11种编译过程文件,可以设置输出到一个文件夹,如output文件夹。

1.2 Map文件概念与作用

作用:

1.3 Map文件组成*

1.4 Map分析 Flash/RAM 大小

1.4.1 MDK output文件夹输出配置

1.4.2 输出map文件查看方式:

a.

b.

1.4.3 分析map文件结构

1.4.3.1 函数的调用关系(Section Cross References)

i.main, i表示符号的入口

1.4.3.2 删除的冗余程序段(Removing Unused input sections from the image.)

1.4.3.3 映像符号表(Image Symbol Table)

包含局部符号,全局符号。

i.delay_us,表是函数入口地址

函数一般不带static都是全局符号

1.4.3.4 映像内存分布(Memory Map of the image)

1.4.3.5 映像组件大小(Image component sizes)

1.4.3.5.1 SRAM/FLASH 大小计算:

FLASH = Code + RO+RW

SRAM = RW + ZI

库的文件不开源(Library),无法优化;一般优化用户代码(Object)

1.4.3.6 map文件 SRAM/FLASH 总结

1.4.3.7 启动文件堆、栈分配(startup_stm32f103xe.s)

二、STM32启动过程

2.1 STM32 启动模式(F1/F4/F7/H7)/自举模式

2.1.1 前置

堆栈指针MSP指向栈顶地址(0x0000 0000 的值)

程序计数器指针PC指向复位向量(0x0000 0004 的值) →    Reset_Hdlr(中断向量表复位向量)

启动模式的设置,也就是指定MSP和PC的定位。 

---->

MSP = Main Stack Pointer(主堆栈指针),是 ARM Cortex‑M 架构里对 “系统 / 内核 / 中断用的那个栈指针” 的命名。

一、为什么叫 “Main”(主)

Cortex‑M 有两个物理栈指针(都叫 SP/R13):

  • MSPMain Stack Pointer → 主栈(系统默认、特权 / 中断 / 内核用)
  • PSPProcess Stack Pointer → 进程 / 任务栈(用户任务、RTOS 用)

“Main” 强调它是系统默认、最基础、最高权限的栈:

  • 复位后自动用 MSP
  • 所有中断 / 异常强制切到 MSP
  • 内核 / 特权代码必须用 MSP
二、一句话记

MSP = 系统 / 内核 / 中断的 “主栈”;PSP = 用户任务的 “任务栈”

------>

PC 程序计数器一句话总结

PC 就是 CPU 的执行地址指针,CPU 永远执行 PC 指向的那条指令。

  • 顺序执行时:PC 自动 +4,指向下一条

  • 跳转 / 函数 / 中断时:PC 被强行修改,实现跳转

  • 它只负责:下一步该跑哪行代码

----->

和 MSP 对比一下

  • PC:管 “下一步干啥”

  • MSP:管 “数据存在哪”

2.1.2 启动模式(F1)

也就是更改启动模式,复位下载重启

2.1.3 启动模式(F4)

2.1.4 启动模式(F7)

2.1.5 启动模式(H7)

2.2 STM32 启动过程

2.2.1 启动文件 startup_stm32xxx.s

2.2.2 Reset_Handler函数

2.2.3 堆栈简介

---》(1.4.3.7 启动文件堆、栈分配(startup_stm32f103xe.s))

2.2.4 __Vectors 中断向量表

存放的是函数首地址,函数指针。

2.2.4 启动过程图解

2.2.4.1 map文件查询地址

具体启动的实际地址可查询map文件

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐