惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Help Net Security
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
PCI Perspectives
PCI Perspectives
博客园 - 三生石上(FineUI控件)
V2EX - 技术
V2EX - 技术
Spread Privacy
Spread Privacy
T
Tor Project blog
量子位
阮一峰的网络日志
阮一峰的网络日志
S
SegmentFault 最新的问题
小众软件
小众软件
博客园 - 叶小钗
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
Y
Y Combinator Blog
N
News | PayPal Newsroom
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tenable Blog
Scott Helme
Scott Helme
G
GRAHAM CLULEY
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
Schneier on Security
Schneier on Security
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
博客园 - 司徒正美
Application and Cybersecurity Blog
Application and Cybersecurity Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Last Watchdog
The Last Watchdog
L
LangChain Blog
C
Check Point Blog
Google Online Security Blog
Google Online Security Blog
V
Visual Studio Blog
Latest news
Latest news

博客园 - daidaidaiyu

ZooKeepper 一文入门 ThingsBoard 规则链系统源码分析和自定义定时器 一文入门和实践Kafka 一文学习入门 ThingsBoard 开源物联网平台 Claude Code 使用一则 JMS, ActiveMQ 学习一则 Nacos实例一则及其源码环境搭建 一文学习 工作流开发 BPMN、 Flowable 一文学习 Spring 声明式事务源码全流程总结 Spring IOC 源码学习 事务增强相关的对象创建 Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML) GIS 核心知识 Spring IOC 源码学习 声明式事务的入口点 23.行为型 - 访问者模式 (Visitor Pattern) 一文学习 Spring AOP 源码全过程 22.行为型 - 迭代器模式 (Iterator Pattern) 21.行为型 - 状态模式 (State Pattern) Netty 核心知识 SpringCloud 微服务实现一则 (Eureka + Hystrix) 20.行为型 - 责任链模式(ChainofResponsibility Pattern) Modbus 协议 学习一则 - daidaidaiyu 19.行为型 - 策略模式(Strategy Pattern) - daidaidaiyu Redis 学习一则 - daidaidaiyu Android NDK 开发一则 - daidaidaiyu
嵌入式开发入门知识
daidaidaiyu · 2026-06-02 · via 博客园 - daidaidaiyu

嵌入式开发入门知识

有用的知识

何为单片机?

单片机(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。这个选项能让调试器在芯片处于复位状态时强行建立连接,能有效解决很多因程序跑飞或低功耗模式导致的“无法连接”问题。

串口重定向 (ASSIGN)

注意该命令仅在仿真环境中有效!

KEIL 的 ASSIGN 命令本质上是在软件仿真层面进行了一次“信号劫持”或“虚拟映射”。它会将单片机内部串口(UART/USART)发出的数据,直接通过 J-Link/SWD 调试接口传输到你的电脑屏幕上,从而绕过了物理硬件引脚

在 Keil 仿真器中,单片机的串口被抽象为虚拟通道,通常支持 4 个串口

单片机外设 Keil 虚拟通道 (输入/输出) 常用映射目标
USART1 / UART1 S0IN / S0OUT WIN1COMx
USART2 / UART2 S1IN / S1OUT WIN2COMx
USART3 / UART3 S2IN / S2OUT WIN3COMx
UART4 S3IN / S3OUT WIN4COMx

执行命令

调试模式下 -> View -> Command Window

如果只想在 Keil 内部直接看打印,不需要外接任何工具:

ASSIGN WIN1 <S0IN> S0OUT
  • 把 串口1直接劫持显示在 Keil 的 View -> Serial Windows -> UART #1 窗口中
ASSIGN WIN1 <S3IN> S3OUT

把 MCU 的 UART4 映射到 Keil 的 UART #1 窗口

串口重定向 debug.ini

每次进入调试都要手动敲命令很麻烦,你可以将这些命令写进一个 .ini 配置文件(例如命名为 debug.ini),然后在 Keil 中自动加载:

  1. 新建一个 debug.ini 文本文件,内容如下:
MODE COM2 115200,0,8,1
ASSIGN COM2 <S3IN> S3OUT

在使用 ASSIGN 之前,通常需要先用 MODE 命令设置好电脑端串口的波特率等参数。例如:MODE COM2 115200,0,8,1(设置 COM2 波特率为 115200,无校验位,8位数据,1位停止位)

  1. 在 Keil 中点击“魔法棒” -> Debug 选项卡。

  2. 勾选右侧的 Initialization File,浏览并选中你刚刚创建的 debug.ini 文件。
    这样,以后每次点击 Debug 进入仿真时,Keil 就会自动帮你执行这些映射命令了。

  3. 准备虚拟串口软件:使用如 VSPD (Virtual Serial Port Driver) 等软件,在电脑上创建一对互相连通的虚拟串口(例如创建了 COM2 <-> COM3 这一对)。

    1. 打开串口助手:在你的电脑串口调试助手(如 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 (无需额外硬件)
 int fputc(int ch, FILE *f)
  {
      ITM_SendChar((uint32_t)ch);
      return ch;
  }

如果你的工程中已经包含了 CMSIS 的核心头文件(如 core_cm4.hcore_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 的通讯方式主要有两种:SWDJTAG

通讯方式(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 里设置,让软件自动完成“按住复位烧录”的动作:
  1. 点击 Keil 的魔术棒图标(Options for Target) -> Debug -> Settings
  2. 找到 Connect & Reset Options(连接与复位选项)区域。
  3. Connect 选项改为 Under Resetwith Pre-reset
  4. 点击确定后,再次正常点击烧录,调试器就会自动先拉低复位引脚,阻止错误代码运行,从而顺利烧录新程序。

在实际接线中,真正干活的通常只有以下 4 到 5 根线:

引脚名称 实际作用 注意
GND 共地。提供信号参考基准,消除电平偏差。 最容易被忽视! 如果不接 GND,通信会直接失效或极其不稳定。
SWCLK 时钟线。由 ST-Link 发出节拍,同步所有操作。 接反了或者虚焊,软件会提示“找不到目标设备 (Target not found)”。
SWDIO SWOTDO 数据线。双向传输命令和数据,读写全靠它。 dio 和 clk容易接反!
V_TGT / TVCC 电压检测。仅用于检测目标板是否有电及电平匹配。 严禁当作主供电引脚! 目标板已有独立电源时若强行接入,可能导致电流倒灌烧坏芯片。
NRST / RESET 复位控制。允许 ST-Link 主动重启 MCU。 不接的话,如果程序跑飞或关闭了调试接口,就只能手动按板子上的复位键。

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 类似,是摩托罗拉制定的标准格式,在某些工业领域较为常见。

烧录工具软件

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 因其轻量、简洁的特点,在研发调试和简单烧录场景中仍然被广泛使用。

固件备份

  1. **连接芯片

    • 点击菜单栏 TargetConnect,与 STM32 芯片建立连接
    • 连接成功后,软件界面会显示目标 MCU 的型号、Flash 大小等信息
  2. 读取芯片内存

    • 点击菜单栏 TargetRead Memory
    • 在弹出的窗口中设置读取参数:
      • 起始地址(Start Address):通常为 0x08000000(STM32 Flash 起始地址)
      • 数据长度(Size):根据芯片 Flash 容量填写(如 64KB、128KB、512KB 等)
    • 点击开始读取,软件会将芯片 Flash 内容读出并在内存浏览器中显示
  3. 保存为文件

    • 读取完成后,点击菜单栏 FileSave 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)

  1. 打开 STM32CubeProgrammer,在右上角的连接方式下拉框中选择你的调试器(如 ST-LINKJ-LINK)。
  2. 点击调试器旁边的 齿轮图标(配置/设置按钮)。
  3. 在弹出的设置窗口中,找到 Reset mode(复位模式) 选项。
  4. 将其从默认的 Software system reset 修改为 Hardware resetConnect under reset
  5. 保存设置后,直接点击主界面的 Connect 按钮。此时软件会自动控制调试器的 NRST 引脚来复位芯片并建立连接。

固件备份

  1. 在软件左侧的菜单栏中,点击 Memory & File editing(内存和文件编辑)图标(通常是一个类似内存条的图标)。
  2. 在右侧弹出的界面中,确保 Memory 选项卡被选中。
  3. 设置读取参数
    • Address(起始地址):STM32 内部 Flash 的起始地址通常是 0x08000000
    • Size(读取大小):输入你想要备份的字节数。如果你不确定固件实际有多大,可以直接输入芯片的 Flash 总容量(例如 STM32WLE5CC 的 Flash 是 256KB,即 0x40000 字节;或者直接在 Size 框里输入十进制的 262144)。
  4. 点击 Read 按钮。此时,软件会将芯片 Flash 中的数据读取出来,并在下方的十六进制编辑器中显示。
  5. 点击界面上方的 Save as(另存为)按钮。
  6. 在弹出的保存窗口中,选择保存路径,文件类型选择 Binary,并将其命名为例如 firmware_backup.bin,点击保存即可。

注意备份选项字节(Option Bytes)

  1. 在左侧菜单栏点击 OB(Option Bytes)图标。
  2. 界面会加载出当前芯片的各项配置(如 RDP 等级、BOR 等级、用户配置字节等)。
  3. 手动记录截图保存这些配置。如果以后需要克隆芯片,烧录完 .bin 后,需要在这里把参数改成一模一样的并点击 Apply 写入。

还原选项字节(Option Bytes)

先把芯片的“底层配置”恢复回去,这样能确保烧录固件时的运行环境(如启动模式、看门狗、读写保护等)与之前完全一致。

  1. 在软件左侧菜单栏点击 OB(Option Bytes)图标。
  2. 对照你之前截图或记录的配置,在界面上将各项参数(如 RDP 等级、BOR 等级、用户配置等)修改为备份时的状态。
    • 小技巧:如果你当时使用了 -ob displ 命令备份了配置代码,可以直接在 Erasing & Programming 界面的 Automatic Mode(自动化模式)下的 Option bytes commands 输入框中,粘贴那行命令(例如 -ob rdp=0xAA bor_lel=0...),点击运行即可一键还原。
  3. 修改完成后,点击界面右上角的 Apply 按钮。
  4. 重要提醒:选项字节写入后,建议手动给板子断电再重新上电(或按一下复位键),让新的配置彻底生效。

还原/烧录固件

配置环境就绪后,就可以把备份的程序代码写回芯片了。

  1. 在左侧菜单栏点击 Erasing & Programming(擦除与编程)图标。
  2. 在右侧界面进行如下设置:
    • File path:点击 Browse,选择你之前备份的固件文件(.bin.hex)。
    • Start address:如果是 .hex 文件,地址会自动识别;如果是 .bin 文件,务必手动填入起始地址 0x08000000
    • 勾选擦除与验证:建议勾选 Full chip erase(整片擦除,确保没有旧数据干扰)和 Verify programming(编程后校验,确保烧录万无一失)。
  3. 点击 Start Programming 按钮。
  4. 等待进度条走完,当下方 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 的研发调试和量产烧录场景

烧录

  1. Target → Select Target 选择芯片型号
  2. Target → Connect 连接芯片
  3. File → Open data file 加载固件
  4. Target → Program & Verify 开始烧录

固件备份

  1. 创建工程:打开 J-Flash,点击菜单栏的 File -> New Project。在弹出的设备选择框中,厂商(Manufacturer)选择 STMicroelectronics,设备(Device)找到并选择你的芯片型号 STM32F407ZGT6,点击 OK。
  2. 连接目标板:点击菜单栏的 Target -> Connect(或直接按快捷键 F2)。如果连接成功,软件底部的日志窗口会提示 "Connected",并显示出芯片的 Flash 大小、内核等信息。
  3. 读取并保存固件
    • 点击菜单栏的 Target -> Read back -> Entire chip(读取整个芯片的 Flash 内容)。
    • 读取完成后,点击 File -> Save data file as...
    • 在保存类型中,建议选择 Intel Hex (*.hex) 格式(自带地址信息,兼容性最好),或者 Binary (*.bin) 格式(纯二进制数据)。

字节选项

  1. 在 J-Flash 主界面下方的地址输入框中,输入选项字节的起始地址(不同芯片地址不同):
    • STM32F1/F2/F4 系列0x1FFFF8000x1FFFC000
    • GD32 系列0x1FFFF800
  2. 按回车后,内存窗口会显示选项字节内容(通常 16 字节)
  3. 手动记录或通过 FileSave data file as... 保存该地址范围的数据