STM32——启动过程浅析

总:STM32——学习总纲

参考文件:

STM32 MAP文件浅析-V1.1

STM32 启动文件浅析_V1.2

Cortex-M3权威指南(中文)、ARM Cotrex-M3权威指南(英文).zip

一、Map文件解析

1.1 MDK编译过程文件

在编译中,会生成11种编译过程文件,可以设置输出到一个文件夹,如output文件夹。

1.2 Map文件概念与作用

作用:

1.3 Map文件组成*

1.4 Map分析 Flash/RAM 大小

1.4.1 MDK output文件夹输出配置

1.4.2 输出map文件查看方式:

a.

b.

1.4.3 分析map文件结构

1.4.3.1 函数的调用关系(Section Cross References)

i.main, i表示符号的入口

1.4.3.2 删除的冗余程序段(Removing Unused input sections from the image.)

1.4.3.3 映像符号表(Image Symbol Table)

包含局部符号,全局符号。

i.delay_us,表是函数入口地址

函数一般不带static都是全局符号

1.4.3.4 映像内存分布(Memory Map of the image)

1.4.3.5 映像组件大小(Image component sizes)

1.4.3.5.1 SRAM/FLASH 大小计算:

FLASH = Code + RO+RW

SRAM = RW + ZI

库的文件不开源(Library),无法优化;一般优化用户代码(Object)

1.4.3.6 map文件 SRAM/FLASH 总结

1.4.3.7 启动文件堆、栈分配(startup_stm32f103xe.s)

二、STM32启动过程

2.1 STM32 启动模式(F1/F4/F7/H7)/自举模式

2.1.1 前置

堆栈指针MSP指向栈顶地址(0x0000 0000 的值)

程序计数器指针PC指向复位向量(0x0000 0004 的值) →    Reset_Hdlr(中断向量表复位向量)

启动模式的设置,也就是指定MSP和PC的定位。 

2.1.2 启动模式(F1)

也就是更改启动模式,复位下载重启

2.1.3 启动模式(F4)

2.1.4 启动模式(F7)

2.1.5 启动模式(H7)

2.2 STM32 启动过程

2.2.1 启动文件 startup_stm32xxx.s

2.2.2 Reset_Handler函数

2.2.3 堆栈简介

---》(1.4.3.7 启动文件堆、栈分配(startup_stm32f103xe.s))

2.2.4 __Vectors 中断向量表

存放的是函数首地址,函数指针。

2.2.4 启动过程图解

2.2.4.1 map文件查询地址

具体启动的实际地址可查询map文件

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

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

相关文章

区块链简介

一、区块链简介 狭义上的定义: 区块链是一种链式数据结构,通过按时间顺序将数据块逐一连接形成。这种结构通过密码学确保了数据的不可篡改性和不可伪造性,形成了一种分布式账本技术。 广义上的定义: 区块链技术不仅仅是一种数据…

NestJS中@Injectable装饰器

一、基础定义与核心作用 1.1 什么是Injectable? Injectable() 是 NestJS 依赖注入(Dependency Injection, DI)系统的核心装饰器,用于将类标记为可注入的提供者(Provider)。它告知 NestJS 的 IoC&#xff08…

【机器学习深度学习】大模型应用落地:微调与RAG的角色与实践

目录 前言 一、微调与RAG:大模型应用落地的两大支柱 1. 微调(Fine-tuning) 2. RAG(Retrieval-Augmented Generation) 二、微调可以做什么? 1. 模型自我认知调整 2. 对话风格优化 3. 提升问题理解能…

List、ArrayList 与顺序表

目录 一、List 介绍 二、线性表 三、自己实现 ArrayList 3.1 显示元素 3.2 增 3.2.1 默认在数组后面新增元素 3.2.2 在指定位置中新增元素 3.3 查 3.4 取值 3.5 改 3.5.1 把 pos 位置的元素修改成 value 3.5.2 删除某个元素 3.5.3 清空 四、认识 ArrayList 4.0 说…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)工业相机使用YoloV8模型实现各类垃圾的分类检测识别工业相机通过YoloV8模型实现各类垃圾的分类检测识别的技术背景在相机SDK中获取图像转换图像的代码分…

EasyExcel高效工具类:简化Excel导入导出,支持多Sheet与枚举转换

文章目录前言一、依赖坐标二、工具类:ExcelUtil三、测试1.实体类2.前置操作3.单Sheet导出4.单Sheet导入5.多Sheet导出6.多Sheet导入7.完整代码四、扩展:自定义注解实现枚举类型转换1.枚举接口2.枚举类3.注解4.转换类5.使用示例6.测试总结前言 在现代应用…

技术速递|GitHub Copilot for Eclipse 迈出重要一步

我们非常高兴地宣布:2025 年 7 月 22 日,GitHub Copilot for Eclipse 又迈出了重要一步,Eclipse 变得更智能、更快捷,而且与 Eclipse 的集成也更无缝了!这是继新功能上线以来,又一次质的提升。 &#x1f…

Coze Loop:开源智能体自动化流程编排平台原理与实践

项目简介 Coze Loop 是 Coze 团队开源的智能体自动化流程编排平台。它以“Loop”为核心概念,支持开发者通过低代码/可视化方式,将多种 AI Agent、插件、API、数据流等灵活编排为自动化工作流,实现复杂的智能体协作、任务自动化和多模态数据处理。Coze Loop 适用于企业自动化…

[GESP202309 四级] 2023年9月GESP C++四级上机题题解,附带讲解视频!

本文为2023年9月GESP C四级的上机题目的详细题解!觉得写的不错或者有帮助可以点个赞啦。 目录 题目一讲解视频: 题目二讲解视频: 题目一:进制转换 解题思路: 代码(C): 题目二:变长编码 解题思路: 代码(C): 题目一讲解视频: 2023年9月GESP C四级上机题一题目…

【AI编程工具IDE/CLI/插件专栏】-国外IDE与Cursor能力对比

AI编程专栏(二) - Cursor 深度使用指南 Cursor 深度使用指南(二) - 新能力使用教程 从Trae 2.0与CodeBuddy IDE发布,谈大厂布局IDE 如何选择AI IDE?对比Cursor分析功能差异 AI编程工具IDE/CLI/插件专栏-热门AI编程CLI初识与IDE对 前面文章介绍过了国…

word2vector细致分解(CBOW, SKIP_GRAM, 层次soft Max, 负采样)

1 前世今生:NGRAM NGRAM:将词当成一个离散的单元(因此存在一定的局限性,没有考虑到词与词之间的关系) neural network language model:只能处理定长序列,训练慢。使用RNN之后有所改善 2 两种训…

Elasticsearch向量库

在Elasticsearch(ES)最新版本(目前8.x系列)中,无需额外的“embedding插件”,因为ES从7.14版本开始就原生支持向量数据类型(dense_vector) 和向量搜索能力,可直接作为向量…

嵌入式学习的第四十四天-ARM

一、ARM内核基础知识1.ALU算术逻辑单元;完成运算的电路2.通用寄存器:R0~R15R13(SP):栈指针寄存器:指向栈的指针(指向正确的位置),为了保护现场 R14(LR…

QML开发:QML中的基本元素

文章目录一、概述二、常用基本元素2.1 基础视觉元素(常用于布局和显示)2.1.1 元素 Item 的介绍和使用2.1.2 元素 Rectangle 的介绍和使用2.1.3 元素 Image 的介绍和使用2.1.4 元素 Text 的介绍和使用2.2 交互元素(用于接收用户操作&#xff0…

Spring AI 项目实战(二十二):Spring Boot + AI +DeepSeek实现智能合同数据问答助手​(附完整源码)

系列文章 序号 文章名称 1 Spring AI 项目实战(一):Spring AI 核心模块入门 2 Spring AI 项目实战(二):Spring Boot + AI + DeepSeek 深度实战(附完整源码) 3 Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码) 4

从 0 到 1 创建 InfluxDB 3 表:标签、字段、命名规范一篇讲透

前言 在使用 InfluxDB 3 存储时序数据时,表的设计堪比盖房子打地基,地基打歪,数据“塌方”指日可待。InfluxDB 虽然不是传统意义上的关系型数据库,但它有自己的一套“审美”:标签(Tags)和字段(Fields)是它的双核心,谁先谁后,关系重大,顺序写错,查询性能立马打折。…

[sqlserver] 分析SQL Server中执行效率较低的SQL语句

查询性能分析较低的SQL语句 -- 查询性能分析 SELECT TOP 50qs.creation_time AS [编译时间],qs.last_execution_time AS [最后执行时间],qs.execution_count AS [执行次数],qs.total_worker_time/1000 AS [CPU总时间(ms)],qs.total_elapsed_time/1000 AS [总耗时(ms)],(qs.tota…

SmartX 用户建云实践|宝信软件:搭建“双架构”私有云平台,灵活满足多种业务需求

上海宝信软件股份有限公司(以下简称宝信软件)系中国宝武实际控制、宝钢股份控股的上市软件企业,是中国领先的工业软件行业应用解决方案和服务提供商,为宝武集团提供整体 IT 基础架构解决方案与服务。为统一管理宝武集团旗下分散在…

应用科普 | 漫谈6G通信的未来

【摘要前言】2019年推出的5G无线通信将移动设备的性能提升到了一个新的水平。首批应用利用5G提供移动宽带,使消费者能够以远超以往的速度进行流媒体传输、游戏和连接。随着技术的成熟,它已成为物联网的关键组成部分,将机器汇集到一个全球网络…

从零开始用 Eclipse 写第一个 Java 程序:HelloWorld 全流程 + 避坑指南

对于 Java 初学者来说,第一次用 Eclipse 写程序往往会手足无措 —— 找不到新建项目的入口、不知道包和类该怎么命名、运行时控制台突然消失…… 别慌!本文以最经典的 “HelloWorld” 为例,手把手带你走完从 Eclipse 项目创建到程序运行的完整…