stm32f407启动文件
Ronnie 12/12/2021
stm32f407xx启动文件:startup_stm32f407xx.S,文件位于libraries\STM32F4xx_HAL\CMSIS\Device\ST\STM32F4xx\Source\Templates\gcc\startup_stm32f407xx.s
本文主要参考两篇博客,感谢🤞
# 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