0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的完整启动流程分析

jf_pJlTbmA9 来源:嵌入式电子 作者:嵌入式电子 2023-10-25 16:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

关于STM32的启动流程,网上有的资料在讨论几种boot模式,有的在回答启动文件的内容,在查阅了很多资料后,本文给出一个比较全面的总结和回答。

1. 根据boot引脚决定三种启动模式

1.png

复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。BOOT0与BOOT1引脚的不同值指向了三种启动方式:

1)从主Flash启动。主Flash指的是STM32的内置Flash。选择该启动模式后,内置Flash的起始地址将被重映射到0x00000000地址,代码将在该处开始执行。一般我们使用JTAG或者SWD模式下载调试程序时,就是下载到这里面,重启后也直接从这启动。

2从系统存储器启动。系统储存器指的是STM32的内置ROM,选择该启动模式后,内置ROM的起始地址将被重映射到0x00000000地址,代码在此处开始运行。ROM中有一段出厂预置的代码,这段代码起到一个桥的作用,允许外部通过UART/CANUSB等将代码写入STM32的内置Flash中。这段代码也被称为ISP(In System Programing)代码,这种烧录代码的方式也被称为ISP烧录。关于ISP、ICP和IAP之间的区别将在后续章节中介绍。

3嵌入式SRAM中启动。显然,该方法是在STM32的内置SRAM中启动,选择该启动模式后,内置SRAM的起始地址将被重映射到0x00000000地址,代码在此处开始运行。这种模式由于烧录程序过程中不需要擦写Flash,因此速度较快,适合调试,但是掉电丢失。

总结:上面的每一种启动方式我都描述了“xxx的起始地址被重映射到了0x00000000地址,从而代码从xxx开始启动”,如下图是STM32F4xx中文参考手册中的图,可以看到类似的表述。同时,在下图中也展示了STM32F4xx中统一编址下,各内存的地址分配,注意一点,即使相应的内存被映射到了0x00000000起始的地址,通过其原来地址依然是可以访问的。

2.png

2. 启动后bootloader做了什么?

根据BOOT引脚确定了启动方式后,处理器进行的第二大步就是开始从0x00000000地址处开始执行代码,而该处存放的代码正是bootloader。

bootloader,也可以叫启动文件,无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都必须有启动文件,启动文件的作用便是负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。最为常见的51,AVR或MSP430等微控制器当然也有对应启动文件,但开发环境往往自动完整地提供了这个启动文件,不需要开发人员再行干预启动过程,只需要从main函数开始进行应用程序的设计即可。同样,STM32微控制器,无论是keiluvision4还是IAR EWARM开发环境,ST公司都提供了现成的直接可用的启动文件。

网上有很多资料分析了STM32的启动文件的内容,在此我只进行简单的表述。启动文件中首先会定义堆栈,定义中断/异常向量表,而其中只实现了复位的异常处理函数Reset_Handler,该函数内容如下(STM32F4XX,IAR编译器),可以看到其主要执行了SystemInit和__iar_program_start两个函数,其主要功能除了初始化时钟,FPU等,还会执行一个重要功能,那就是内存的搬移、初始化操作。这是我想重点介绍的内容,同时也会回答一个疑问,就是如果从Flash启动的话,代码究竟是运行在哪儿的?在我之前接触ARM9、CortexA系列的时候,一般都是把代码搬到内部的SRAM或者外部DDR中执行的,STM32是如何呢?答案下一小节揭晓。

3.png

3. bootloader中对内存的搬移和初始化

本节针对程序在内置Flash中启动的情况进行分析。

4.png

我们知道烧录的镜像文件中包含只读代码段.text,已初始化数据段.data和未初始化的或者初始化为0的数据段.bss。代码段由于是只读的,所以是可以一直放在Flash中,CPU通过总线去读取代码执行就OK,但是.data段和.bss段由于会涉及读写为了,为了更高的读写效率是要一定搬到RAM中执行的,因此bootloader会执行很重要的一步,就是会在RAM中初始化.data和.bss段,搬移或清空相应内存区域。

因此我们知道,当启动方式选择的是从内置Flash启动的时候,代码依旧是在Flash中执行,而数据则会被拷贝到内部SRAM中,该过程是由bootloader完成的。bootloader在完成这些流程之后,就会将代码交给main函数开始执行用户代码。

  • 现在让我们思考一个问题,PC机在运行程序的时候将程序从外存(硬盘)中,调入到RAM中运行,CPU从RAM中读取程序和数据;而单片机的程序则是固化在Flash中,CPU运行时直接从Flash中读取程序,从RAM中读取数据,那么PC机能从Flash之类的存储介质中直接读代码执行吗?

  • 答案是不行。因为x86构架的CPU是基于冯.诺依曼体系的,即数据和程序存储在一起,而且PC机的RAM资源相当丰富,从几十M到几百M甚至是几个G,客观上能够承受大量的程序数据。但是单片机的构架大多是哈弗体系的,即程序和数据分开存储,而且单片的片内RAM资源是相当有限的,内部的RAM过大会带来成本的大幅度提高。

4. ISP、IAP、ICP三种烧录方式

虽然这个小节稍稍偏题,但是由于上面在3中启动方式中介绍过了ISP烧录,因此一并在此介绍剩下的两种烧录方式。

1)ICP(In Circuit Programing)。在电路编程,可通过CPU的Debug Access Port 烧录代码,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);

2)ISP(In System Programing)。在系统编程,可借助MCU厂商预置的Bootloader 实现通过板载UART或USB接口烧录代码。

3)IAP(In Applicating Programing)。在应用编程,由开发者实现Bootloader功能,比如STM32存储映射Code分区中的Flash本是存储用户应用程序的区间(上电从此处执行用户代码),开发者可以将自己实现的Bootloader存放到Flash区间,MCU上电启动先执行用户的Bootloader代码,该代码可为用户应用程序的下载、校验、增量/补丁更新、升级、恢复等提供支持,如果用户代码提供了网络访问功能,IAP 还能通过无线网络下载更新代码,实现OTA空中升级功能。

4)IAP和ISP 的区别。

a、ISP程序一般是芯片厂家提供的。IAP一般是用户自己编写的

b、ISP一般支持的烧录方式有限,只有串口等。IAP就比较灵活,可以灵活的使用各种通信协议烧录

c、isp一般需要芯片进行一些硬件上的操作才行,IAP全部工作由程序完成,不需要去现场

d、isp一般只需要按格式将升级文件通过串口发送就可以。IAP的话控制相对麻烦,如果是OTA的话还需要编写后台的。

e、注意,这里介绍的bootloader功能显然跟之前介绍的启动文件bootloader有所区别,其目的是为了能接受外部镜像进行烧录,而不是为了运行普通用户程序。

来源:嵌入式电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    8249

    浏览量

    162376
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222942
  • PC
    PC
    +关注

    关注

    9

    文章

    2164

    浏览量

    158502
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371159
  • Boot
    +关注

    关注

    0

    文章

    154

    浏览量

    37495
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    视频卡顿分析流程

    视频卡顿分析流程
    发表于 11-10 16:55 0次下载

    d1哪吒开发板的启动流程分析

    启动。 5.裸机程序的编写 在分析了上述SPL和opensbi的启动流程后,自行编译一个简单的裸机程序就容易许多。从启动
    发表于 10-29 06:44

    eVTOL舱内噪声响应分析的仿真流程

    上一节中介绍了eVTOL旋翼噪声的表征以及通过声学BEM模型分析旋翼噪声到eVTOL机体外表面的噪声传播分析流程,本节将在上节内容的基础上继续介绍eVTOL舱内噪声响应分析的仿真
    的头像 发表于 09-23 14:06 423次阅读
    eVTOL舱内噪声响应<b class='flag-5'>分析</b>的仿真<b class='flag-5'>流程</b>

    企业级Linux磁盘维护的完整流程

    在企业级Linux环境中,磁盘故障是导致系统宕机和数据丢失的主要原因之一。据统计,超过70%的企业级服务器故障与存储系统相关。作为运维工程师,掌握完整的磁盘维护流程不仅能预防故障,更能在关键时刻拯救整个业务系统。
    的头像 发表于 07-23 16:59 617次阅读

    求助,关于K230启动流程疑问求解

    , GNU ld (GNU Binutils) 2.35) #1 SMP Sat Jun 21 23:51:35 CST 2025 [ 0.000000] earlycon: sbi0 上面是启动流程
    发表于 07-11 06:42

    【案例2.36】芯片启动异常的故障分析

    【案例2.36】芯片启动异常的故障分析在某产品的调试中发现,板上核心处理芯片在每次启动后的表现不同,偶尔会出现无法启动的故障。经过几百次反复上下电测试发现,在大多数情况下,芯片
    的头像 发表于 06-26 08:24 690次阅读
    【案例2.36】芯片<b class='flag-5'>启动</b>异常的故障<b class='flag-5'>分析</b>

    使用USB转TTL串口板和ST-LINK调试下载器给STM32单片机下载程序

    本文详细介绍如何使用ST-LINK/V2和USB转TTL串口板为STM32单片机下载程序,包括STM32启动模式、JTAG与SWD接口对比、驱动安装及官方软件STM32ST-LINKU
    的头像 发表于 06-20 17:26 2051次阅读
    使用USB转TTL串口板和ST-LINK调试下载器给<b class='flag-5'>STM32</b>单片机下载程序

    HarmonyOS实战:高德地图定位功能完整流程详解

    完整的定位功能流程,建议点赞收藏! 需求分析 要想实现一个完整的定位需求流程,就必须要做好准备工作,了解实现需求的具体步骤。 权限申请 检查
    的头像 发表于 06-09 15:23 871次阅读

    伺服电机测试流程分析

    伺服电机的测试流程是确保电机正常工作的关键步骤。以下是对伺服电机测试流程的详细分析。  一、初步检查与准备 1. 外观检查:首先,对伺服电机进行外观检查,确保电机完好无损,没有明显的物理损伤或变形
    的头像 发表于 04-23 17:56 1098次阅读

    RZT2H CR52双核BOOT流程和例程代码分析

    RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动
    的头像 发表于 04-03 17:14 2713次阅读
    RZT2H CR52双核BOOT<b class='flag-5'>流程</b>和例程代码<b class='flag-5'>分析</b>

    STM32MP135 Nor Flash启动,MX25L51245G_STM32MP135C-CUSTOM_HW_A7.bin如何修改?

    的MX25L51245G_STM32MP135C-CUSTOM_HW_A7.bin文件源码有人知道在哪么,该如何修改,我把Nor Flash的型号换了下,换成MT25QL02GCBB芯片,在启动流程这一步,不知道
    发表于 03-14 07:13

    封装失效分析流程、方法及设备

    本文首先介绍了器件失效的定义、分类和失效机理的统计,然后详细介绍了封装失效分析流程、方法及设备。
    的头像 发表于 03-13 14:45 1599次阅读
    封装失效<b class='flag-5'>分析</b>的<b class='flag-5'>流程</b>、方法及设备

    STM32的上电启动过程分享

    、PC然后是“启动文件”,一般主要是项目文件里面的startup_xxxxx.s文件。xa0 xa0 其实不光STM32系列单片机是这样,我们接触的NXP的微控制器、TI的MSP430以及51单片机等等
    发表于 03-07 08:09

    芯片失效分析的方法和流程

      本文介绍了芯片失效分析的方法和流程,举例了典型失效案例流程,总结了芯片失效分析关键技术面临的挑战和对策,并总结了芯片失效分析的注意事项。
    的头像 发表于 02-19 09:44 2525次阅读

    是德示波器在电源完整分析中的应用

    影响系统稳定性,甚至可能导致系统失效。因此,对电源完整性进行精确分析和有效的解决至关重要。而作为电子测量领域领先厂商,是德(Keysight)的示波器凭借其卓越的性能和丰富的功能,在电源完整
    的头像 发表于 01-07 11:05 684次阅读
    是德示波器在电源<b class='flag-5'>完整</b>性<b class='flag-5'>分析</b>中的应用