嵌入式开发入门知识
有用的知识
何为单片机?
单片机(Microcontroller Unit,MCU)是一块集成了中央处理器(CPU)、内存、定时器和多种输入/输出(I/O)接口的微型计算机芯片
**in short 可以理解为一个非常非常精简的小电脑,甚至于没有操作系统。当然可以移植运行一些极其精简的实时操作系统, 如: FreeRTOS、RT-Thread 等。通常这些系统具有线程、任务、内存管理,方便你开发。
主流的生态选型
STM32
采用 ARM Cortex-M 系列内核(从 M0+ 到最新的 M85),主频跨度极大(几十 MHz 到 800 MHz)。它拥有极高的运算性能和纳秒级的中断延迟,非常适合处理复杂的逻辑、电机控制和传感器融合算法。
特点是便宜,绝对的实时性(对与工业这点很重要), 开发需要非常了解硬件底层要了解 时钟树、中断、DMA、外设寄存器、开发个TCP甚至需要你自己实现..
通常是裸机运行或 FreeRTOS,适合PLC控制器、电机驱动器、工业机器人、温度调节器等,保证绝对的实时性和高可靠性。
ESP32
早期 Xtensa LX6/LX7 双核架构,最新型号全面转向开源的 RISC-V 架构(如 C3/C6/P4)。其主频通常在 160MHz~400MHz 之间
**特点是原生集成 Wi-Fi 、BLE、Zigbee 自带支持协议栈 MQTT、HTTP/HTTPS、WebSocket、CoAP 等开箱即用。它开发相对简单点支持 MicroPython(可以理解为python) 脚本控制,大幅降低入门门槛。
缺点是实时性不足(Wi-Fi 协议栈会占用大量 CPU 时间,中断延迟不可预测)
单片机的架构
架构决定了它的指令集、功耗和生态兼容性。如同桌面的端分为ARM和X86 架构 目前市场上主要分为两大阵营:
- ARM Cortex-M 系列: 这是目前 32 位单片机领域的绝对霸主。ARM 公司只设计内核架构并授权给其他芯片厂商,自己不生产芯片。全球有 40 多家企业获得了授权,比如意法半导体(ST)、恩智浦(NXP)、微芯(Microchip)等。
- 特点: 拥有统一的开发工具和软件生态,不同厂家的 Cortex-M 芯片在代码层面有很高的兼容性。从低功耗的 M0+ 到带浮点运算和 DSP 指令的 M4/M7,再到支持 AI 加速的 M55/M85,产品线极其丰富。
- 代表产品: ST 的 STM32 系列、NXP 的 Kinetis 系列。
- RISC-V 架构: 这是一个开源的精简指令集架构,近年来发展迅猛。
- 特点: 指令集开源免费,允许厂商高度自定义,打破了 ARM 的垄断。在物联网和国产替代场景中非常活跃。
- 代表产品: 乐鑫科技的 ESP32-C3、兆易创新的 GD32VF103。
32位数
STM32 和 ESP32 中的"32",指的都是 CPU 的通用寄存器宽度为 32 位。
那就是意味着:CPU 在一个时钟周期内可以直接对 32 位数据进行运算(加减乘除、逻辑运算等)
也意味着:这个CPU能管理的内存最大能寻址 2^32 个内存单元(管理最小的内存单元是Byte),也就是 4GB(2^32 Bytes=4GB 2^32 Bytes=4 GB )。这就是为什么 32 位 Windows 电脑最多只能识别 4G 内存的原因。
有用的资料
嵌入式开发入门 - https://stm32f407-tech-doc.readthedocs.io/en/latest/pre/1嵌入式入门/嵌入式入门.html
波特律动 - https://docs.keysking.com/
HAL库函数速查手册 - https://docs.keysking.com/docs/stm32/HAL/
FreeRTOS极速通关 - https://docs.keysking.com/docs/stm32/freertos/course
TM32CubeMX 工程创建 - https://x509p6c8to.feishu.cn/wiki/LfMpwjktZiMAuMkayt6c0LGZnpx
STM32 的开发IDE
Keil
https://www.keil.com/download/product/
Keil 是一款由德国 Keil 公司开发、后被美国 ARM 公司收购的嵌入式系统集成开发环境(IDE) ,主要用于 ARM、8051、C166 等微控制器的软件开发。在 STM32 开发领域,大家常说的"Keil"通常指的是 Keil MDK(Microcontroller Development Kit) ,其核心编译器为 ARMCC / ARMCLANG。
在 ARM Cortex-M 系列(如 STM32、NXP、GD32 等)开发中,Keil 是使用最广泛的 IDE 之一,尤其在工业控制、汽车电子等领域几乎是行业标杆。
但它是个收费软件,未注册时编译有 32KB 代码大小限制
配置连接
工具栏上的"魔术棒"图标(Options for Target)
- 选择调试器 :在右侧的下拉菜单
Use:中,根据你实际使用的硬件选择对应的调试器。例如使用 ST-Link 就选ST-Link Debugger,使用 J-Link 就选J-Link / J-Trace Cortex。 - 进入详细设置 :点击右侧的
Settings按钮,在弹出的窗口中:- Port(接口模式) :选择
SW(Serial Wire),这是目前最主流的调试接口。 - Max Clock(最大频率):初次连接建议设为较低的频率(如 1MHz 或 2MHz),连接稳定后再适当调高以加快下载速度。
- Connect & Reset Settings(连接与复位) :强烈建议勾选
Connect: under Reset。这个选项能让调试器在芯片处于复位状态时强行建立连接,能有效解决很多因程序跑飞或低功耗模式导致的"无法连接"问题。
- Port(接口模式) :选择
串口重定向 (ASSIGN)
注意该命令仅在仿真环境中有效!
KEIL 的 ASSIGN 命令本质上是在软件仿真层面进行了一次"信号劫持"或"虚拟映射"。它会将单片机内部串口(UART/USART)发出的数据,直接通过 J-Link/SWD 调试接口传输到你的电脑屏幕上,从而绕过了物理硬件引脚
在 Keil 仿真器中,单片机的串口被抽象为虚拟通道,通常支持 4 个串口:
| 单片机外设 | Keil 虚拟通道 (输入/输出) | 常用映射目标 |
|---|---|---|
| USART1 / UART1 | S0IN / S0OUT |
WIN1 或 COMx |
| USART2 / UART2 | S1IN / S1OUT |
WIN2 或 COMx |
| USART3 / UART3 | S2IN / S2OUT |
WIN3 或 COMx |
| UART4 | S3IN / S3OUT |
WIN4 或 COMx |
执行命令
调试模式下 -> View -> Command Window
如果只想在 Keil 内部直接看打印,不需要外接任何工具:
ASSIGN WIN1 <S0IN> S0OUT
- 把 串口1直接劫持显示在 Keil 的 View -> Serial Windows -> UART #1 窗口中
ini
ASSIGN WIN1 <S3IN> S3OUT
把 MCU 的 UART4 映射到 Keil 的 UART #1 窗口
串口重定向 debug.ini
每次进入调试都要手动敲命令很麻烦,你可以将这些命令写进一个 .ini 配置文件(例如命名为 debug.ini),然后在 Keil 中自动加载:
- 新建一个
debug.ini文本文件,内容如下:
ini
MODE COM2 115200,0,8,1
ASSIGN COM2 <S3IN> S3OUT
在使用
ASSIGN之前,通常需要先用MODE命令设置好电脑端串口的波特率等参数。例如:MODE COM2 115200,0,8,1(设置 COM2 波特率为 115200,无校验位,8位数据,1位停止位)
-
在 Keil 中点击"魔法棒" -> Debug 选项卡。
-
勾选右侧的 Initialization File ,浏览并选中你刚刚创建的
debug.ini文件。这样,以后每次点击 Debug 进入仿真时,Keil 就会自动帮你执行这些映射命令了。
-
准备虚拟串口软件 :使用如 VSPD (Virtual Serial Port Driver) 等软件,在电脑上创建一对互相连通的虚拟串口(例如创建了
COM2 <-> COM3这一对)。 -
- 打开串口助手 :在你的电脑串口调试助手(如 XCOM、SSCOM)中,选择 COM3(也就是和 COM2 配对的那个端口),设置好相同的波特率(115200)并打开串口。
debuger track (printf) Viewer
在 Keil 的 Debug (printf) Viewer 窗口中查看 printf 的输出,核心步骤是在代码中将输出重定向到 ARM Cortex-M 内核内置的 ITM(Instrumentation Trace Macrocell) 端口
- 工程配置:
- 在 Target Options -> Debug -> Settings 中,确保选择了 ST-Link 或 J-Link。
- 在 Debug 选项卡中,启用 "Enable Debug Printf Viewer"。
- Trace 选项卡中,勾选 Trace Enable ,并设置正确的 Core Clock(CPU 主频)。
- 代码重映射: 在代码中重映射
fputc到 ITM/SWO (无需额外硬件)
c
int fputc(int ch, FILE *f)
{
ITM_SendChar((uint32_t)ch);
return ch;
}
如果你的工程中已经包含了 CMSIS 的核心头文件(如 core_cm4.h、core_cm7.h 等),也可以直接调用封装好的 ITM_SendChar(ch); 函数来代替上述的手动寄存器操作。
在芯片的默认复用功能配置(AF0)下,PB3 引脚同时具备 JTAG 调试输出(JTDO)和 SWO 跟踪输出的功能。确认该引脚已连接到 J-Link 的 SWO 脚。
-
勾选微库(MicroLIB) :点击工具栏的魔术棒图标(Options for Target),在
Target选项卡中,务必勾选Use MicroLIB。这是为了让printf能够适配资源受限的嵌入式环境。 -
查看打印: 启动调试,在菜单栏选择 View -> Serial Windows -> Debug (printf) Viewer。
-
获取 Core Clock?
在代码中添加或找到系统全局变量 SystemCoreClock。
启动 Keil 仿真调试(Debug 模式)。
将 SystemCoreClock 添加到 Watch 1 窗口。
STM32CubeMX
https://www.st.com.cn/zh/development-tools/stm32cubemx.html#tools-software
STM32CubeMX 是意法半导体(ST)官方推出的一款图形化配置工具 ,专门用于简化 STM32 系列芯片的开发流程。它的牛逼在于:用鼠标点选代替手动配置寄存器,并能自动生成完整的初始化 C 代码。
强烈推荐新同学, 它可以通过可以提供图形化:
- 配置每个引脚的功能(如 GPIO、UART、SPI 等),并自动检测引脚
- 图形化的时钟树界面,可以直观地设置系统时钟、外设时钟的分频和倍频参数,并实时验证配置是否合法。
- 支持 UART、SPI、I2C、等外设的参数配置,以及 FreeRTOS、FatFS、LwIP、USB 等中间件的集成。
- 关键的是它免费!
STM32 的烧录
J-Link 和 ST-Link 与 STM32 的通讯方式主要有两种:SWD 和 JTAG。
通讯方式(SWD 与 JTAG)
这两种工具本质上都是将电脑上的调试指令翻译成单片机(MCU)能听懂的电信号。目前最常用的是 SWD 模式。
SWD(Serial Wire Debug)
ARM 公司推出的一种新型调试协议,最大的优势是极其省引脚 。它只需要 2 根信号线(加上电源和地线共 4 根)就能实现完整的下载和调试功能。
SWD全称是Serial Wire Debug(串行调试),SWD模式下用JLink给我们的板子debug时,是用标准的二线DIO和CLK,RESET管脚可不接,当你频繁下载失败时,可接上RESET管脚再试。
在高速模式下,SWD比JTAG更可靠一些,常见的接线信号如下所示,根据具体情况自主选择。
- 核心引脚 :
- SWCLK:时钟线,由调试器发出节拍同步操作。
- SWDIO:双向数据线,负责传输命令和数据。
- 现状:因为占用的 MCU 引脚极少,现在绝大多数 STM32 项目都默认使用 SWD 模式进行开发。
SWD模式下,SWDIO的上拉电阻可预留不贴,在ST的一些MCU参考设计中,有提到建议添加,实际测试不加不影响下载。
JTAG (Joint Test Action Group)
一种标准的国际标准测试协议。它的功能非常强大,除了调试,还支持复杂的"边界扫描"测试(用于检查 PCB 板上的芯片连通性)。
JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试,现在多数的器件都支持JTAG协议,ARM、DSP、FPGA等,JTAG接口的单片机用电脑USB下载调试程序,需要用到J-Link(USB转JTAG)。
标准的JTAG是四线:TDI,TMS,TCK,TDO,分别对应数据输入,模式选择,时钟,数据输出,复位管脚可不接。
- 核心引脚:TCK(时钟)、TMS(模式选择)、TDI(数据输入)、TDO(数据输出),有时还需要 TRST(复位)。
关于复位引脚
RST (nRESET) 复位引脚。
如果你的单片机代码中已经正确配置并开启了 SWD 调试功能(比如使用了 Serial Wire 模式),那么 RST 线是可以不接的,仅靠上面的 4 根线就能完美下载和调试。
如果你不小心在代码里
__HAL_AFIO_REMAP_SWJ_DISABLE(); // 关闭SWD、JTAG接口
把 SWD 调试引脚禁用了(或者配置成了普通 GPIO),导致单片机"变砖"无法连接,这时候就必须接上 RST 线。通过在复位状态下强行连接(Connect under Reset),才能重新夺回单片机的控制
短接复位
如果你的板子没有引出复位按键,就需要找到单片机芯片旁边的 复位电路 。通常是一个贴片电容或贴片电阻,一端连着单片机的 NRST 引脚,另一端连着 GND(地)。
用金属镊子或一根杜邦线,短接这个复位电容/电阻的两端(也就是把 NRST 引脚强行拉低到 GND)。
修改 Keil 调试设置
- 如果你的调试器(如 ST-Link、J-Link)连接了单片机的 RST 复位引脚,可以直接在 Keil 里设置,让软件自动完成"按住复位烧录"的动作:
- 点击 Keil 的魔术棒图标(Options for Target) -> Debug -> Settings。
- 找到 Connect & Reset Options(连接与复位选项)区域。
- 将 Connect 选项改为
Under Reset或with Pre-reset。 - 点击确定后,再次正常点击烧录,调试器就会自动先拉低复位引脚,阻止错误代码运行,从而顺利烧录新程序。
仿真器 (ST-Link 与 J-Link)
ST-Link 引脚说明
在实际接线中,真正干活的通常只有以下 4 到 5 根线:
| 引脚名称 | 实际作用 | 注意 |
|---|---|---|
| GND | 共地。提供信号参考基准,消除电平偏差。 | 最容易被忽视! 如果不接 GND,通信会直接失效或极其不稳定。 |
| SWCLK | 时钟线。由 ST-Link 发出节拍,同步所有操作。 | 接反了或者虚焊,软件会提示"找不到目标设备 (Target not found)"。 |
SWDIO SWO 或 TDO |
数据线。双向传输命令和数据,读写全靠它。 | dio 和 clk容易接反! |
| V_TGT / TVCC | 电压检测。仅用于检测目标板是否有电及电平匹配。 | 严禁当作主供电引脚! 目标板已有独立电源时若强行接入,可能导致电流倒灌烧坏芯片。 |
| NRST / RESET | 复位控制。允许 ST-Link 主动重启 MCU。 | 不接的话,如果程序跑飞或关闭了调试接口,就只能手动按板子上的复位键。 |
J-Link 引脚说明
J-Link 和 ST-Link 一样,都是连接电脑与单片机(如 STM32)的调试下载器,但它是由德国 SEGGER 公司开发的高性能通用调试探针,兼容市面上几乎所有的 ARM Cortex-M 内核芯片。
目前最主流、最推荐使用的同样是 SWD 模式,它只需要极少的几根线就能完成工作。
J-Link 通常使用标准的 10-pin (2x5) 接口,真正干活的通常只有以下 4 到 5 根线:
| 引脚名称 | 实际作用 | 注意 |
|---|---|---|
| GND | 共地。提供信号参考基准,消除电平偏差。 | 最容易被忽视! 如果不接 GND,通信会直接失效或极其不稳定。 |
| SWCLK/clk | 时钟线。由 J-Link 发出节拍,同步所有操作。 | 接反了或者虚焊,软件会提示"找不到目标设备 (Target not found)"。 |
| SWDIO/dio | 数据线。双向传输命令和数据,读写全靠它。 | dio 和 clk容易接反! |
| VTref/vt3.3 | 电压检测。仅用于检测目标板的工作电压以匹配电平。 | 严禁当作主供电引脚! 绝对不能把 5V 接到 VTref 上,否则会直接烧毁 J-Link! |
| RESET/rst | 复位控制。允许 J-Link 主动重启 MCU。 | 不接的话,如果程序跑飞或关闭了调试接口,就只能手动按板子上的复位键。 |
关于引脚共用
以最常见的 STM32 为例, 其调试引脚的复用关系如下:
| STM32 引脚 | 复用的调试功能 | 说明 |
|---|---|---|
| PA13 | SWDIO / JTMS | 在 SWD 模式下作数据线,在 JTAG 下作模式选择 |
| PA14 | SWCLK / JTCK | 在 SWD 模式下作时钟线,在 JTAG 下作时钟 |
| PA15 | JTDI | 仅在完整 JTAG 模式下作为数据输入 |
| PB3 | JTDO / TRACESWO | 在 JTAG 下作数据输出,或输出跟踪数据 |
| PB4 | NJTRST | JTAG 的复位引脚 |
| 虽然它们共用物理引脚,但不能同时激活。STM32 在上电启动时,会根据内部配置(如选项字节)自动决定这一组引脚是进入 SWD 模式、JTAG 模式,还是被释放出来当作普通的 GPIO(输入/输出)引脚使用。 |
在日常开发 STM32 时,除非有特殊的板级测试需求,否则推荐使用 SWD 通讯方式。它不仅能帮你省下宝贵的 MCU 引脚,而且接线简单(只需 4 根线),J-Link 和 ST-Link 都能完美支持
固件的格式
| 格式 | 扩展名 | 说明 | |
|---|---|---|---|
| 二进制文件 | .bin |
原始二进制镜像,不含地址信息,烧录时需手动指定起始地址 | |
| Intel HEX | .hex |
ASCII编码的十六进制格式,包含地址、数据和校验信息,可读性强 | |
| ELF文件 | .elf |
可执行与可链接格式,包含完整的符号表、调试信息和段信息 | |
| AXF文件 | .axf |
ARM编译器生成的可执行格式,本质上是ELF的变种 | |
| OUT文件 | .out |
编译器输出的可执行文件格式 | |
| S-Record | .srec / .s19 |
摩托罗拉S-record格式,类似HEX的ASCII编码格式 | |
- .bin 文件 :体积最小,不含任何元数据。适合量产烧录,但需要开发者明确知道烧录起始地址 (如 STM32 Flash 起始地址
0x08000000)。 - .hex 文件:包含地址信息和校验和,烧录工具可自动解析地址,不易出错。Keil MDK 默认生成此格式,适合开发和调试阶段使用。
- .elf/.axf 文件 :包含完整的调试符号信息,适合需要在线调试的场景。STM32CubeIDE 默认生成
.elf文件。 - .srec/.s19 文件:与 HEX 类似,是摩托罗拉制定的标准格式,在某些工业领域较为常见。
烧录工具软件
STM32 ST-LINK Utility
https://www.st.com/en/development-tools/stsw-link004.html
STM32 ST-LINK Utility 是意法半导体(ST)官方推出的一款轻量级图形化烧录工具,专用于 STM32 系列微控制器的 Flash 编程与调试辅助。它独立于 Keil、IAR 等大型 IDE,可以直接加载编译好的固件文件完成烧录。
ST 官方目前已将开发重心转向新一代工具 STM32CubeProgrammer,它支持更多文件格式(.elf、.axf、.srec 等)、跨平台(Windows/Linux/macOS),并提供图形界面和命令行两种模式。不过 ST-LINK Utility 因其轻量、简洁的特点,在研发调试和简单烧录场景中仍然被广泛使用。
固件备份
-
**连接芯片
- 点击菜单栏
Target→Connect,与 STM32 芯片建立连接 - 连接成功后,软件界面会显示目标 MCU 的型号、Flash 大小等信息
- 点击菜单栏
-
读取芯片内存
- 点击菜单栏
Target→Read Memory - 在弹出的窗口中设置读取参数:
- 起始地址(Start Address) :通常为
0x08000000(STM32 Flash 起始地址) - 数据长度(Size):根据芯片 Flash 容量填写(如 64KB、128KB、512KB 等)
- 起始地址(Start Address) :通常为
- 点击开始读取,软件会将芯片 Flash 内容读出并在内存浏览器中显示
- 点击菜单栏
-
保存为文件
- 读取完成后,点击菜单栏
File→Save As - 选择保存格式:
- Raw Binary Image (.bin):二进制格式,体积最小,适合量产备份
- Intel HEX (.hex):包含地址和校验信息,可读性强
- 设置起始地址和长度(与读取时保持一致)
- 选择保存路径,点击保存即可完成固件备份
- 读取完成后,点击菜单栏
命令脚本烧录
"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -c SWD UR -P "E:\workspace\embedded\lora-gateway\lora-gateway-eth\Project\Objects\demo.hex" -V -Rst
STM32CubeProgrammer
https://www.st.com/en/development-tools/stm32cubeprog.html
"复位连接"模式(Under Reset)
- 打开 STM32CubeProgrammer,在右上角的连接方式下拉框中选择你的调试器(如
ST-LINK或J-LINK)。 - 点击调试器旁边的 齿轮图标(配置/设置按钮)。
- 在弹出的设置窗口中,找到
Reset mode(复位模式) 选项。 - 将其从默认的
Software system reset修改为Hardware reset或Connect under reset。 - 保存设置后,直接点击主界面的
Connect按钮。此时软件会自动控制调试器的 NRST 引脚来复位芯片并建立连接。
固件备份
- 在软件左侧的菜单栏中,点击
Memory & File editing(内存和文件编辑)图标(通常是一个类似内存条的图标)。 - 在右侧弹出的界面中,确保
Memory选项卡被选中。 - 设置读取参数 :
- Address(起始地址) :STM32 内部 Flash 的起始地址通常是
0x08000000。 - Size(读取大小) :输入你想要备份的字节数。如果你不确定固件实际有多大,可以直接输入芯片的 Flash 总容量(例如 STM32WLE5CC 的 Flash 是 256KB,即
0x40000字节;或者直接在 Size 框里输入十进制的262144)。
- Address(起始地址) :STM32 内部 Flash 的起始地址通常是
- 点击
Read按钮。此时,软件会将芯片 Flash 中的数据读取出来,并在下方的十六进制编辑器中显示。 - 点击界面上方的
Save as(另存为)按钮。 - 在弹出的保存窗口中,选择保存路径,文件类型选择
Binary,并将其命名为例如firmware_backup.bin,点击保存即可。
注意备份选项字节(Option Bytes)
- 在左侧菜单栏点击
OB(Option Bytes)图标。 - 界面会加载出当前芯片的各项配置(如 RDP 等级、BOR 等级、用户配置字节等)。
- 手动记录 或截图保存 这些配置。如果以后需要克隆芯片,烧录完
.bin后,需要在这里把参数改成一模一样的并点击Apply写入。
还原选项字节(Option Bytes)
先把芯片的"底层配置"恢复回去,这样能确保烧录固件时的运行环境(如启动模式、看门狗、读写保护等)与之前完全一致。
- 在软件左侧菜单栏点击
OB(Option Bytes)图标。 - 对照你之前截图或记录的配置 ,在界面上将各项参数(如 RDP 等级、BOR 等级、用户配置等)修改为备份时的状态。
- 小技巧 :如果你当时使用了
-ob displ命令备份了配置代码,可以直接在Erasing & Programming界面的Automatic Mode(自动化模式)下的Option bytes commands输入框中,粘贴那行命令(例如-ob rdp=0xAA bor_lel=0...),点击运行即可一键还原。
- 小技巧 :如果你当时使用了
- 修改完成后,点击界面右上角的
Apply按钮。 - 重要提醒 :选项字节写入后,建议手动给板子断电再重新上电(或按一下复位键),让新的配置彻底生效。
还原/烧录固件
配置环境就绪后,就可以把备份的程序代码写回芯片了。
- 在左侧菜单栏点击
Erasing & Programming(擦除与编程)图标。 - 在右侧界面进行如下设置:
- File path :点击
Browse,选择你之前备份的固件文件(.bin或.hex)。 - Start address :如果是
.hex文件,地址会自动识别;如果是.bin文件,务必手动填入起始地址0x08000000。 - 勾选擦除与验证 :建议勾选
Full chip erase(整片擦除,确保没有旧数据干扰)和Verify programming(编程后校验,确保烧录万无一失)。
- File path :点击
- 点击
Start Programming按钮。 - 等待进度条走完,当下方 Log 窗口显示 "File download complete" 和 "Download verified successfully" 时,说明固件已成功还原。
J-Flash
https://www.segger.com/downloads/jlink/
J-Flash 是德国 SEGGER 公司开发的一款专业级 Flash 编程与固件烧录工具,作为 J-Link 调试器配套软件包(J-Link Software and Documentation Pack)的一部分发布,广泛应用于 ARM Cortex-M 系列 MCU 的研发调试和量产烧录场景
烧录
Target → Select Target选择芯片型号Target → Connect连接芯片File → Open data file加载固件Target → Program & Verify开始烧录
固件备份
- 创建工程 :打开 J-Flash,点击菜单栏的
File->New Project。在弹出的设备选择框中,厂商(Manufacturer)选择STMicroelectronics,设备(Device)找到并选择你的芯片型号STM32F407ZGT6,点击 OK。 - 连接目标板 :点击菜单栏的
Target->Connect(或直接按快捷键F2)。如果连接成功,软件底部的日志窗口会提示 "Connected",并显示出芯片的 Flash 大小、内核等信息。 - 读取并保存固件 :
- 点击菜单栏的
Target->Read back->Entire chip(读取整个芯片的 Flash 内容)。 - 读取完成后,点击
File->Save data file as...。 - 在保存类型中,建议选择 Intel Hex (*.hex) 格式(自带地址信息,兼容性最好),或者 Binary (*.bin) 格式(纯二进制数据)。
- 点击菜单栏的
字节选项
- 在 J-Flash 主界面下方的地址输入框中,输入选项字节的起始地址(不同芯片地址不同):
- STM32F1/F2/F4 系列 :
0x1FFFF800或0x1FFFC000 - GD32 系列 :
0x1FFFF800
- STM32F1/F2/F4 系列 :
- 按回车后,内存窗口会显示选项字节内容(通常 16 字节)
- 手动记录或通过
File→Save data file as...保存该地址范围的数据