【STM32】基础知识 第九课 STM32启动

news2024/9/20 8:16:17

【STM32】基础知识 第九课 STM32启动

  • MAP 文件
    • MAP 文件浅析
    • MAP 文件组成
    • atk_f103.map 文件
  • 启动模式
    • STM32 启动模式 (F1)
  • STM32 启动过程
    • 启动文件介绍
    • Reset_Handler 函数介绍
    • 堆栈简介

MAP 文件

MAP 文件是 MDK 编译代码后, 产生的集程序, 数据及 IO 空间的一种映射列表文件. 简单来说就是包括了: 各种 .c 文件, 函数, 符号等的地址, 大小, 引用关系等信息.

MAP 作用:

  • 分析各 .c 文件占用的 FLASH 和 RAM 的大小, 方便优化代码

STM32启动

MAP 文件浅析

文件类型简介
.o可重定向对象文件, 每个 .c/.s 文件都对应一下 .o 文件
.axf可执行对象文件, 由 .o 文件链接生成, 仿真的时候需要用到此文件
.hexINTEL Hex 格式文件, 用于下载到 MCU 运行, 由 .axf 转换而来
.map连接器生成的列表文件, 对分析程序存储占用情况非常有用
其他.crf, .d, .dep, .lnp, .lst, .htm, .build_log.html 等一般用不到

MAP 文件组成

组成部分简介
程序段交叉引用关系描述各文件之间函数调用关系
删除映像未使用的程序段描述工程中未用到而被删除的冗余程序段 (函数/数据)
映像符号表描述各符号 (程序段/数据) 在存储器中的地址, 类型, 大小等
映像内存分布图描述各个程序段 (函数) 在存储器中的地址及占用大小
映像组件大小给出整个映像代码 (.o) 占用空间汇总信息

atk_f103.map 文件

截取 (部分):

Image component sizes


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Object Name

       196          0          0          0          2       2374   delay.o
       170          0          0          4          0       1883   main.o
        64         26        304          0       1536        920   startup_stm32f103xe.o
       158          0          0          5          4       6082   stm32f1xx_hal.o
       186          0          0          0          0       8823   stm32f1xx_hal_cortex.o
       282          0          0          0          0       8255   stm32f1xx_hal_dma.o
       494         20          0          0          0       4600   stm32f1xx_hal_gpio.o
      1258          0         18          0          0       7600   stm32f1xx_hal_rcc.o
       624          0          0          0          0      19043   stm32f1xx_hal_uart.o
        20          0          0          0          0       1151   stm32f1xx_it.o
        90          0          0          0          0       3712   sys.o
         2          0         16          4          0       1716   system_stm32f1xx.o
       160          0          0          0        267       6817   usart.o

    ----------------------------------------------------------------------
      3746         46        370         16       1816      72976   Object Totals
         0          0         32          0          0          0   (incl. Generated)
        42          0          0          3          7          0   (incl. Padding)

    ----------------------------------------------------------------------

启动模式

M3/M4/M7 等内核复位后, 做的第一件事:

  1. 从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值, 该值就是栈顶地址
  2. 从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值, 改值是复位向量

STM32 启动模式 (F1)

在系统复位后, SYSCLK 的第 4 个上升沿, BOOT 引脚的值将被锁存.

启动模式选择引脚 BOOT1启动模式选择引脚 BOOT2启动模式0x0000 0000 映射地址0x0000 0004 映射地址
X0主闪存存储器0x0800 00000x0800 0004
01系统存储器0x1FFFF 00000x1FFF F004
11内置 SRAM0x2000 00000x2000 0004

如果要使用 FSMC 重映射到外部的 SRAM: 可以通过配置 SYSCFG_MEMRMP 寄存器.

启动模式选择 BOOT启动地址选项字节启动模式
0BOOT_ADD0[15:0]由用户选项字节 BOOT_ADD0[15:0] 决定启动地址, ST 出厂默认的启动地址为: 位于 0x0020 0000 的 ITCM 上的 FLASH
1BOOT_ADD1[15:0]由用户选择字节 BOOT_ADD[15:0] 决定启动地址, ST 出厂默认的启动地址为: 位于 0x0010 0000 的系统存储器地址

选项字节允许将自举存储器地址配置为从 0x0000 0000 到 0x3FFF 0000 的任意地址, 其中低 16位只能位 0.

STM32 启动过程

  1. Reset
  2. 获取 MSP 值: 0x0800 0000
  3. 获取 PC 值: 0x0800 0004
  4. Reset_Handler
  5. 启动文件: startup_stm32xxx.s
  6. main 函数

启动文件介绍

  1. 初始化 MSP: 从 0x0800 0000 获取
  2. 初始化 PC: 从 0x0800 0004 获取
  3. 设置堆栈大小: Heap_Size(堆), Stack_Size(栈)
  4. 初始化中断向量表: __Vectors 定义
  5. 调用初始化函数: 可选的, 如调用: SystemInit 函数
  6. 调用__main: 标准 C 库函数, 执行一系列设置, 最终调用 main 函数

Reset_Handler 函数介绍

Reset_Handler PROC
	EXPORT Reset_Handler [WEAK]
	IMPORT __main
	IMPORT SystemInit
	LDR R0,=SystemInit
	BLX R0
	LDR R0,=__main
	BX R0
	ENDP
  • EXPORT: 标明全局属性, 可被外部调用
  • IMPORT: 申明来自外部文件, 类 extern
  • PROC: 定义子程序
  • ENDP: 表示子程序结束
  • WEAK: 弱定义

堆栈简介

内存作用
栈 (Stack)编译器自动分配和释放, 存放函数参数, 局部变量等
堆 (Heap)程序员分配和释放, 如 malloc, calloc, realloc 等

函数局部变量较多, 嵌套关系复杂时, 需要加大栈大小 (Stack_Size).

出处: 笔记摘自正点原子

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

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

相关文章

谁是液冷行业真龙头?疯狂的液冷技术!

“人工智能领域AIGC”、“ChatGPT”、“数据特区”、“东数西算”、“数据中心”,可以说是2023年最热的概念,算力提升的背后,处理器的功耗越来越高,想发挥出处理器的最高性能,需要更高的散热效率。 算力井喷之下&…

Blender 建模案例一(1)

目录 1. 指环1.1 创建一个柱体1.2 柱体微调1.3 缩放1.4 应用缩放1.5 物体属性回归默认1.6 进入编辑模式1.7 内插面1.8 桥接循环边1.9 添加表面细分修改器1.10 平滑着色1.11 添加环切 2. 卷轴2.1 添加曲线2.2 进入正交前视图2.3 添加节点2.4 曲线转3D 1. 指环 1.1 创建一个柱体…

Wifi ESL方案介绍

革新点: 7.5寸墨水屏显示WIFI无线通信,极简部署,远程控制按键及LED指示灯指示640*384点阵屏幕锂电池供电,支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命,一次充电可用一年基于现有Wifi环境&#xff…

APS54083 深度调光降压恒流驱动IC 8A LED摩托汽车舞台工作灯IC PWM调光 优化线路图

APS54083 是一款 PWM 工作模式,高效率、外 围简单、外置功率 MOS 管,适用于 5-220V 输入高精度降压 LED 恒流驱动芯片。输出最大 功率150W最大电流 6A。APS54083 可实现线 性调光和 PWM 调光,线性调光脚有效电压 范围 0.5-2.5V.PWM 调光频率范围 1…

第一天 :虚拟机的安装、Centos的安装、FinalShell的安装

Linux学习之虚拟机的安装 一、虚拟机的下载二、虚拟机的安装三、Centos的安装四、vm中安装centos五、finalShell安装 一、虚拟机的下载 1、进入安装官网https://www.vmware.com/cn/products/workstation-pro.html 2、下滑点击试用版下载 3、点击后在新页面下滑,找…

CnOpenData中国汽车能源消耗量数据

一、数据简介 工业和信息化部组织制定的《乘用车燃料消耗量限值》强制性国家标准(GB19578-2021)于2021年7月1日起正式实施,该标准规定了燃用汽油或柴油燃料、最大设计总质量不超过3500kg的M1类车辆在今后一段时期的燃料消耗量限值要求&#x…

瑞芯微RK3568智慧视频录像机NVR设备解决方案

NVR技术应用功能模式,较为灵活且能够在很大程度上满足当今视频监控系统功能需求。以NVR技术为核心的小型NVR方案,具有规模较小、操作灵活、使用方便、经济实用等优点,其前端主要配合高清视频摄像机支持8路720P的高清视频图像接入,…

刚进公司就负责项目,把老弟整蒙了!

刚进公司就负责项目,把老弟整蒙了! 大家好,我是鱼皮,先把封面图送给大家: 又快到周末了,今天分享一些轻松的编程经验~ 还记得我学编程的老弟小阿巴么?他目前大二,听说最近刚刚找到…

java 版本企业电子招投标采购系统源码之登录页面

​ 信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识,简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种…

Speech and Language Processing-之最小化编辑距离

今天讲编辑距离。 编辑距离为我们提供了一种量化这两种关于字符串相似度的直觉的方法。更正式地说,两个字符串之间的最小编辑距离定义为将一个字符串转换为另一个字符串所需的最小编辑操作(插入、删除、替换等操作)数量。 如上,图中第一行字符串和第二行…

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目,jfinal-layui,然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器,但是从来没有看过相关的源…

【react从入门到精通】react入门这一篇就够了

文章目录 前言什么是 React?安装和配置 React创建 React 组件渲染 React 组件使用 JSX传递属性(Props)处理组件状态(State)处理用户输入(事件处理)组合和嵌套组件写在最后 前言 React 是一种由 …

一些技术管理常见问题笔记

空降管理: 1 真诚靠谱: 思考我们能给上级、下级、公司带来什么价值。 遇到冲突,怎么决策? 团队、合作方了解清楚。 团队同学的简历,工作情况,背景能力有了解。 对应的产品经理、业务方的思维、背景。…

改善电商实时聊天体验的 5 大方法

今天,大多数网站都提供实时聊天支持作为选项。这是因为客户压倒性地将实时聊天列为他们的首选联系方式。 高达86%的消费者愿意在更好的客户体验上花费更多,但只有1%的人的期望始终得到满足,对于能够正确进行实时聊天的品牌来说,这…

润滑剂产业互联网平台搭建

润滑剂是一种广泛应用于工业、交通运输和农业等领域的重要物质,而润滑剂产业互联网平台的搭建可以更好地满足企业和用户的需求,提高行业效率,提升企业竞争力。下面是润滑剂产业互联网平台搭建的一些步骤和关键考虑因素: 确定平台的…

在KylinV10安装Dm8

前言 因为近期,业外和几个朋友想搞点有趣的项目玩玩,既然不以盈利为主,就> 主推国产化,所以这篇记录一下,我在KylinV10安装dm8.最近真的很忙,要负责专研一下国产化工具开发的事,还要负责tb级…

大数据之Hadoop集群资源管理器YARN

目录: 一、hadoop yarn 简介二、YARN架构三、YARN工作原理简述 一、hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群资源管理系统。用户可以将各种服务框架部署在 YARN 上,由 YARN 进行统一地管理和资源分配…

如何助力工厂实现从反应性维护到预测性维护?

技术正在重塑企业日常运营方式。技术的发展和变革促使工厂采用预测性维护,而不再采用被动(直到故障发生后再进行修理)的维护策略。 预测性维护利用多参数持续监测设备的健康状况和性能,通过预先建立的算法来预测设备何时会出现故障…

聚观早报|特斯拉向第三方电动车开放充电桩;Epic 诉苹果垄断败诉

今日要闻:特斯拉向第三方电动车开放充电桩;我国全面实现不动产统一登记;Epic 诉苹果垄断败诉;腾讯大股东Naspers再减持近79万股;星巴克中国门店将超过万家 特斯拉向第三方电动车开放充电桩 近日,特斯拉官方…