stm32f407启动文件

12/12/2021

stm32f407xx启动文件:startup_stm32f407xx.S,文件位于

libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc\startup_stm32f407xx.s

本文主要参考两篇博客,感谢🤞

中容量STM32处理器启动代码的理解 (opens new window)

startup_stm32f407xx.s分析 (opens new window)

# 1. 相关ARM汇编指令

指令名称 指令作用
EQU 给数字常量取一个符号名,相当于C语言中的define
AREA 汇编一个新的代码段或者数据段
SPACE 分配内存空间
PRESERVE8 当前文件堆栈需按照8字节对齐
EXPORT 声明一个具有全局属性的标号,可被外部文件使用
IMPORT 声明一个来自外部文件的标号
DCD 以字为单位分配内存,要求4字节对齐,并要求初始化这些内存
PROC 定义子程序,与ENDP成对使用
ENDP 表示子程序结束
WEAK 弱定义,如果外部文件定义了一个标号,则优先使用外部文件的标号,是ARM伪指令
ALIGN 编译器对指令或数据的存放地址进行对齐,缺省表示4字节对齐,是ARM伪指令
IF,ELSE,ENDIF 汇编条件分支语句,同C语言的类似
LDR 从存储器中加载字到一个寄存器中
B 跳转到一个标号
BL 跳转到由寄存器/标号给出的地址,并保存跳转前的下条指令至LR中
BX 跳转到由寄存器/标号给出的地址,并根据寄存器的LSE确定处理器的状态
BLX 跳转到由寄存器/标号给出的地址,并根据寄存器的LSE确定处理器的状态,同时保存跳转前的下条指令至LR中
END 到达文件的末尾,文件结束

# 2. startup_stm32f407xx.s

# 2.1 文件概要

首先,这个启动文件是针对基于GCC交叉编译工具链编译STM32F407xx系列设备的向量表,它的工作内容包括:

  • 设置初始的SP寄存器值

  • 设置初始的PC寄存器值等于Reset_Handler

  • 在没有特殊的ISR(中断服务程序)地址情况下,设置向量表入口

  • C库文件中由分支到主函数(最后调用了主函数)

    复位后,Cortex-M4处理器处于线程模式,此时处于特权的优先级,并且栈顶设置为主函数main
    
Last Updated: 6/3/2023, 3:51:31 PM