STM32启动过程

STM32启动模式(自举模式)

M3/3/7等内核,复位后做的第一件事:

  1. 从地址0x0000 0000处取出栈指针MSP的初始值,该值就是栈顶地址。
  2. 从地址0x0000 0004处取出程序计数器指针PC的初始值,该值是复位向量。

芯片厂商会把0x00000000和0x00000004地址映射到其它的地址。

在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。

STM32启动过程(内部FLASH启动)

  1. 初始化MSP:从0x0800 0000获取
  2. 初始化PC:从0x0800 0004获取
  3. 设置堆栈大小:Heap_Size(堆)、Stack_Size(栈)
  4. 初始化中断向量表:__Vectors定义
  5. 调用初始化函数:可选的,如调用:SystemInit函数
  6. 调用__main:标准C库函数,执行一系列设置,最终调用main函数

Reset_Handler函数介绍

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

EXPORT:标明全局属性,可被外部调用。

IMPORT:申明来自外部文件,类extern

PROC:表示子程序

ENDP:表示子程序结束

WAEK:弱定义

堆栈简介

  • 栈:编译器自动分配和释放,存放函数参数、局部变量等。
  • 堆:程序员分配和释放,如malloc、calloc、realloc等。

函数局部变量较多,嵌套关系复杂时,需要加大栈大小!

相关推荐
zjxtxdy9 分钟前
STM32HAL库开发-ADC
stm32·单片机·嵌入式硬件
国科安芯35 分钟前
3 Ω 还是 5.5 Ω:ASL3157S 的供电电压、导通电阻与双路一致性怎么算
网络·嵌入式硬件·安全·模拟开关·抗辐射
传感器与混合集成电路1 小时前
28V输入又带浪涌怎么办?嵌入式计算机一次电源防护设计要点
嵌入式硬件
笨笨饿1 小时前
# 59_CSDN博客自动写流程文章
linux·jvm·stm32·单片机·嵌入式硬件·mcu·51单片机
尼喃1 小时前
双节锂电池充电芯片+保护IC二合一,一块板子搞定充电和放电保护
嵌入式硬件
冲,干,闯2 小时前
硬件器件-晶振篇
嵌入式硬件
wuyk5552 小时前
模块解耦实战:用 C 语言实现面向对象编程的三个层次
stm32·单片机·嵌入式硬件·性能优化·架构
hanhahai2 小时前
初识单片机
单片机·嵌入式硬件
深圳老胡2 小时前
STM32 工程在 VSCode 中用 AI 搭建软件骨架架构:从零到可运行的分层实践
笔记·stm32·单片机·代码规范
武汉万象奥科2 小时前
T153芯片解析:ARM+RISC-V异构架构,集成三路千兆网
arm开发·嵌入式硬件·物联网·arm核心板