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函数介绍

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等。

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

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 09:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 09:30:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 09:30:03       82 阅读
  4. Python语言-面向对象

    2023-12-18 09:30:03       91 阅读

热门阅读

  1. ES6之对象新增的方法

    2023-12-18 09:30:03       57 阅读
  2. IDEA中如何使用Vue

    2023-12-18 09:30:03       57 阅读
  3. 全志V3s之NFS连接ubuntu22.04

    2023-12-18 09:30:03       60 阅读
  4. conda channel的镜像设置

    2023-12-18 09:30:03       48 阅读
  5. 力扣面试150题 | 15.三数之和

    2023-12-18 09:30:03       56 阅读
  6. Spring-整合MyBatis

    2023-12-18 09:30:03       55 阅读
  7. Cmake基础(6)

    2023-12-18 09:30:03       52 阅读
  8. Kubernetes 容器编排(3)

    2023-12-18 09:30:03       42 阅读
  9. python 读取execl 日期是数字或者字符串的处理

    2023-12-18 09:30:03       65 阅读
  10. 【机器学习】数据降维

    2023-12-18 09:30:03       69 阅读
  11. 机器学习scikit-learn实现

    2023-12-18 09:30:03       53 阅读