浅析stm32启动文件

浅析stm32启动文件

文章目录

  • 浅析stm32启动文件
    • 1.什么是启动文件?
    • 2.启动文件的命名规则
    • 3.stm32芯片的命名规则

1.什么是启动文件?

我们来看gpt给出的答案:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378109.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索数据结构与算法的奇妙世界 —— Github开源项目推荐《Hello 算法》

在浩瀚的编程与计算机科学领域中,数据结构与算法无疑是每位开发者攀登技术高峰的必经之路。然而,对于初学者而言,这条路往往布满了荆棘与挑战。幸运的是,今天我要向大家推荐一个令人振奋的项目——《Hello Algo》,它正…

在 Vue3 + Electron 中使用预加载脚本(preload)

文章目录 一、什么是预加载脚本(preload),为什么我们需要它二、通过预加载脚本暴露相关 API 至渲染进程1、实现获取系统默认桌面路径功能2、向剪切板写入内容3、使用系统默认浏览器访问目标 url4、使用文件选择对话框 三、参考资料 一、什么是预加载脚本(preload)&a…

负载测试和功率分析中负载箱的重要作用

在负载测试和功率分析中,负载箱扮演着至关重要的角色。以下是负载箱在这两个方面的重要作用: 一、负载测试中的重要作用 模拟实际负载条件: 负载箱能够模拟各种复杂的负载条件,包括电阻性负载、电感性负载、电容性负载等&#x…

【HarmonyOS开发】弹窗交互(promptAction )

实现效果 点击按钮实现不同方式的弹窗showToast showDialog showActionMenu 代码实现 1.引入’ohos.promptAction’ import promptAction from ohos.promptAction;2.通过promptAction 实现系统既定的弹窗 import promptAction from ohos.promptAction;Entry Component st…

Spring-Spring、IoC、DI、注解开发

1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点: Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合,实现各个层之间的解耦,让我们更专注于业务…

数据库内核研发学习之路(三)创建postgres内置函数

本章之前已经讲明白了我们的postgres如何进行编译安装,这是很重要的一步,接下来就是学会对postgres进行小的改动,然后保证依然能够顺利编译安装运行! 本章续讲内容如何创建一个内置函数。 1、内置函数和用户自定义函数的区别 熟…

如何在所有docker命令前加上一个sudo

如果当前登录用户不是root不用,使用docker命令的时候,需要在前面加上一个sudo 提升权限。 但是每次都加,就感觉特别的麻烦,如何简化呢? 解决办法 打开你的shell配置文件(例如,如果你使用bash&am…

多媒体软件开发选择Animate软件还是Unity3D软件?

以下内容可能有一些片面,因为多媒体软件开发平台有很多,因为接触Animate和Unity3D比较多,所以这里仅对这两款进行分析! Animate软件与Unity3D软件都是经常在多媒体展馆中用来制作互动展示内容的,对于这两种开发平台&a…

Java爬虫安全策略:防止TikTok音频抓取过程中的请求被拦截

摘要 在当今互联网时代,数据采集已成为获取信息的重要手段。然而,随着反爬虫技术的不断进步,爬虫开发者面临着越来越多的挑战。本文将探讨Java爬虫在抓取TikTok音频时的安全策略,包括如何防止请求被拦截,以及如何提高…

园区道路车辆智能管控视频解决方案,打造安全畅通的园区交通环境

一、背景需求分析 随着企业园区的快速发展和扩张,道路车辆管理成为了保障园区秩序、提升运营效率及确保员工安全的重要任务。针对这一需求,旭帆科技TSINGSEE青犀提出了一种企业园区道路车辆管控的解决方案,通过整合视频监控、智能识别等技术…

LVS+Nginx高可用集群---搭建高可用集群负载均衡

1.LVS简介 Lvs(Linux Virtual Server):使用集群,对于整个用户来说是透明,用户访问的时候是单个高性能的整体。道理与nginx类似 LVS网络拓扑图:是基于四层。 用户通过浏览器发送请求,然后到达LVS.Lvs根据相应算法将…

【TensorRT】Yolov5-DeepSORT 目标跟踪

Yolov5-DeepSORT-TensorRT 本项目是 Yolo-DeepSORT 的 C 实现,使用 TensorRT 进行推理 🚀🚀🚀 开源地址:Yolov5_DeepSORT_TensorRT,求 star⭐ ~ 引言 ⚡ 推理速度可达25-30FPS,可以落地部署&…

南京邮电大学统计学课程实验2 用EXCEL进行参数估计假设检验 指导

一、实验描述 实验目的 1、学会用Excel进行参数估计; 2、学会用Excel进行z检验-双样本平均差检验; 实验环境 实验中使用以下软件和硬件设备 (1)Windows XP操作系统; (2)PC机、EXCEL软件&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 卢小姐的生日礼物(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测…

【Vue3】4个比较重要的设计模式!!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 在我投身于前端开发的职业生涯期间,曾有一次承接了一个大型项目的维护工作。此项目运用的是 Vue 框架,然而其代码结构紊乱不堪,可维护性极度糟糕😫。 这使我深刻领会到,理解并运用 Vue 中的重要设计模式是何等关键! …

一个引发openssl崩溃问题案例

1 背景 最近用libevent写了一个https代理功能,在调研的时候,遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…

vue3表格使用拖拽排序

拖拽排序 实现效果实现步骤拖拽排序功能的完整代码 实现效果 实现步骤 先安装sortable.js库使用的vue文件中引入 import Sortablejs from ‘sortablejs’在进入页面后创建sortable实例在提交后端时可获取到排序后的最新table列表数据 sortable.js文档 拖拽排序功能的完整代码 …

mars3d实现GraphicLayer获取当前相机视角内的可视点位(矢量数据

效果: mars3d实现GraphicLayer获取当前相机视角内的可视点位(矢量数据 相关依赖api: 1. map.getExtent(); 提取地球当前视域边界,示例:{ xmin: 70, xmax: 140, ymin: 0, ymax: 55, height: 0, } 2.graphicLayer.eachGraphic遍…

小程序-2(WXML数据模板+WXSS模板样式+网络数据请求)

目录 1.WXML数据模板 数据绑定 事件绑定 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理事件中为data中的数据赋值 事件传参与数据同步 事件传参 bindinput的语法绑定事件 文本框和data的数据同步 条件渲染 w…

云计算数据中心(二)

目录 三、绿色节能技术(一)配电系统节能技术(二)空调系统节能技术(三)集装箱数据中心节能技术(四)数据中心节能策略和算法研究(五)新能源的应用(六…