
1. Jlink到底是什么烧录、仿真、调试一个不落做嵌入式开发尤其是单片机这一行绕不开两件事一是把代码写出来二是把代码跑起来。而“把代码跑起来”之前的最后一公里就是烧录。烧录这个词听起来有点古老但本质就是把编译好的固件文件一般是hex或bin通过某种方式写进芯片的Flash里。早期玩51单片机大家用串口下载线、USB转TTL后来玩STM32更多人开始接触Jlink。Jlink是德国Segger公司出的一套调试烧录工具它最核心的价值就俩字连接。通过JTAG或SWD协议把电脑上的开发环境比如Keil、IAR和芯片内部打通让你能把程序烧进去能单步调试看变量还能在运行时读取寄存器。说人话就是没有Jlink你可能只能把程序“扔”进芯片里跑结果对不对全靠猜有了Jlink你能扒开芯片的“脑壳”看它执行到哪一步、卡在哪个循环、变量变成多少。这篇博文适合谁如果你正在用Keil5配合STM32写程序烧录时总报错或者你连SWD接口线都不会接搞不清SWDIO和SWCLK有什么区别或者你手头有一个Jlink但不知道怎么更新驱动、怎么和Keil版本匹配——那这篇文章就是给你写的。哪怕你是刚接触单片机的学生我也尽量不堆术语争取让你照着操作就能把程序烧进去。先说一个很多人都会误解的点Jlink不只是“下载器”。它还有一个很重要的功能是仿真调试。所谓仿真就是让CPU停下来看你程序的执行状态比如设置断点、单步运行、查看全局变量。没有调试器的开发者写代码就像蒙着眼睛走路有了调试器你至少能拿根棍子在前头探路。所以这类工具的全称叫“烧录仿真工具”而不是简单的“烧录器”。1.1 JTAG和SWDJlink支持的两种连接协议Jlink通过两种协议和目标芯片通信JTAG和SWD。JTAG是古早的老人了历史很长占用引脚多——一般需要TMS、TCK、TDI、TDO四根信号线再加上电源和地就是六根。好处是通用性强很多芯片、CPLD、FPGA都认它还能支持链式多设备。坏处是引脚紧张时你很想骂人因为有些MCU本身引脚就少你再占四根做调试功能模块都快没地方接了。SWDSerial Wire Debug是ARM自家推的轻量级调试接口只需要两根线SWDIO数据和SWCLK时钟再加一个GND就能工作。这就非常香了省引脚、接线简单、速度也不慢。STM32全系列基本都支持SWD所以现在玩ARM芯片绝大多数人都是走SWD。这里要说明一下很多第三方兼容Jlink的把SWDIO标成DIOSWCLK标成CLK甚至还有标成DATA和CLOCK的接线时要认准芯片那一侧的引脚定义别被丝印带偏了。1.2 Jlink能干的活比你想象的多很多人以为Jlink就是烧程序用其实它的功能拆开来看可以列一长串Flash烧录把hex、bin、mot等格式的固件写入芯片内部Flash或外部SPI Flash在线调试配合IDE实现断点、单步、查看变量、反汇编等调试手段RTTReal Time Transfer一种轻量级日志输出方式用SWD接口就能把printf重定向到电脑不占用串口虚拟串口部分Jlink型号比如J-Link PLUS支持将调试接口虚拟成一个COM口省掉USB转TTLJFlash独立烧录不开IDE直接用Segger的JFlash软件批量烧录固件产线用得非常多命令行烧录通过JLink.exe脚本方式实现自动化烧录适合集成到生产测试流程里不过要注意不同的Jlink版本、不同的授权等级功能会有差异。很多便宜的“兼容版”阉割掉了RTT甚至虚拟串口或者固件升级后就“变砖”。买之前要先想清楚自己是只烧录还是也要调试如果只是烧录几十块的ST-Link其实也够用但如果做正经开发调试一个正版Jlink的价值还是体现在稳定和功能完整上。2. 驱动安装与版本匹配最容易翻车的第一关很多人拿到Jlink后做的第一件事是插上USB然后就傻眼了——电脑提示“无法识别的USB设备”或者设备管理器里出现一个黄色感叹号。别急着退货先看看驱动装了没有。Jlink的驱动不像普通USB转串口那样Windows自带必须从Segger官网下载。我去官网的次数很多路径是segger.com找到“Downloads”页面在里面挑对应操作系统的J-Link Software Pack。这个安装包不是单纯的驱动它里面包含了USB驱动、JLink Commander、JFlash、RTT Viewer、GDB Server等一系列工具。2.1 Jlink驱动安装完整步骤驱动安装其实没什么技术含量但有几个小细节容易出问题。我给一个我自己反复用过的流程第一步去Segger官网下载最新的J-Link Software Pack文件名类似“JLink_Windows_V796e.exe”这个数字越大版本越新。如果公司网络访问外网费劲国内一些半导体厂商的论坛、博客也会放历史版本但尽量用官方版本避免安全风险。第二步安装时尽量用默认路径不要改盘符改目录。因为后续Keil、IAR会按默认安装路径去找Jlink的动态库“JLinkARM.dll”你装到奇奇怪怪的位置后面IDE找不到就得手动复制DLL很麻烦。第三步插上Jlink电脑会提示安装驱动。如果没自动弹出来到设备管理器里找到带感叹号的设备右键更新驱动手动指向刚才安装目录下的驱动文件夹。其实新版Segger安装包会自动把驱动注册好但有时候Windows的驱动签名策略会拦住它这时候可以试试设备管理器里卸载设备勾选“删除驱动程序软件”然后重新插拔。安装完成后怎么确认驱动正常打开设备管理器能看到一个“J-Link”相关的设备名称通常带版本号比如“J-Link V10”之类。更稳妥的做法是打开Segger安装目录里的“JLink.exe”也就是JLink Commander它会显示连接的Jlink型号、固件版本、支持的接口等。如果这里能正常显示说明驱动和硬件都OK。2.2 版本匹配问题jlink v5.10h device selection报错很多人烧录失败不是硬件问题而是驱动装好了、Keil却报一个莫名其妙的错。最常见的一句话长这样“Error: J-Link V5.10h device selection is not supported in this version of Keil”这个报错的含义是你的Keil版本太老它内置的Jlink ARM DLL版本跟不上你这颗Jlink固件版本。Keil软件并不能“直接用”Jlink它是通过一个叫JLinkARM.dll的中间动态库来和Jlink硬件通信的。Keil自带了一个JLinkARM.dll但版本往往是它发布时固定好的旧版。而新买的Jlink固件比较新接口协议变了旧DLL就没办法匹配。解决办法有两个方向。方向一更新Keil的DLL。可以去Segger官网下载“J-Link DLL Updater”安装后它会自动把新版JLinkARM.dll替换掉Keil安装目录下的旧版。这里有一个安全提示替换前先备份原来的DLL文件万一新版DLL有兼容性问题还能换回去。方向二直接用Segger自带的DLL文件覆盖到Keil目录下。安装完J-Link Software Pack后在安装目录里能找到JLinkARM.dll把它复制到Keil的ARM目录一般是Keil_v5/ARM/Segger覆盖同名文件。我实测下来这种做法比Updater更直观毕竟DLL文件就在面前心里踏实。但要注意覆盖DLL之后Keil里的Jlink型号列表和旧硬件之间也可能出现兼容性问题。比如老版Jlink V8新版DLL已经不再支持它的固件升级了用V8的朋友只能匹配旧版DLL。这块确实是历史遗留的大坑如果碰到了我建议老老实实按自己的Jlink硬件型号去找匹配版本的驱动和DLL别一味的追求最新。2.3 固件升级与“克隆版锁死”的坑Jlink有个特性连接电脑后可以升级固件。Segger官方会不定期更新固件修复bug、增加对新芯片的支持。正版Jlink升级固件没有任何顾虑但很多淘宝几十块买的“兼容Jlink”用的是反向破解方案升级固件后极容易变成“假砖”——表现为插上电脑灯不亮、设备管理器不识别、Keil也不认。我的建议是如果你用的是兼容版Jlink绝对不要点击固件升级。无论是Keil弹出来的升级提示还是JLink Commander里出现的“Update Firmware”一律点No或者Cancel。顺手把安装目录下的“J-Link”相关设置里自动更新检查也关掉免得哪天手滑点了Yes第二天就开始怀疑人生。这里也说一句掏心窝的话兼容版Jlink用于学习、个人DIY项目完全够用我最早也是这么入门的。但如果你要量产、做产品测试哪怕买一个入门级正版Jlink EDU版本都比顶着兼容版的随机性风险强。因为产线烧录最怕的就是工具突然罢工一停就是整条线的工时损失。3. SWD接口定义与接线连线正确比什么都重要烧录失败的原因里至少有三分之一根本不是软件问题而是接线错了。Jlink的接口看起来就几根线但搞错一根轻则连不上重则烧坏芯片。所以我在这一节把SWD接口的定义掰开了讲透。3.1 标准SWD引脚定义与Jlink引脚对应Segger Jlink的引脚定义遵循一个常见的20Pin标准接口也有10Pin、9Pin等变体但我们用SWD时实际上只需要关注几个关键引脚Jlink引脚编号信号名作用说明1VTref目标板参考电压用于检测目标板供电状态7SWDIOTMS数据输入输出双向数据线9SWCLKTCK时钟信号由Jlink输出给目标芯片3/5GND地线必须和目标板共地4/6SWO/TDI/TDO等扩展功能一般调试不需要这里特别强调VTref这一脚。Jlink会通过VTref来判断目标板有没有上电、参考电平是多少。很多Jlink接口上这一脚接到了3.3V如果你的目标板是5V供电那么这一脚应该接5V如果目标板是3.3V就接3.3V。有些兼容版Jlink干脆不管这一脚只接GND也能用但我不建议省掉因为Vtref是Jlink内部电平判断的重要依据。常见的接线组合就是四根线SWDIO、SWCLK、GND、VTref。只要能把这四个对应对了90%的板子都能连上。有些板子设计得很省事直接把SWD接口做成4Pin排针只引出SWDIO、SWCLK、GND、3.3V那就不需要外部供电了直接用Jlink的供电能力。3.2 目标板供电方式与Jlink的“参考电压”逻辑接SWD线之前先搞清楚一个问题目标板是不是独立供电如果目标板已经通过USB、电源适配器、调试接口等方式单独供电那么Jlink只需要接SWDIO、SWCLK、GND外加VTref引到板子的主电源轨。这时候VTref的作用就是告诉Jlink“板子现在是3.3V你的IO电平应该匹配3.3V”。如果目标板没有独立供电想靠Jlink供电那就得额外接一根线从Jlink的VTref/VCC引脚引到目标板的电源引脚。不过我要提醒一句Jlink USB口的供电能力很弱电流顶多几百毫安带动一片STM32空载跑没问题但如果你的板子上有其他外设、传感器、灯珠很容易电压被拉垮导致芯片复位、烧录中途失败。保险的做法是目标板尽量独立供电Jlink只作为调试工具不承担供电任务。还有一个很容易被忽视的细节如果你同时接了Jlink供电和目标板USB供电两者电压有细微差比如Jlink出3.3VUSB出3.29V可能导致电源从Jlink倒灌到USB口轻则电压跌落重则烧毁USB口。所以接线前建议用万用表量一下电压两个源的压差别超过0.1V。3.3 用杜邦线连接时出现的诡异故障初学者喜欢用杜邦线连接Jlink和目标板因为方便快捷。但杜邦线的质量参差不齐有几种典型故障我碰到过很多次接触不良。杜邦线插在排针上看起来紧了实际虚接。特别是SWCLK线松了会表现为“有时能识别有时不能”。排查方法很简单用手轻轻拽一拽每根线看设备管理器或者JLink Commander里的连接状态是否变化。线序搞反。有些板子的SWD接口丝印印得不清不楚或者根本没有丝印就很容易把SWDIO和SWCLK接反。一旦接反Jlink会报告“Cannot connect to target”或者卡在初始化阶段。识别方法仔细看板子原理图、用户手册或者PCB背面丝印不要靠猜。线太长导致信号变形。SWCLK是一个高频时钟信号杜邦线如果拉到15厘米以上信号完整性问题就开始显现。表现为频率调低能连上调高就连不上或者烧录到一半失败。我自己调试时习惯把杜邦线控制在10厘米以内能短则短。如果你必须把线拉长比如夹具离得远那就把SWCLK速率在Keil里调低。4. Keil5结合Jlink烧录从配置到下载全流程Jlink的使用场景里Keil5是最常见的搭档。尤其是STM32开发KeilJlink的组合几乎成了教科书级搭配。这一节我讲完整烧录流程从工程配置到下板子一步不落。4.1 Keil5的Debug设置与Utilities设置Keil5里和烧录相关的设置散落在两处Options for Target的“Debug”选项卡和“Utilities”选项卡。先看Debug选项卡右上角选择“Use”下拉框里选“J-LINK/J-LINK TRACE”如果下拉框里是灰色的或者找不到多半是DLL版本问题回去看第2节点旁边的“Settings”弹出Jlink调试设置窗口在“Debug”页里能看到连接的Jlink设备信息、接口类型SW或JTAG、最大时钟等这里我要多说一句Debug选项卡里的“Download to Flash”选项要勾选。否则Keil只调试不烧录程序下载后断电就没了。它的勾选框就在Settings窗口的下方或者Debug页的“Download Options”里具体位置跟Keil版本有关找一下就能看到。再看Utilities选项卡同样选“Use”下拉框选“J-LINK/J-LINK TRACE”点“Settings”有一个“Flash Download”按钮点进去是烧录算法选择界面这里要添加对应芯片的烧录算法比如STM32F103C8T6对应的是“STM32F10x Flash”算法很多人把Debug和Utilities搞混以为只设置了Debug就行。其实如果你用的是“LOAD”按钮下载Keil会先通过Debug配置去连接调试器再通过Utilities配置去执行Flash擦除和编程。两个设置都正确才能保证下载顺畅。4.2 Flash Download里的关键参数烧录算法、擦除方式Utilities设置里的“Flash Download”窗口是烧录的核心里面有几个选项值得掰扯Programming Algorithm烧录算法这其实是Keil用来操作芯片内部Flash的一段小程序。不同芯片Flash操作逻辑不一样所以必须选对。选错了典型报错是“No Algorithm found for address range”或者说“Flash Download failed - Could not load file ‘xxx.FLM’”。解决办法就是打开这个下拉框选对芯片型号对应的FLM文件。Erase Full Chip vs Erase Sectors一个是整片擦除一个是按扇区擦除。量产或调试初期选Erase Full Chip最省心虽然时间长一点但能避免“上次烧的程序残留占用空间导致这次写入失败”的问题。日常调试追求快选Erase Sectors只擦会写入的扇区。我建议每次大版本更新时用Full Chip平时小改动用Sectors。Programming vs VerifyProgram就是写入Verify就是写完后再读出来检查一遍。这个一定要勾选Verify因为调试时最怕“烧进去了但实际数据不对”后面运行异常时你都不知道是代码问题还是烧录问题。多花几秒钟的校验时间能省几个小时的排查时间。4.3 烧录过程全解擦除—编程—校验“三步曲”当你点下Keil里的“LOAD”按钮后实际发生的事比你想的要多得多首先是复位并停止CPU。Jlink通过SWD接口把一个复位信号给到芯片让它停在执行任何程序之前的初始状态防止芯片上正在跑的程序干扰Flash的操作。然后是擦除Flash。Keil调用你选择的烧录算法把芯片内部Flash里旧内容清空。这一步如果是在片子上已经跑着程序的情况下进行最好不要断电否则容易出现“只擦了一半”的尴尬局面重启后芯片变成半砖或全砖。接着是写入固件。把编译好的hex文件数据按照地址逐块写入Flash。Jlink会通过SWCLK时钟逐位移入数据芯片内部的Flash控制器负责真正的编程动作。写入速度取决于SWCLK的时钟频率以及Flash编程算法本身。最后是校验。固件写完Jlink将Flash里的数据重新读一遍和电脑里的目标文件进行比较。如果全部一致Keil会显示“Application running”之类的内容同时自动复位并运行目标程序。整个流程通常在几秒钟内完成。如果中途报错绝大多数卡在“擦除”或“写入”环节这时候不用慌按第5章的排查顺序走就行。4.4 Keil5烧录失败典型报错一览把我在社区和实际项目中见到的高频报错整理成一个速查表报错内容可能原因解决方向Cannot access target连接线错、目标板没供电、芯片锁死检查SWDIO/SWCLK/GND接线适当降低SWCLK频率检查芯片是否被读保护Flash Download failed - “Cortex-M3”烧录算法没选对或没添加在Utilities里添加对应芯片型号的FLMFlash Timeout Reset目标板供电不稳、Flash算法与芯片不匹配给目标板独立供电换正确的FLM算法No ULINK/ME Device Found调试器选择错误Debug选项卡里改成J-LINKRDDI-DAP Error调试器DLL与Keil版本冲突更新或回退JLinkARM.dllJ-Link V5.10h device selection not supportedKeil自带DLL太旧替换新版JLinkARM.dll或使用DLL Updater碰到这些报错我的经验是先看接线再看供电最后才怀疑软件。因为软件问题往往有更明确的报错文本电脑硬件或接线问题反而容易伪装成各种“Error”。5. SWD不识别与连接失败实战排查思路这一节是给“卡在连接阶段”的朋友准备的。你程序写得好好的编译也通过了结果点下载Jlink提示连不上目标芯片这时候最容易让人抓狂。我按实战顺序给你列一套排查套路。5.1 SWD不识别的最常见原因与排查顺序先说你最该怀疑的三件事一、目标板没电。这是新手第一坑。Jlink接上了电脑也识别Jlink了但目标板根本没上电VTref检测不到电压自然连不上芯片。排查万用表量目标板电源引脚有没有达到期望电压。如果目标板靠USB供电确认USB线是真的通电了有些USB线只能传数据不能供电。二、SWDIO和SWCLK接反。我上面说过这是第二高频问题。接反的典型表现Jlink能识别自身但初始化SWD时序后无法收到芯片的IDCODE。注意STM32芯片如果有正常工作SWD接口在复位释放后会返回一个IDCODE比如0x1BA01477不同型号有差异。如果读不到IDCODE大概率就是线序错了。三、芯片被读保护或锁死。STM32如果之前被写入过读保护RDP级别1甚至级别2SWD接口会被禁止。级别1还能通过整片擦除解除级别2基本就是永久锁死只能换芯片。这种场景多发生在调试时误写选项字节或者芯片程序里故意开了RDP。排查方式用ST-Link Utility或者JLink Commander尝试连接看是否报“target is secured”“RDP level”之类。如果以上三个都没问题再往下走降低SWCLK频率。重点是Jlink默认SWCLK速率可能太高连接到某些板上会因为干扰连不上。在Keil的Settings里把Max Clock从默认的几MHz降到100kHz左右再试。我遇到过一个极端案例一块电磁环境很差的板子用4MHz怎么也连不上降到100kHz秒连。频率低了只是慢不是不能用。检查RESET引脚。SWD协议本身不需要RESET引脚就能连接但当芯片处于低功耗模式或者SWDIO意外被复用为GPIO时外部拉低RESET并初始化连接再释放RESET是一种经典的“救砖”手法。有些Jlink接口支持硬件RESET控制但很多情况下软件控制不了需要手动把RESET引脚拉低再上拉。5.2 一个真实案例S32K148擦除0x400区域后连接不上这个案例是我在一次汽车电子相关的调试中遇到的。有一块NXP S32K148的板子本意是擦除某个Bootloader区域地址0x400附近再烧新程序结果操作完Jlink彻底连不上了。原因分析S32K148内部的Flash控制器有自己的保护机制如果错误地擦除了包含Flash配置或启动代码的区域芯片复位后可能无法进入正常的SWD调试模式或者Flash控制器进入一种“不可忙”状态。Jlink连接时会尝试读取芯片的Flash配置结果读到的是一堆垃圾初始化就卡死了。当时的解决思路在Jlink Commander里执行“unlock Kinetis”命令也就是通过SWD调试口对芯片做整片擦除。对于NXP的Kinetis系列这个方法非常常用命令格式是unlock Kinetis执行完再尝试连接就能识别到芯片了。需要说明的是这个命令会清空整片Flash你的程序全没了但芯片能活过来。这个案例给我们的教训是不要随便擦除低地址区域的Flash。有些同学在调试Bootloader或Flash算法时会手动用JFlash勾选地址范围擦除一个手误刚好把启动代码、向量表或Flash配置字删了很容易遇到“芯片变砖”的假象。实际上大部分情况下不是硬件坏了而是Flash内容损坏导致调试口无法正常握手。5.3 SWD引脚被复用怎么救回“装死”的芯片还有一种高频事故程序里把SWD引脚PA13/PA14配置成了普通GPIO下载完新程序后调试口就废了。Keil再想连接自然会失败因为芯片跑着自己的程序把连接调试器的“门”给关了。遇到这种情况有几种自救手段方法一按住复位键点下载在芯片刚复位还没跑新程序时快速释放Reset。 操作细节是先按住目标板Reset键不放点Keil的LOAD进度条刚开始马上松开Reset。有的板子设计得不好这个窗口期很短得多试几次。原理是芯片复位后默认引脚是SWD功能只要在它跑飞之前让Jlink连上就能趁早把它停住。方法二把Boot0引脚拉高强制从系统存储区启动。STM32的Boot01时芯片启动时跑的是内置Bootloader而不是Flash里的应用程序这样SWD引脚就不会被用户程序占用。Jlink就能正常连上接着把Flash全片擦除再恢复Boot0为0重新烧录正常程序。方法三用JLink Commander加“halt”命令。如果你的Jlink支持硬件复位在命令行里执行connect halt erase原理其实和方法一一样都是在复位后立刻停止CPU执行用户程序然后执行擦除。这三种方法能救回绝大多数“看起来死了”的芯片。如果都不行再考虑用ST-Link或者其它调试器交叉验证排除Jlink自身故障。5.4 烧录过程中的异常断电教训与应对我在群里见过太多因为烧录中途拔线、断电导致的“砖机”案例。给大家一个非常朴素的提醒烧录过程不要断电不要拔USB线不要碰目标板电源。为什么烧录中途断电危害大因为Flash编程是“先擦后写”擦除操作是把大量块位从1翻成0。如果擦除到一半断电这部分Flash处于“空”的状态虽然没有数据但设备上电后没有有效程序表现就是一片空白。更糟的是如果芯片的Flash配置或加密位正好在这一段恢复的难度会陡增。应对异常断电的办法说起来就一条养成先备份再烧录的习惯。在JFlash里有一个“Backup”功能可以先读出芯片现有Flash内容存成bin/hex文件。这样哪怕烧录失败、固件丢了你还能把备份内容烧回去至少恢复到“烧录前”的状态。备份文件虽然占不了多少空间但关键时刻能救命。6. 进阶玩法与扩展Jlink不只是Keil的配角讲完基础用法再聊几个Jlink常见的进阶玩法。这些内容未必每个人都会用到但知道了以后遇到产线烧录、批量生产、自动化测试这些场景时你会有更多工具可用。6.1 JFlash独立烧录固件Jlink本身配套的JFlash软件是专门用于独立烧录的工具。它的好处是不需要打开IDE直接加载hex/bin文件点击Program就烧。产线上常用的流程是打开JFlash创建一个Project选择目标芯片型号通过“Data File”加载固件文件连接Jlink确认芯片已识别点“Program Device”JFlash里的一个重要概念是“Project”。它会记住你选了哪颗芯片、用什么接口、加载过哪个固件下次打开直接调用。产线换不同板子时切换Project就能换对应的固件和配置比每次从头设置强得多。需要注意的一点是JFlash执行Production Programming时默认会执行“整片擦除 → 编程 → 校验”安全但速度慢。如果你的产线追求效率可以把擦除方式改成“按需擦除”或者把校验关掉——但我个人强烈不建议关校验烧录错误是产品质量红线校验不过就是在帮产线排雷。6.2 用JLink命令行实现自动化烧录除了图形界面Jlink还提供了命令行工具JLink.exe可以在脚本里实现全自动烧录。我在这里给一个简单的示例脚本device STM32F103C8 si SWD speed 4000 connect loadfile firmware.hex r g exit这段命令的意思是指定芯片型号为STM32F103C8使用SWD接口速度4MHz然后连接芯片加载firmware.hex复位运行退出。在Windows命令行里执行JLink.exe -CommanderScript flash.jlink自动化脚本最适合的应用场景是产线批量烧录或者CI测试流程里在编译完成后自动烧录到测试板。配合Python脚本还可以做更复杂的控制和结果解析。对个人玩家来说它的意义在于“可重复”你写了一个烧录脚本以后每次烧同样的固件不用打开IDE双击一下就好。6.3 RTT调试最轻量的日志输出方案最后聊一个很多人在用了之后真心回不去的小功能RTTReal Time Transfer。它的原理很简单——通过SWD接口在芯片内存里开一块缓冲区域微控制器往这块缓冲写日志Jlink实时把内容显示到电脑的RTT Viewer上。因为不走串口所以不占用UART速度还比串口快得多。使用方式很直接在工程代码里包含Segger官方提供的RTT源码文件在Jlink安装目录的Samples/RTT里然后直接用SEGGER_RTT_printf()代替printf()打开RTT Viewer选择对应的Jlink设备连接后就能实时看到输出。我自己在调试一些时序敏感的代码时特别喜欢用它因为串口在波特率低的时候会拖慢程序执行RTT基本做到零开销。有些实时性要求极高的场景串口printf甚至会导致程序跑飞RTT则几乎没有这种问题。不过要注意RTT需要芯片能正常跑起来才能用如果芯片根本连不上SWDRTT自然也起不了作用。所以RTT更适合代替“串口打印”而不是代替“调试器”。最后说一点个人感受。很多人第一次接触Jlink时觉得它就是一根数据线、一个小盒子没什么技术含量。但真的把这根线用明白——知道它为什么能烧录、为什么有时连不上、怎么救砖、怎么自动化——之后你对嵌入式开发从“代码写好就完事”到“调试、烧录、量产全链路掌控”的理解会上一个台阶。别小看这个不起眼的调试工具它反而可能是你把嵌入式做扎实的重要一课。