🚀 STM32 启动 · 链接脚本
📘 深度解析 · 30 章
01
课程导论
为什么需要了解启动流程?启动流程与链接脚本的关系概述。
02
STM32硬件复位行为
复位向量表、堆栈指针初始化、从Flash启动的硬件机制。
03
启动文件结构解析
中断向量表定义、Reset_Handler、默认中断处理函数。
04
Reset_Handler详解 (上)
从复位向量跳转到C环境的准备工作。
05
Reset_Handler详解 (下)
SystemInit调用、__main与主函数跳转。
06
链接脚本基础
什么是链接脚本?为什么需要它?GNU LD语法入门。
07
链接脚本核心概念
内存区域(MEMORY)、段(SECTIONS)、定位符(.)。
08
段定义与布局
.text、.data、.bss、.rodata段的布局与作用。
09
启动文件与链接脚本协作
如何通过链接脚本控制启动文件的执行流。
10
堆与栈的初始化
堆栈大小定义、堆栈指针最终设置、堆栈溢出检测。
11
.data段初始化
从Flash拷贝到SRAM,LMA与VMA。
12
.bss段清零
为什么需要清零?链接脚本如何标记起始与结束地址。
13
SystemInit函数深度分析
时钟配置、FPU使能、向量表重定位。
14
__main与C运行时环境
标准库初始化、全局变量构造、最终跳转main。
15
中断向量表重定位
VTOR寄存器、运行时修改向量表、Bootloader跳转场景。
16
自定义启动流程
跳过标准库初始化、直接进入main的裸机启动。
17
链接脚本高级技巧
段对齐、填充字节、KEEP关键字、PROVIDE关键字。
18
内存映射与分散加载
STM32不同系列(F1/F4/H7)的内存映射差异。
19
Bootloader启动流程分析
从Bootloader到App的跳转、向量表切换。
20
双Bank启动与固件升级
双Bank模式下的启动流程、链接脚本配置。
21
调试与仿真中的启动问题
调试器如何接管启动?仿真时的PC指针行为。
22
常见启动失败案例分析
堆栈溢出、时钟配置错误、中断向量表错位。
23
IDE生成启动文件与链接脚本对比
Keil / IAR / STM32CubeIDE 对比。
24
链接脚本优化
减少代码体积、优化RAM使用、自定义段放置。
25
MPU与启动流程
内存保护单元在启动阶段的配置与作用。
26
RTOS启动流程
FreeRTOS启动与裸机启动的差异、任务栈初始化。
27
低功耗模式与启动
从Stop/Standby模式唤醒后的启动流程差异。
28
启动时间测量与优化
如何测量从复位到main的时间?优化策略。
29
安全启动 (TrustZone)
STM32L5/U5系列的安全启动流程与链接脚本变化。
30
课程总结与实战
手写一个最小启动文件与链接脚本,点亮LED。
公众号:蓝海资料掘金营,微信deep3321
公众号:蓝海资料掘金营,微信deep3321