STM32八股【1】-----启动流程和startup文件理解

启动流程

知识点

  • MCU 上电复位。
  • MSP从向量表第0个地址 读取一个32位(2字节)的值并保存,该值为栈顶地址
  • PC计数器从第1个地址 读取一个两字节的值并保存,该值为程序入口 ,一般是Reset_Handler
  • 想了解FLASH地址映射可以看STM32八股【4】-----AHB地址映射
asm 复制代码
__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
  • 执行Reset_Handler,初始化中断向量表。
    Reset_Handler为[WEAK],可以自定义修改。
asm 复制代码
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

在Reset_Handler中执行:

  1. SystemInit():
    初始化系统时钟、PLL、外设时钟、Flash 延时等。
  2. C 运行时环境初始化:
    • 调用__main
    • 初始化 .data 段、具体来讲就是把FLASH已初始化的数据拷贝到RAM对应的.data段区域。
    • RAM .bss段未初始化的全部清零
    • 不熟悉FLASH和RAM构成的可以看STM32八股【3】------RAM和片上FLASH
  3. 进入 main():
    完成上述初始化后,调用 main() 进入用户程序。
  4. 程序运行,
    如果发生中断,CPU 根据矢量表跳转到对应中断服务函数 (xxx_IRQHandler) 处理。

问题

  • 请解释STM32微控制器的启动过程,从上电到用户主程序的执行,包括主堆栈指针(MSP)和程序计数器(PC)的初始化。

  • 在STM32的启动文件中,向量表的作用是什么?它通常位于存储器的哪个区域,为什么?

  • 启动文件中定义了堆栈和堆的大小。请解释它们在嵌入式系统中的作用,以及如何根据应用需求确定它们的大小。

  • 在启动文件中,Reset_Handler的作用是什么?它通常执行哪些关键任务来准备系统运行?

欢迎指错、交流和补充。

相关推荐
猫猫的小茶馆6 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆6 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
小李做物联网8 小时前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网
@good_good_study9 小时前
STM32 ADC多通道采样实验
stm32·单片机·嵌入式硬件
Darken0310 小时前
什么是“位带”?;在STM32单片机中有什么作用?
stm32·单片机·嵌入式硬件
Triumph++11 小时前
STM32工程(Kile5)生成Bin文件
stm32·嵌入式硬件
强化学习与机器人控制仿真14 小时前
Holosoma 开源人形机器人强化学习训练部署框架
人工智能·stm32·神经网络·机器人·强化学习·具身智能·人形机器人
d111111111d14 小时前
在stm32F103C8T6中,Thumb指令是什么?有什么作用?可以干什么?
笔记·stm32·单片机·嵌入式硬件·学习
DIY机器人工房14 小时前
简单理解:ESP32S3 开发板中通过什么控制舵机
stm32·单片机·嵌入式硬件·mcp·小智ai·diy机器人工房
victorwjw14 小时前
STM32 ISP下载原理
stm32·嵌入式硬件