浅析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://xiahunao.cn/news/3245536.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

开箱即用的AI!九州未来亓绚AI教培一体机全新发布

以大模型、生成式人工智能为代表的人工智能技术在全球引起广泛关注,亦成为催生教育变革的重要力量。 中小学人工智能教育逐步推进,但实施过程中仍然面对诸多挑战。如何更广泛、高质量地开展中小学人工智能教育,成为当下我国教育改革创新的重…

CentOS7 虚谷数据库 单机版部署

单机版最低配置: 安装环境配置 1.CPU设置 关闭 CPU 超线程 查看当前CPU超线程状态: cat /sys/devices/system/cpu/smt/active 如果是0,表示超线程已关闭;返回值是1,表示超线程已开启。 切换超线程状态: &a…

景区客流统计系统提升服务精准度

在当今旅游业蓬勃发展的时代,景区面临着越来越多的挑战和机遇。如何在保障游客良好体验的同时,实现景区的高效管理和可持续发展,成为了摆在景区管理者面前的重要课题。景区客流统计系统的出现,为解决这一问题提供了有力的支持&…

vscode 打开远程bug vscode Failed to parse remote port from server output

vscode 打开远程bug vscode Failed to parse remote port from server output 原因如图: 解决:

Redis实战—附近商铺、用户签到、UV统计

本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P88 - P95 目录 附近商铺 数据导入 功能实现 用户签到 签到功能 连续签到统计 UV统计 附近商铺 利用Redis中的GEO数据结构实现附近商铺功能,常见命令如下图所示。…

Monsters Pack 04(游戏卡通可爱怪兽怪物战士模型)

以下模型有3种进化形态: 捕手战士 鱼卫战士 骑士战士 小鬼战士 猴东战士 无鼻战士 坑娃战士 刺头战士 树斯特战士 楔形战士 这些模型是为您的主要角色设计的敌人。进化的每个阶段都会使他变得更加强大,因此您可以用它来增强对手的实力,并作为敌人的boss。 它适用于不同类型的…

算法实验3:贪心算法的应用

实验内容 &#xff08;1&#xff09;活动安排问题 设有n个活动的集合E{1, 2, …, n}&#xff0c;其中每个活动都要求使用同一资源&#xff0c;而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi&#xff0c;且si <f…

厂家置换电费如何达到最大化收益

新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 文章目录 一、电能电费二、同时刻不同厂家置换&#xff0c;不会影响最终电能电费结果三、风险防范补偿和回收机制四、我们的数据如何考虑补偿和回收五、如何利用补偿和…

java.lang.IllegalArgumentException: Illegal character in path at index 40解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

RFID涉密载体管控系统|DW-S402功能介绍

文件载体管控系统DW-S402是用于对各种载体进行有效管理的智能柜&#xff08;智能管理系统&#xff09;&#xff0c;实现对载体的智能化、规范化、标准化管理&#xff0c;广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 区域监控管理 主要是通过在需要监控的…

Mysql缓存调优的基本知识(附Demo)

目录 前言1. 配置2. 缓存3. 策略 前言 基本的知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Mysql优化高级篇&#xff08;全&#xff09;Mysql底层原理详细剖析常见面试题&#xff08;全&#xff09; MySQL…

视图库对接系列(GA-T 1400)十九、视图库对接系列(级联)注册

背景 在上一章视图库对接系列(GA-T 1400)十八、视图库对接系列(级联)代码生成中我们已经把代码生成了,那怎么实现级联? 我们可以抓包看设备是怎么注册到我们平台的, 那我们就怎么实现就可以了。 实现 先看设备注册到我们服务端的包 步骤 注册我们可以参考视图库对接系列(…

【贪心算法】贪心算法30题

一、贪心算法简介 证明贪心策略正确性的常用方法&#xff1a;直接证明、交换论证法、反证法、分类讨论… 二、相关编程题 2.1 柠檬水找零 题目链接 860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 题目描述 算法原理 提示&#xff1a;最优解和贪心解唯一可能不同…

学习大数据DAY17 PLSQL基础语法6和Git的基本操作

目录 包 存储过程调试功能 作业 阶段复习作业 Git课程目录 什么是版本控制 没有版本控制的缺点 常见的版本工具 版本控制分类 1. 本地版本控制 2. 集中版本控制 3. 分布式版本控制 Git与SVN主要区别 Git软件安装及配置 Windows系统安装Git 安装Tortoise Git(乌龟…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【获取密钥属性(C/C++)】

获取密钥属性(C/C) HUKS提供了接口供业务获取指定密钥的相关属性。在获取指定密钥属性前&#xff0c;需要确保已在HUKS中生成或导入持久化存储的密钥。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 构造对应参数。 keyAlias&…

生成树(STP)协议

一、生成树的技术背景 1、交换机单线路上链,存在单点故障,上行线路及设备都不具备冗余性,一旦链路或上行设备发生故障,网络将面临断网。 总结:以下网络不够健壮,不具备冗余性。 2、因此引入如下网络拓扑结构: 上述冗余拓扑能够解决单点故障问题,但同时冗拓扑也带来了…

【PB案例学习笔记】-32制作一个简单记事本程序

大家好&#xff0c;我是晓凡。 写在前面 这是PB案例学习笔记系列文章的第32篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码…

【信息系统项目管理师】高项论文通用加分素材

文章目录 输入I工具与技术TT输出O 写一些增加项目真实性的问题&#xff0c;如变更、进度&#xff08;范围蔓延、进度延后怎么处理、好几个项目并行资源协调&#xff09;||成本、沟通&#xff08;跨部门沟通&#xff09; 在保障真实性的同时选的项目紧跟潮流 要能看出实际经验 …

GB35114国密算法-GMSSL

C有个三方库-GMSSL是可以进行GB35114所需要的SM2、SM3、SM4等加解密算法的&#xff0c;但是使用国密算法是需要申请报备的 GmSSL是由北京大学自主开发的国产商用密码开源库&#xff0c;实现了对国密算法、标准和安全通信协议的全面功能覆盖&#xff0c;支持包括移动端在内的主流…

国产精品ORM框架-SqlSugar详解 进阶功能 集成整合 脚手架应用 附源码 云草桑 专题二

国产精品ORM框架-SqlSugar详解 SqlSugar初识 专题一-CSDN博客 sqlsugar 官网-CSDN博客 4、进阶功能 5、集成整合 6、脚手架应用 4、进阶功能 4.1、生命周期 Queryable 什么时候操作库 Queryable是一个引用类型 Queryable拷贝机制 {ISugarQueryable<Student> quer…