STM32启动文件

如何获取STM32启动文件

接触过STM32单片机的都知道,使用STM32开发肯定是需要添加启动文件的,讲解STM32的教材或教材或多或少都会在建立工程文件的入门部分内容中讲解一些关于启动文件相关的知识,而不会像51单片机教材那样几乎啥都不会说明。部分原因就是STM32单片机内核比51复杂很多,开发过程中我们很有可能需要对启动文件或其他一些内核依赖文件做一些处理。并且如果是用keil建立工程时软件不会像建立51工程那样问你要不要添加启动文件进去了,需要自己根据所以用的芯片型号手动选择文件添加。

在建立工程时教程里面都会告你需要在哪些文件夹中去复制哪些文件到工程文件夹,其中就会提及启动文件。一般情况下如果我们使用ST官方标准库做开发的话标准库文件中都会带有启动文件。

图片

标准库启动文件

在标准库对应目录下就可以有该库一系列芯片型号的启动文件。51单片机启动文件一样里面都是汇编程序,当然在上级目录我们也会看到官方还提供了其他一下主流开发工具对应的启动文件。

图片

其他平台启动文件

keil因为已经被ARM收购,所以其启动文件会存放arm文件夹下,其他平台的可以自行查看。如果你使用的标准库比较古老,那可能该目录下没有arm文件夹,而对应的应该为mdk文件夹,因为之前arm还没收购keil。使用时最好找到自己芯片型号对应的文件进行复制,如何确定自己使用的芯片与哪个文件匹配,可以参考官方选项手册,可以查看芯片参考手册中对应数据手册。

图片

STM32F1系列对应数据手册

同一系列的芯片分类是依据芯片flash存储空间容量来确定的,所以可以直接从芯片名称确定自己使用哪个文件。

图片

关于使用库开发

既然提到了库开发就顺便介绍一下相关知识。如果你想用标准库进行开发,手头上没有标准库或没有最新版本的标准库,可以在st官网进行下载,F1系列芯片的最新版本为3.6,如果不是大版本号(比如2.x与3.x)不同库代码内容差异不会太大,所以你使用3.x都没可以。

图片

STM32官网标准库资料

另外要注意的是尽量使用一个固定版本的库,这样更方便自己后续的项目移植,初学者当然是建议使用最新版本,进行开发,不过现在标准库都非常稳定了,官方也不会进行太多的更新,自从STM32Cube发布之后官方对标准库的维护更少了,所以官方是推荐使用新的HAL库的,这几年官方对部分新产型号芯片都不再推出标准库了,所以如果使用新款芯片找不到标准库文件就直接使用HAL库吧,习惯了都一样。使用STM32Cube建立工程还是非常方便的,可视化流程,一套设置之后就可以生成完整的工程项目,平时习惯使用哪个开发平台就生成哪个平台的工程,连复制粘贴过程都省了(包括库文件和启动文件以及其他依赖文件),何乐而不为呢?

图片

HAL库工程文件下的启动文件

最后你只需直接打开工程再添加自己的项目代码即可进行开发。

图片

HAL库项目树视图

当然官方提供的库都是只是一种工具而已,自己喜欢哪种风格就用哪种库,完全没必要在这个问题上纠结。如果你不想使用库开发也可以直接编写寄存器函数,当然自己编写寄存器函数也不要忘了添加一种现成的启动文件,以及相关依赖文件。在一般的开发过程中,我们不会频繁的新建工程,通常都是直接复制现有工程,然后再对工程文件进行一定的修改即可投入到下一个项目中使用。初学者在学习的时候可多操作几遍新建工程的完整过程以加强理解,熟悉之后也大可不必没吃都要新建一个工程来浪费时间了。

启动文件分析

其实STM32的启动文件中的代码进行的操作和51单片机的启动文件基本内容差不多,只是因为STM32功能更多了所以内容会更多,另外,二者指令集不一样,所以表面上看起来没有任何相同的语句,但真实用途都是为了引导芯片执行进入到用户代码区域。

芯片型号众多,文件内容就不贴出了,这里F1系列中的一款为例做介绍,其他型号大同小异。

当然在这之前大家需要对以下知识点有一定的了解,几乎都是和内核以及指令集相关的知识,所以在学习STM32的过程中还要多看看与内核相关的书籍比如《Cortex-M3权威指南》,学其他芯片一是一样,至于你使用的芯片是什么内核,就参考该内核的资料。51内核只是比较简单所以教材里都不会单独列一本书进行讲解,但涉及到复杂的芯片时光内核都可以写几本书了。

1. 栈(Stack):
- 栈是MCU中的一块内存空间,用栈指针管理,具有LIFO(后进先出)的特点。
- 主要用于存储函数调用时的返回地址、参数、局部变量等信息。
- 在启动代码中我们定义Stack_Mem作为栈空间,__initial_sp作为栈指针初值。

2. 堆(Heap):
- 堆也是MCU内存空间,我们通过malloc/free在程序运行时动态分配和释放。
- 在启动代码中,我们定义了Heap_Mem作为堆空间,__heap_base和__heap_limit表示开始和结束。

3. 中断向量表(__Vectors):
- 这是一块非常重要的数据结构,存放各种中断和异常的处理函数入口。
- 首个入口是复位后需要执行的Reset_Handler函数。
- 向量表让CPU可以快速响应各种异步事件。

4. 复位处理(Reset_Handler):
- 上电或重置后首先执行的函数,完成基本的初始化工作。
- 它会调用SystemInit做底层初始化,然后跳转到C语言main函数。

5. 相关寄存器和汇编指令:
- 启动代码中大量用到寄存器和汇编指令,这需要时间逐步学习。
- 可以先理解代码主要逻辑,不必刨根问底汇编细节。

现在再分析一下这个启动代码主要完成的操作:

1. 设置代码段为启动代码,使用Thumb指令集

2. 定义栈段STACK,分配1024字节栈空间,并定义栈指针初值符号__initial_sp

3. 定义堆段HEAP,分配512字节堆空间,并定义堆开始和结束符号__heap_base和__heap_limit

4. 定义中断向量表__Vectors,里面包含栈指针初值设置,复位处理函数Reset_Handler入口等

5. 复位处理函数Reset_Handler:
  - 调用SystemInit系统初始化函数
  - 跳转执行C库入口__main

6. 定义各个外设中断处理函数入口,初始化为空操作

7. __user_initial_stackheap函数:
  - 初始化栈指针为栈底地址
  - 初始化堆起始和结束地址

再总结一下启动代码主要工作内容:

第一部分是定义栈空间Stack_Mem,大小是1024字节,后面又定义了堆空间Heap_Mem,大小是512字节。栈和堆都是MCU中的重要内存区域,我们的C程序都需要依赖它们正常运行。

第二部分是中断向量表__Vectors,这是核心的数据结构,它定义了各种异常发生时,CPU需要跳转执行的函数入口。比如第一个入口就是复位后需要执行的Reset_Handler函数。

第三部分首先是Reset_Handler复位处理函数,它会依次调用SystemInit做系统初始化,然后跳转到C语言入口__main。

后面还定义了空的中断处理函数,这些我们之后会逐步补充代码实现各种中断服务。

最后一部分是__user_initial_stackheap函数,它会正式设置栈指针和堆空间的地址,完成内存区域的初始化。

简单概括整个过程既为:
  - 设置代码段和指令集
  - 配置栈和堆空间
  - 定义向量表和中断函数
  - 系统初始化和跳转到C库入口
  - 栈和堆地址初始化
  - 程序结束循环

通过这些代码操作完成了STM32处理器启动前的基本设置,之后CPU会跳入C语言main函数中执行我们的代码,这些特定内核的启
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: STM32F407ZGT6是意法半导体公司推出的一款32位单片机芯片。标准库文件是为了方便开发者在该芯片上进行软件开发、编译和烧录而提供的一系列库文件STM32F407ZGT6标准库文件包含了一些常用的函数和驱动程序,开发者可以直接调用这些函数来实现各种功能。例如,库文件中提供了GPIO库函数,可以用来初始化和控制芯片上的GPIO引脚;提供了UART库函数,可以用来实现串口通信;提供了ADC库函数,可以用来进行模数转换等。 使用标准库文件,开发者可以更加方便地进行编程,减少了对底层硬件的理解和控制的工作量,提高了开发效率。开发者只需要了解库函数的接口和功能,就可以快速地实现自己的应用,节省了大量的时间和精力。 此外,标准库文件还可以帮助开发者进行调试和测试。标准库文件中提供了一些常用的调试函数,可以输出调试信息、检测程序运行状态等。这对于排查和解决问题非常有帮助。 总之,STM32F407ZGT6标准库文件是开发者在该芯片上进行软件开发的重要工具,它提供了一系列库函数和驱动程序,方便开发者实现各种功能。 使用标准库文件可以提高开发效率,减少开发工作量,并方便调试和测试。 ### 回答2: STM32F407ZGT6是STMicroelectronics推出的一款高性能微控制器,它基于ARM Cortex-M4内核,并且内置了丰富的外设和接口,适用于广泛的应用领域。 对于STM32F407ZGT6微控制器,STMicroelectronics提供了相应的标准库文件。这些标准库文件是由STMicroelectronics提供的软件开发工具包(Software Development Kit,SDK)中的一部分,旨在为开发人员提供简化和加速嵌入式软件开发的工具和函数。 标准库文件提供了丰富的函数和宏定义,以帮助开发人员轻松地配置和使用STM32F407ZGT6微控制器的外设和接口。这些函数包括时钟配置、GPIO配置、中断管理、定时器配置、串口通信、SPI通信、I2C通信等等。通过调用这些函数,开发人员可以更方便地编写应用程序,并实现所需的功能。 此外,标准库文件还包含了一些有用的示例程序,开发人员可以参考这些示例程序来学习如何使用标准库函数,加快应用程序的开发速度。 虽然标准库文件提供了很多便利的功能和接口,但在实际的嵌入式软件开发过程中,开发人员也可以选择其他的开发工具和库文件进行开发。例如,使用CMSIS(Cortex Microcontroller Software Interface Standard)提供的函数和宏定义,开发人员也可以实现相同的功能。不同的选择可能会根据具体的开发需求和偏好而有所不同。 总之,STM32F407ZGT6标准库文件提供了丰富的函数和宏定义,帮助开发人员更方便地配置和使用STM32F407ZGT6微控制器的外设和接口,加快嵌入式软件开发的速度。开发人员可以根据自己的需求和喜好来选择使用标准库文件或其他的开发工具。 ### 回答3: STM32F407ZGT6是一款32位ARM Cortex-M4微控制器,它是意法半导体(STMicroelectronics)公司推出的一款高性能单片机。标准库文件是用于支持该微控制器的软件库,提供了丰富的函数和宏定义,方便开发人员进行低层次的编程工作。 标准库文件包括不同的头文件和源文件,其中有系统初始化的文件、时钟配置文件、中断处理文件、GPIO(通用输入输出)文件、定时器文件等。这些文件提供了丰富的函数,可以直接调用进行各种操作,简化了开发人员的工作流程。 使用标准库文件,开发人员可以更方便地访问和控制STM32F407ZGT6的硬件资源。通过包括适当的头文件,并使用提供的库函数,可以轻松地配置和控制复杂的外设,如ADC(模数转换器)、UART(通用异步收发传输)、SPI(串行外设接口)等。此外,标准库文件还提供了方便的API(应用程序接口),用于处理中断和时钟配置,以及编写清晰和可维护的代码。 使用标准库文件还可以提高代码的可移植性。由于标准库文件是由意法半导体公司提供和维护的,因此可以在不同的编译器和开发环境中使用,并在不同的STM32F407ZGT6项目中共享和重用。 总之,STM32F407ZGT6的标准库文件是用于支持该微控制器的软件库,提供了丰富的函数和宏定义,方便开发人员进行低层次的编程工作。使用标准库文件可以更方便地访问和控制硬件资源,提高代码的可移植性,简化开发流程,使开发人员能够更高效地进行项目开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值