当前位置:首页 > 模拟 > 模拟技术
[导读]因为它可是你的程序跑的最初一段路,不可以不知道。通过了解启动文件,我们可以体会到处理器的架构、指令集、中断向量安排等内容,是非常值得玩味的。

每一款芯片的启动文件都值得去研究,因为它可是你的程序跑的最初一段路,不可以不知道。通过了解启动文件,我们可以体会到处理器的架构、指令集、中断向量安排等内容,是非常值得玩味的。

STM32作为一款高端 Cortex-M3系列单片机,有必要了解它的启动文件。打好基础,为以后优化程序,写出高质量的代码最准备。

本文以一个实际测试代码--START_TEST为例进行阐述。

整体过程

STM32整个启动过程是指从上电开始,一直到运行到 main函数之间的这段过程,步骤为(以使用微库为例):

①上电后硬件设置SP、PC

②设置系统时钟

③软件设置SP

④加载.data、.bss,并初始化栈区

⑤跳转到C文件的main函数

代码

启动过程涉及的文件不仅包含 startup_stm32f10x_hd.s,还涉及到了MDK自带的连接库文件 entry.o、entry2.o、entry5.o、entry7.o等(从生成的 map文件可以看出来)。

2 程序在Flash上的存储结构

在真正讲解启动过程之前,先要讲解程序下载到 Flash上的结构和程序运行时(执行到main函数)时的SRAM数据结构。程序在用户Flash上的结构如下图所示。下图是通过阅读hex文件和在MDK下调试综合提炼出来的。


813e6768-ec67-11ed-90ce-dac502259ad0.jpg

上图中:

MSP初始值由编译器生成,是主堆栈的初始值。

初始化数据段是.data

未初始化数据段是.bss

.data和.bss是在__main里进行初始化的,对于ARM Compiler,__main主要执行以下函数:


815c002a-ec67-11ed-90ce-dac502259ad0.png

其中__scatterload会对.data和.bss进行初始化。

加载数据段和初始化栈的参数

加载数据段和初始化栈的参数分别有4个,这里只讲解加载数据段的参数,至于初始化栈的参数类似。

后来出现了 Flash 这种可电擦写的存储器,并集成在了单片机内部。但出厂的时候单片机的程序存储区仍然是空白的,没有任何代码。用户编译程序后,下载到单片机后才能运行。那么在产品发给用户后,如果发现有Bug怎么办呢?就得用编程器把新代码重新下载一次。这实在是有点儿麻烦,特别是如果客户距离很远的话。于是有聪明的程序猿想了一个办法,写一小段特殊的代码放在程序里,这段代码可以通过一定方式,比如用按键触发进入运行,它可以通过串口(早期的 PC 串口是标配)接收新的代码并写入Flash,从而在没有硬件编程器的情况下也能完成代码的更新。

标准化的零部件模式、HI(Huawei Inside) 模式以及鸿蒙智行模式。(1)零部件模式:车 BU 类似传统汽车供应链中的 Tier1, 提供标准化零部件模块给车厂,包括激光雷达、毫米波雷达、摄像头、电机电控、 车联网模块等 30 多种标准化部件。(2)HI 模式:提供包括软硬件的全栈解决方案, 帮助车企充分享受到华为先进的智能化技术,相较于零部件模式,HI 模式与车企的 合作程度更加深入,特别是 HI 模式下可以在智能电动、智能座舱与智能驾驶等领域 实现持续迭代升级。(3)鸿蒙智行模式:鸿蒙智行则是在 HI 模式的基础上更进一步, 华为全方位介入合作车型的生命周期,发挥华为消费者端累积的经验,提供技术和 服务支持,帮助其提升产品竞争力。

从业务归属和范围上看,零部件模式和 HI 模式主要由车 BU 为车企提供零部件 与解决方案,华为不参与整车设计;而鸿蒙智行模式主要归华为终端 BG 进行管理。 具体来说,终端 BG 相关部门负责产品规划、整车开发、工程实现、品控管理、供 应链管理、生产制造、渠道销售、品牌营销到交付售后等各个环节,车 BU 的解决 方案部负责进驻车企。

五大解决方案协同,为车企提供多样化配置。华为掌握芯、硬、软、云等智能 化核心技术,在此基础上,车 BU 先后推出 MDC 智能驾驶平台、激光雷达、4D 成 像雷达、AR-HUD、鸿蒙车机 OS、HUAWEI HiCar 人-车-家全场景智慧互联、车载 智慧屏、车载充电、DriveONE 电驱动、C-V2X、自动驾驶云服务等一系列创新解决 方案,共形成乾崑 ADS、乾崑车控、乾崑车云、乾崑车载光、鸿蒙座舱等五大解决 方案,涵盖了智能网联电动汽车的各个方面。华为在汽车智能化领域技术实力雄厚, 推动汽车产业转型升级。

1.3、 车企入股引望加深合作,华为有望与更多车企实现“双向奔赴”

阿维塔/赛力斯入股引望,开启华为打造汽车产业智能化开放平台的关键一步。 8 月 20 日,长安汽车发布公告,联营企业阿维塔拟与华为签署《股权转让协议》,以 115 亿元的价格购买华为持有的旗下智能汽车解决方案新公司引望 10%的股权,并且 阿维塔有权提名引望董事会 7 名成员中的 1 名董事。徐直军表示,阿维塔是华为帮 助车企“造好”车、造“好车”的开创性实践。8 月 26 日,赛力斯发布公告,子公司赛 力斯拟以 115 亿元的价格购买华为持有的旗下智能汽车解决方案新公司引望 10%的 股权,成为第二家入股华为引望的车企,并且赛力斯汽车在交割后有权向引望董事 会提名一位董事和一位审计委员会委员。华为有意将引望打造成汽车产业智能化开 放平台,成为汽车智能化部件和解决方案的领导者。阿维塔和赛力斯相继成为引望 的战略投资者后,引望还将继续对战略合作伙伴开放股权,华为将继续全方位支持 引望打造领先的产品和技术,携手共同推动汽车产业崛起和智能化全面发展。

人员、技术和资产所有权即将装载,引望独立运作在即。徐直军称,2024 年底 希望把所有资产、人员装载到引望,实现引望独立运作。根据赛力斯公告,华为技 术和目标公司将在受让方支付第一笔交易价款前签署装载协议。知识产权方面,采 用转让与许可相结合的模式进行装载,截至 2024 年 7 月 31 日,华为拟转让专利及 专利申请共计 6838 项,拟许可专利包括装载业务需要使用的其他专利;拟转让及拟 许可技术包含装载业务相关软件、代码、文档和数据等技术资产;拟转让商标及商 标申请共计 1603 项,拟许可商标及商标申请共计 1600 项。人员方面,华为技术及 其关联方从事装载业务并且用工关系将转移至目标公司的员工将不少于 5500 人。华 为在之前的发展中已与长安汽车、赛力斯、奇瑞、北汽、江淮、东风、一汽等车企 展开深度合作,合作朋友圈持续扩大,而引望已经引入了第一批包括阿维塔和赛力 斯在内的两家车企的投资,第二批车企投资尚在接触中。

程序猿们也是现代历史前进的重要推动力啊!

后来,有芯片厂商把这种代码在出厂时就固化在芯片里,极大的方便了代码下载和程序更新。STM32F030内部就固化了Bootloader。当我们把一个引脚 BOOT0 拉高的同时,重新给芯片上电或复位,就会触发Boootloader进入运行。此时我们通过单片机的串口就可以把新程序发送给单片机,发送完后把 BOOT0 拉低,再复位单片机,新程序就会运行起来。

Startup Code 可以译为启动代码。单片机上电或复位后最先执行的一段代码。一般主要会完成堆栈指针的设置,复位向量的获取和加载,然后初始化变量,最后跳转到用户代码。在详细看启动代码之前,我们先看一下 STM32F030 的内存映射。

‌STM32的启动过程‌主要包括以下几个关键步骤:

‌初始化堆栈指针和程序计数器‌:当STM32芯片上电或复位时,处理器会从特定的内存地址(通常是0x00000000)获取堆栈指针(MSP)的初始值,并将其加载到堆栈指针寄存器(SP)中。同时,处理器从0x00000004地址获取程序计数器(PC)的初始值,指向复位处理程序(Reset_Handler)的入口地址‌12。

‌复位处理程序‌:复位处理程序(Reset_Handler)是启动代码中的关键部分,负责初始化系统时钟、配置外设、设置中断相关参数等操作。完成这些初始化后,复位处理程序会跳转到用户定义的启动代码或主函数(main)‌13。

‌启动模式‌:STM32支持三种启动模式:

‌主闪存存储器启动‌:这是最常见的启动模式。处理器从内置的Flash启动,通常用于通过JTAG或SWD模式下载程序。

‌系统存储器启动‌:用于通过外部接口(如UART、CAN或USB)下载和更新程序。系统存储器中包含一个出厂预置的ISP(In-System Programming)代码,用于桥接外部代码到内置Flash。

‌内置SRAM启动‌:用于调试和修复固件,但SRAM中的代码在掉电后会丢失‌14。

‌内存映射‌:不同的启动模式会将不同的内存区域映射到0x00000000地址。例如,在主Flash启动模式下,内置Flash的起始地址(0x08000000)会被重映射到0x00000000地址‌12。

通过这些步骤,STM32芯片能够从特定的存储介质中加载和执行程序,完成初始化操作后进入用户代码的执行环境。

收起分享

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭