【STM32芯片启动流程】——结合具体启动文件和hex文件分析

一、前言

最近想把MCU相关的知识梳理一遍,希望加深自己对相关知识的理解,同时也作为备忘录提醒自己。首先是STM32的启动过程,理解这个过程是学习IAP和OTA功能以及深入stm32内核的基础。

二、总体流程介绍

1. 由boot引脚(boot0,boot1)选择启动模式;

2. 给SP、PC指针赋值;

3. 进入复位中断程序;

4. 进入main函数。

三、各个过程深入分析

1. 由boot引脚选择启动模式

stm32复位(上电复位、硬件复位、软件复位),会将复位后的起始地址和中断向量表重映射到其他地址,具体映射到哪个地址由boot0和boot1决定。具体映射关系如下图所示。

启动模式对应映射地址

其中最常用的启动模式就是映射到内部FLASH启动,这也是接下来重点介绍的模式。

映射到内部SRAM启动的使用场景比较少,代码在SRAM的执行速度较快,可运用在一些调试需频繁更新代码的场合。

映射到系统存储器一般是用于bootloader引导程序升级时使用,在程序本地升级和OTA升级时都会用。

2. 给SP、PC指针赋值

选择内部FLASH启动后,程序会将栈指针SP指向0x08000000,这个地址保存的是__initial_sp的地址,也就是程序栈顶地址,还会将程序计数

### STM32F103 烧录 HEX 文件方法 #### 使用 Keil 生成 HEX 文件 为了将程序烧录到 STM32F103 芯片上,首先需要使用开发环境(如 Keil uVision)生成目标文件。在 Keil 中配置项目后,可以通过点击设置图标(通常被称为“魔法棒”),进入项目的选项菜单[^1]。在此处调整输出设置以确保生成 `.hex` 文件。 #### 利用 STM32CubeProgrammer 烧录 另一种方式是利用 CMake 构建工具来编译 STM32F103 的固件,在构建完成后会在 `/bin` 文件夹下生成 ELF 文件。随后可借助 STM32CubeProgrammer 将该文件转换为 HEX 并完成烧录操作[^2]。此过程需注意软件版本兼容性硬件连接稳定性。 #### 正点原子模板下的自动 HEX 生成功能 如果采用的是基于正点原子提供的工程模板,则无需额外手动干预 HEX 文件的生成环节。按照既定流程编译源码之后,最终产物会被放置于 `OBJ` 文件夹之中待后续处理[^3]。 #### SSCOM 发送 HEX 升级方案 对于某些特殊应用场景——例如无法直接接入传统 ISP 下载口的情况——可以考虑运用串口调试助手 (SSCOM),配合 USB-TTL 设备向 MCU 传输由 KEIL 输出的 HEX 数据包来进行在线更新作业[^4]。这种技术特别适合那些被封装进外壳内部而难以触及物理编程端子的产品设计案例里实施远程维护工作。 #### PA9 PA10 引脚定义注意事项 当决定采取上述提及过的串行通讯方式进行刷机前,请务必确认好目标设备上的对应管脚分配情况;具体来说就是要把 STM32F103C8T6 上面标注为 PA9 的针脚对接至外部 TTL 模块中的接收端(RX), 同样地把标记成 PA10 那根线缆连往发送方向(TX)[^5]; 另外别忘了同步做好电源供应(+3V3)以及接地(GND)这两部分电路搭建动作哦! ```python # 示例 Python 脚本用于模拟简单串口数据交换逻辑 import serial ser = serial.Serial('COM3', baudrate=9600, timeout=1) if ser.isOpen(): print("Serial port is open.") else: print("Failed to open serial port.") try: while True: response = ser.readline().decode('utf-8').strip() if not response: continue elif "ready" in response.lower(): break with open("firmware.hex", 'r') as file: firmware_data = file.read() ser.write(firmware_data.encode()) finally: ser.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值