浅析stm32启动文件

浅析stm32启动文件

文章目录

1.什么是启动文件?

我们来看gpt给出的答案:

STM32的启动文件是一个关键的汇编语言源文件,它负责在微控制器上电或复位后执行最初的硬件配置和环境设置,为执行C语言的main函数做好准备。这个文件通常命名为startup_stm32xxxx.s,其中xxxx代表特定的STM32系列和型号,例如startup_stm32f429_439xx.s或startup_stm32f10x_md.s。

启动文件的主要功能包括但不限于:

  1. 初始化栈指针 (Stack Pointer,SP):设置栈区的起始地址,确保函数调用和中断处理时有地方存放局部变量和保存CPU状态。

  2. 初始化程序计数器寄存器 (Program Counter,PC):设置程序开始执行的地址,通常是复位向量地址。

  3. 配置中断向量表:定义中断服务程序的入口地址,确保在发生中断时能正确跳转到对应的处理函数。

  4. 系统时钟配置 :某些启动文件或与其配合的C代码(system_stm32f10x.c)会进行基本的时钟设置,以确保CPU和外设能够按预期频率工作。

  5. C库初始化 :调用_init()函数来初始化C库,包括全局变量的初始化和静态构造函数的调用。

  6. 堆(heap)和栈(stack)的配置:尽管启动文件中可能包含对堆的基地址和大小的定义,但实际是否使用堆以及其大小,取决于应用代码中的动态内存分配需求。如果应用未使用堆,那么即使启动文件中有定义,编译后的映射文件(map file)中也不会显示堆的信息。

启动文件中关于栈和堆的大小配置(如Stack_Size和Heap_Size)可以根据具体应用的需求进行调整。如果程序中使用了大量的递归调用或者大的局部变量,可能需要增大栈的大小;如果程序中频繁进行动态内存分配,则可能需要更大的堆空间。

此外,中断矢量表的起始地址初始化通常在启动文件的复位处理程序中完成,通过设置系统控制块(System Control Block, SCB)的相应寄存器来指向中断向量表的起始位置。

什么意思呢?其实就是启动文件是系统上电后编译的第一个文件,主要完成了以下几个工作:

  1. 初始化堆栈指针SP=_initial_sp
  2. 初始化PC指针=Reset_Handler
  3. 初始化中断向量表
  4. 配置系统时钟
  5. 调用C库函数_main初始化用户堆栈,从而最终调用main函数去到C的世界

所以对于不同的芯片型号来说,芯片的启动文件也存在差异,然而那如何来选择启动文件呢?这就需要我们来了解启动文件的命名规则。

2.启动文件的命名规则

从上面这个表格就知道启动文件的类型和选择和芯片型号以及内存大小息息相关,而我们我们如何来确定自己芯片的Flash容量呢,就常见的F103系列就有很多的型号,我们如何来选择适合自己芯片的型号呢?这就需要了解芯片的命名规则。

3.stm32芯片的命名规则

通过手册中的解释我们就知道STM32的芯片型号遵循一定的结构,用以标识其系列、类型、性能、引脚数目、存储容量、封装类型等关键特性。而我们选择启动文件想要了解不同芯片的Flash,就需要关注芯片的存储容量标识:

如6(32K字节)、8(64K字节)、B(128K字节)、C(256K字节)、D(384K字节)、E(512K字节)、G(1M字节)等等。

通过对芯片型号的确定和第二部分各个系列对应的启动文件就可以正确选择启动文件。

(1M字节)等等。

通过对芯片型号的确定和第二部分各个系列对应的启动文件就可以正确选择启动文件。

相关推荐
hahaha60161 小时前
色彩恒常性概述
人工智能·嵌入式硬件·数码相机·计算机视觉
我叫洋洋1 小时前
Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库
数据库·单片机·嵌入式硬件·oracle·电路
hahaha60163 小时前
Shades-of-Gray (SoG) 算法--白平衡算法
人工智能·嵌入式硬件·算法·计算机视觉
ebiobiz3 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
小神兵4 小时前
对电压源与电流源的的简单理解
单片机·嵌入式硬件·物联网
comyccccc5 小时前
三极管与MOS管工作原理全解析学习笔记
单片机·嵌入式硬件
FPGA小徐6 小时前
运放电路:负载必须接地时,如何做电流采样(浮地负载 vs 接地负载)
单片机·嵌入式硬件
木白CPP6 小时前
USB(一): USB 概述&&介绍
linux·网络·嵌入式硬件
木白CPP8 小时前
USB(二):USB设备枚举过程
嵌入式硬件
女神下凡8 小时前
芯参谋(37):EEPROM_电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范