玩STM32的人迟早要跟“烧录”这两个字打交道。不管是点亮第一颗LED还是调试复杂的电机控制算法你写好的程序最终都要经过编译、下载这一步才能跑在芯片上。而在所有烧录工具里ST-LINK应该是绝大多数新手接触到的第一个调试器。它便宜、稳定和Keil5配合起来也比较顺手基本属于“出厂标配”级别的存在。但正因为是标配很多人反而忽略了它背后的完整链路。我之前带过不少刚入门的朋友一上来就遇到“No ST-LINK detected”“Flash Download failed”这类报错然后就开始怀疑板子坏了、芯片坏了甚至直接把整个工程删了重建——其实大概率是配置问题或者接线问题几分钟就能搞定。这篇文章我就把ST-LINK烧录的整个流程彻底拆开讲一遍从原理到硬件接线从Keil5配置到问题排查全部按实际操作的顺序来。无论你是刚拿到开发板的新手还是已经被烧录失败折磨了一会儿的“准新手”照着下面一步步来基本能走通。1. 先搞明白烧录是怎么回事再动手配工具1.1 烧录的本质把程序写进芯片的Flash很多人把“烧录”理解成“把程序复制到芯片里”这个说法方向没错但不完整。STM32的程序最终存在芯片内部的Flash存储器里而烧录的本质就是通过调试器ST-LINK把编译好的机器码文件一般是 .hex 或者 .axf通过特定的通信协议写入Flash的指定地址。注意“特定通信协议”这几个字。也就是说ST-LINK和芯片之间是有约定通信方式的不是简单地把两根线接上就能传数据。STM32支持多种调试接口日常开发中用得最多的就是SWDSerial Wire Debug和JTAG。SWD只需要两根线SWDIO、SWCLK加上电源和地就能完成下载和调试JTAG用的线更多功能更全但实际开发中绝大多数场景用SWD就够了。ST-LINK/V2和很多板载ST-LINK默认都支持SWD模式这也是为什么你经常看到四根杜邦线就能完成烧录的原因。理解了这一点你就能明白为什么好多问题会出在“接线没接对”“接触不良”“供电不足”上了——烧录本质上是一次高速的通信线没通、电平不对程序自然写不进去。所以遇到任何烧录失败第一步永远不是怀疑Keil配置而是先确认硬件通路是否正常。1.2 为什么烧录会失败从编译到下载的三个环节要排查问题首先得知道程序的“旅程”分几步。简单来说整个过程分为三段第一段是编译。Keil里的C代码编译后会生成中间文件最终链接成可执行文件。如果编译就报错那根本走不到烧录那一步。第二段是连接。ST-LINK通过USB连到电脑通过SWD接口连到STM32芯片。电脑要能识别ST-LINKST-LINK要能探测到芯片。这一步最容易出问题也是新手的重灾区驱动没装好、USB口供电不足、SWD线序接错、芯片进入了低功耗模式、甚至芯片被“锁死”了都会导致连接失败。第三段是写入。ST-LINK把程序数据通过SWD协议写入Flash同时还会做擦除、校验等操作。如果Flash算法选错、芯片型号选错、芯片保护位被设置都会在这一步报错。所以你会发现排查烧录问题的思路其实是线性的先保证硬件通路再确认驱动识别最后检查软件配置。很多人一上来就乱改Keil设置结果越改越乱就是因为没按照这个递进关系来排查。下面我就按这个顺序把每一步都讲透。2. 硬件和驱动ST-LINK选型、接线、装驱动2.1 先选对你的ST-LINK独立版和板载版ST-LINK目前市面上能见到的形态大致分两类。一类是独立的小盒子最常见的是ST-LINK/V2淘宝上十几块到几十块不等另一类是集成在开发板上的电路比如很多Nucleo板、正点原子/野火的板子板子自带ST-LINK通过USB线连接电脑就能直接烧录。如果你的板子自带ST-LINK那基本不用操心电源和接线问题直接用USB线连电脑即可。如果用的是独立的ST-LINK/V2那就要注意接线了。独立ST-LINK/V2接口一般有SWD和JTAG两排引脚新手只需要盯住SWD那四个脚3.3V、SWDIO、SWCLK、GND。有的ST-LINK还会引出5V引脚但烧录STM32用3.3V就够千万别拿5V去怼芯片的3.3V引脚除非你的板子明确支持5V供电。这里有一个我见过很多次的翻车现场——把5V接到了3.3V引脚上芯片要么直接冒烟要么发热严重直接报废。另外提一句市面上有些号称“ST-LINK”的其实是“V2山寨版”或者“V2克隆版”芯片是第三方仿制的。绝大多数情况下它们也能正常使用但偶尔会出现固件问题导致Keil识别异常。如果你发现某个ST-LINK怎么配置都连不上芯片换一个正品或者换一个型号试试往往是解决问题的捷径。2.2 接线错了能烧毁芯片这事真不是开玩笑接线是新手最容易翻车的地方而且一旦接错轻则烧录失败重则损坏芯片。以STM32F103C8T6这种“网红芯片”为例它常用的SWD引脚是PA13SWDIO和PA14SWCLK。在绝大多数最小系统板和开发板上这两个引脚都会被引出来旁边还有3.3V和GND直接用杜邦线对应接到ST-LINK上就行。这里有几个细节值得注意。第一个是线序。杜邦线的颜色并不统一不要默认“红线就是电源、黑线就是地”。我看过太多人照着别人的图片接结果对方用的线序和自己的不一样白白费了半天时间。最靠谱的做法是拿万用表的通断档测一下ST-LINK引脚上丝印和实际引脚的对应关系确认无误后再接芯片。第二个是接触问题。杜邦线母头用久了容易松动尤其是反复插拔之后会出现“看起来接上了实际上没接通”的假象。如果你遇到烧录时好时坏的情况可以试试按压线头或者换一根新杜邦线很多时候问题就解决了。实在不行直接焊几根线上去一劳永逸。第三个是供电问题。有的ST-LINK/3.3V引脚输出电流有限如果你用它给整个开发板供电而板子上又有传感器、显示屏、舵机等外设可能会导致电压跌落烧录时芯片不稳定。稳妥的做法是开发板用USB或者外部电源供电ST-LINK只负责烧录和调试两边共地即可。共地这个点容易被忽略但如果你的板子供电和ST-LINK的供电不是同一个来源就一定要把GND连起来否则通信电平没有参考基准数据会乱掉。2.3 驱动安装与验证如何判断电脑已经识别ST-LINK硬件接好之后你还需要让电脑认识ST-LINK。大部分ST-LINK都是免驱或者自动安装驱动的但如果你的系统比较老或者用了精简版系统可能就需要手动装一下。去ST官方网站搜索“ST-LINK driver”就能找到官方驱动安装包下载安装后把ST-LINK插到电脑上。这时打开设备管理器在“端口(COM和LPT)”或者“通用串行总线设备”下面应该能看到一个名为“ST-LINK”或者“STM32 ST-LINK”的设备。如果看到的是一个带黄色感叹号或者问号的未知设备那就说明驱动没装好需要手动更新驱动或者重新安装。另外很多人会安装STM32 ST-LINK Utility这个软件。它除了可以烧录程序外还有一个很实用的功能帮你确认ST-LINK是否和芯片正常通信。打开软件点击“Connect to the target”如果能够正常识别到芯片型号和Flash大小就说明硬件链路和驱动都没问题。如果这里都连不上那后面Keil里再怎么折腾也是白搭。我这里多说一句STM32 ST-LINK Utility在“芯片锁死”的场景下几乎是救命稻草。STM32有读写保护机制如果你不小心在选项中开启了读保护那么Keil里烧录会报错但ST-LINK Utility里可以用“Connect under reset”的方式连接然后执行全片擦除把芯片恢复出厂状态。后面我在常见问题部分会再详细讲。3. Keil5里的关键配置一步都不能错3.1 工程配置第一步Debug选项卡里的ST-LINK设置驱动装好、硬件接好之后剩下的战场就在Keil5里了。很多人都知道要配置工程选项魔术棒但不知道每一项具体是干嘛的只会抄别人的截图一旦遇到和自己工程不一样的界面就懵。打开Keil5的“Options for Target”界面切换“Debug”选项卡右下角有个下拉框这里要选择调试器。如果你用ST-LINK就要选“ST-Link Debugger”如果选成了J-LINK或者CMSIS-DAP那ST-LINK当然不会被识别。这里听起来像废话但确实有人因为装了多个调试器驱动之后下拉框被改了还不知道。选好之后点击旁边的“Settings”按钮会弹出一个“Cortex-M Target Driver Setup”窗口。正常情况下“Debug”区域会显示“ST-LINK/V2”并且SW Device区域会列出一个ARM CoreSight SW-DP设备。如果这个窗口里什么都看不到或者显示“No target connected”那就说明ST-LINK没有连到芯片需要回头检查接线和驱动。这个窗口里还有几个参数值得关注。第一个是Max Clock默认可能是4MHz或者更高但如果你的接线比较长或者杜邦线质量一般可以把它降到1MHz试试能显著提高连接稳定性。第二个是接口模式要确保选的是SW模式而不是JTAG因为大多数板子都是按SWD接口引出的。第三个是Port下拉框一般自动识别即可但如果烧录不正常可以手动切换试试。3.2 Flash Download设置算法选不对程序写不进去Debug选项卡配置完成只是第一步真正决定烧录成败的是“Flash Download”这个不起眼的小区域。你选择的芯片型号不同要用的下载算法Programming Algorithm也不同。STM32F103系列一般选“STM32F10x Med-density Flash”STM32F407系列选“STM32F4xx Flash”如果选错了Keil在烧录时会提示找不到匹配的Flash算法直接报错。我见过不少新手工程是从别人那里拷来的Debug那边改成了自己的ST-LINK但Flash Download里的算法还是别人芯片型号的结果烧录怎么都不成功。所以这里一定要确认你的工程Target芯片型号Device选项卡里的芯片型号和Flash算法是匹配的。另外Flash Download区域里还有几个勾选项Erase Full Chip全片擦除、Erase Sectors扇区擦除、Program编程、Verify校验、Reset and Run下载后自动复位运行。新手我建议第一次烧录或者程序变动很大的时候勾选“Erase Full Chip”确保没有残存的数据干扰日常调试时用“Erase Sectors”就行烧录速度更快“Reset and Run”建议勾上烧录完自动运行省去手动按复位键的麻烦。这里的“Verify”选项也建议保持勾选烧录完成后会回读校验程序是否有问题一清二楚。多花几秒钟换一个放心。3.3 Utilities选项卡与复位设置容易被忽略的两处细节“Debug”选项卡核对无误后还要看一眼“Utilities”选项卡。这里上面有一个下拉框默认应该是“ST-Link Debugger”。点击右边的“Settings”按钮会发现里面的界面和之前的Flash Download设置类似。简单来说Utilities选项卡的作用就是告诉Keil“烧录的时候该用哪个工具链”。如果你这里选的是别的调试器或者Settings里的算法不对也会导致烧录异常。再补充一个很多人问到的“Reset and Run”不生效的问题。有时候你明明勾选了Reset and Run但烧录完成后程序并没有跑起来而是停在调试状态或者黑屏。这种情况在部分STM32型号上会出现原因是复位方式选择不对。在Utilities的Settings里有一个“Reset”相关的设置有的芯片选“HW RESET”比较可靠有的选“SYSRESETREQ”更稳定。如果你发现程序没自动运行可以试着切换这里然后重新烧录。还有两个和Keil5相关的“经典玄学”一个是Target选项卡里的XTAL晶振频率置灰。很多人会发现XTAL这一栏是灰色的改不了。这是因为它是由Device选项卡里选择的芯片型号自动决定的所以不需要手动改也不是配置错误。另一个是Keil5装了C51版和MDK版共存时可能出现工程无法编译、限制2K代码的情况。如果你同时装了C51和MDK需要确认你打开的是MDK版而不是C51版否则确实会有2K限制的提示但那不是STM32的问题是工具链选错了。3.4 工程整体检查这几个基础项别等翻车了再回头看在配置完Debug和Utilities之后我强烈建议你顺手检查一下工程的其他几个基础选项因为烧录失败有时候是“上游”问题导致的。第一个是Device选项卡里的芯片型号。如果这里选的芯片和你手里真正用的不是同一个系列比如你用的是STM32F103C8T6但工程里选的是STM32F103RCT6Flash大小、SRAM大小都不同烧录时可能出现地址越界或者算法不匹配的警告严重点直接失败。第二个是Output选项卡里的“Create HEX File”。如果你需要生成.hex文件比如用ST-LINK Utility、J-Flash或者其他工具单独烧录一定要把这里勾上。如果你只是在Keil里直接下载不生成hex其实也能烧录但建议还是勾上方便后续备用。第三个是工程的编译输出。配置完所有设置后先点一下“Build”确保编译通过生成0 Error 0 Warning或者至少0 Error。如果编译都不过后面的一切都是空谈。4. 完整烧录实操从编译到验证一把过4.1 第一次完整烧录按这个顺序来基本不会翻车配置做完之后就到了最畅快的一步把程序烧进芯片。这里我按实际操作顺序复盘一遍完整的流程。先把ST-LINK和开发板接好把ST-LINK插上电脑USB口。然后打开你的Keil5工程先点一下“Rebuild”按钮确保编译通过。接着点一下“LOAD”按钮就是那个向下的红色箭头Keil就会开始连接ST-LINK自动擦除Flash、写入程序、校验数据。如果一切顺利你会在输出窗口看到“Flash Load finished successfully”之类的提示同时开发板上对应的程序开始运行。但很多新手在这一步会遇到一个很奇怪的现象Keil提示烧录成功了程序却没反应。这时候不要慌先检查两个点第一程序是否真的烧录进去了——可以用调试器进入Debug模式在代码里打断点看PC指针是否停在main函数第二程序是否真的“跑”了——如果芯片供电正常、复位引脚正常但程序没反应可能是晶振或者复位电路的问题这个跟烧录关系不大属于硬件问题。这里我要特别提醒一个技巧烧录完成后尽量养成“断开调试器再运行”的习惯。虽然ST-LINK供电情况下程序也能跑但调试器的连接会对芯片的某些引脚状态产生影响尤其是用到SWD引脚做普通IO的时候调试器连接会干扰程序运行。所以最好把USB线拔掉让板子独立供电再观察现象。4.2 烧录文件的选择hex、axf与bin的区别很多项目要求你提交一个烧录文件而不是让最终用户安装Keil和ST-LINK去烧录。这时候就需要理解烧录文件的区别了。在Keil5编译的Output文件夹里你会看到一堆文件.axf、.hex、.bin等。其中.axf是Keil调试和下载用的主力格式它包含了调试符号信息Keil直接用它烧录和调试.hex是Intel HEX格式的文本文件把地址和数据都编码成了ASCII字符是单片机领域最通用的烧录格式之一ST-LINK Utility、J-Flash、各种串口下载工具都支持.bin是纯二进制文件没有任何地址信息烧录时必须指定起始地址一般用于OTA升级或者做BootLoader时使用。日常自己玩用Keil直接下载就行如果要把程序发给别人量产或者远程升级一般给.hex文件。对于STM32F103这种从0x08000000地址启动的芯片.hex文件里已经包含了地址信息直接下就行。如果你用STM32 ST-LINK Utility烧录点“Open file”选择.hex再点“Program verify”就能完成烧录。4.3 用定时器做一个最简单的验证程序理论说再多不如实际跑一段代码。这里我以STM32F103系列为例写一个最简单的定时器翻转程序用来验证你的烧录链路是否完全正常。这个程序用TIM2产生中断在中断里翻转PC13引脚的电平如果你用正点原子或者野火的板子板载LED一般连在PC13或者PB0/PB1请根据实际原理图调整。#include stm32f10x.h void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) ! RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); GPIO_WriteBit(GPIOC, GPIO_Pin_13, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13))); } } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_2MHz; GPIO_Init(GPIOC, GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period 999; TIM_TimeBaseStructure.TIM_Prescaler 7199; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2, ENABLE); NVIC_InitStructure.NVIC_IRQChannel TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority 0; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure); while (1); }这段代码的逻辑很朴素72MHz系统时钟TIM2时钟来自APB1在系统时钟72MHz时APB1最大是36MHz但TIM2的时钟是APB1的两倍即72MHz分频数71991等于7200所以计数频率是10kHz自动重装值9991等于1000这样就得到了10Hz的中断频率即LED每秒翻转10次。如果你把这两个参数配好烧录成功后LED应该以肉眼可见的频率闪烁大约每秒闪5个完整周期。这里也顺便回应一下热搜词“STM32测频法”和“STM32定时器”定时器中断只是最基础的用法但烧录链路是否正常用这个例子来验证非常直观。如果你的LED在烧录后正常闪烁说明从编译、下载、复位到程序运行整条链路完全打通了。5. 常见问题速查这些坑我基本都踩过5.1 常见问题与解决思路一览烧录问题翻来覆去就那么几类我整理了一个速查表基本上覆盖了99%的新手场景现象可能原因排查方向Keil提示No ST-LINK detectedUSB线问题、驱动没装好、ST-LINK本身坏了换USB口、重装驱动、用ST-LINK Utility确认能否识别Keil能识别ST-LINK但找不到芯片SWD接线错误、芯片供电异常、芯片处于低功耗/锁死状态检查接线和供电、尝试Connect under Reset、全片擦除烧录报Flash Download failedFlash算法选错、芯片型号不匹配、芯片Flash保护核对Flash算法与芯片型号、在Utility里执行全片擦除烧录成功但程序不运行Reset and Run未勾选、复位电路异常、晶振没起振手动按复位键、勾选Reset and Run、检查RST引脚和外部晶振烧录速度很慢SWD时钟频率过高、杜邦线太长/质量差在Debug设置里把Max Clock降到1MHz换了电脑后烧录失败新电脑缺驱动、Keil工程里的调试器配置被重置重新安装ST-LINK驱动、检查Debug选项卡是否还是ST-Link Debugger提示RDDI-DAP Error接线不良、目标芯片供电不足、调试口被程序占用检查接线、单独给板子供电、将BOOT0拉高后重新上电连接提示Cannot access target芯片读保护开启、SWD引脚被复用用ST-LINK Utility执行Connect under Reset并全片擦除这张表里的场景绝大多数我都实际遇到过。尤其是“RDDI-DAP Error”和“Cannot access target”这两个报错在刚接触STM32时特别吓人看着像是芯片变砖了其实大部分情况下只是接线不良或者芯片读保护开了。5.2 芯片锁死也不怕ST-LINK Utility救砖实操这里单独把“芯片锁死”拿出来讲一下因为太多人在这里被吓到了。STM32有Flash读保护机制如果你用过STM32CubeProgrammer或者ST-LINK Utility的选项字节功能不小心把读保护级别从Level 0切到了Level 1那么芯片的Flash就无法通过调试器正常读写Keil烧录时会报“Cannot access target”或者类似错误。很多人的第一反应是“完了芯片报废了”其实不是。STM32在Level 1读保护下可以通过一种特殊方式解除把BOOT0引脚拉高然后复位芯片让芯片从System Memory启动Bootloader模式然后再用ST-LINK连接执行全片擦除。全片擦除之后读保护级别会自动降回Level 0芯片就恢复正常了。如果你用带板载ST-LINK的开发板一般板子上都有一个BOOT0跳线帽或者按键操作起来非常方便。这个操作用STM32 ST-LINK Utility来完成最方便打开软件按住芯片的复位键或者拉BOOT0到高电平后重新上电点击“Connect under Reset”软件连接到芯片后选择“Target”菜单下的“Erase Chip”等进度条跑完芯片就解锁了。之后回到Keil你会发现烧录又正常了。5.3 几个容易忽略的“隐性”问题除了上面这些好识别的报错还有一些问题不会报错但会给你添乱。一个是供电问题。有些USB口供电能力弱尤其是台式机前置USB口或者老笔记本的USB口插上ST-LINK后电压不足导致烧录时好时坏。这时候换一个后置USB口或者用带供电的USB HUB往往能解决。还有一个更隐蔽的问题如果开发板和ST-LINK由两个不同的USB口供电但两边地没连在一起也会导致通信不稳定。所以要么用同一个USB口供电要么确保共地。另一个问题是Keil5的版本和芯片支持包Device Pack版本不匹配。有时候你从网上下载的工程用了老版本的芯片库而你当前的Keil5版本太高或者芯片支持包没装全会导致工程编译时报一堆找不到头文件的错误。这种情况不是烧录本身的问题但确实会卡住你烧录前的最后一步。建议安装Keil5时就一次性装好对应芯片厂商的DFP包Device Family Pack比如STM32F1系列的“Keil.STM32F1xx_DFP”。再提一个和“J-Link”有关的小坑。有些开发板默认是给J-Link使用的或者板载调试器是CMSIS-DAP你非要用ST-LINK去连发现怎么也连不上。这时候先看板子上的调试器是什么型号再选择对应的驱动和Keil配置不要认准ST-LINK就不撒手。J-Link烧录STM32的流程和ST-LINK类似只是在Keil的Debug选项卡里选“J-LINK/J-TRACE Cortex”其他配置思路基本一致。5.4 烧录成功后的调试小技巧最后再分享几个烧录成功之后实际调试会用到的小技巧。第一个是善用Keil的Debug功能。很多人烧录成功就关掉Keil直接看在板子上的现象。但如果程序行为不符合预期更高效的方式是进入Debug模式在全速运行前打断点或者利用Watch窗口查看变量的实时值。STM32的调试功能很强大内置的SWVSerial Wire Viewer可以直接通过SWDIO引脚输出printf信息不需要额外的串口线。不过要启用SWV功能你需要把Debug选项卡里的设置改成“Trace”模式并且把系统时钟频率填对否则打印出来的波特率是乱的。第二个是学会使用逻辑分析仪或者示波器验证时序。程序烧录成功之后如果你想确认PWM波形、串口波形是否正常直接用逻辑分析仪抓一下引脚电平。很多便宜的USB逻辑分析仪就够用不必一开始就上几千块的示波器。这个习惯能帮你把“程序烧进去了”和“程序功能正确”这两件事区分开排查效率会高很多。第三个是注意SWD引脚被复用的问题。如果你在代码里把PA13或PA14配置成了普通GPIO或者开启了JTAG/SWD的禁用设置那么下次烧录时ST-LINK就找不到芯片了。解决办法是用前面提到的“Connect under Reset”方式连接或者把BOOT0拉高进Bootloader后连接然后把代码擦掉。如果你经常调试建议不要轻易把SWD引脚复用作其他功能特别是在调试阶段。我在实际带新人的过程中也发现还有一个特别容易被忽视的点很多人喜欢一边开着STM32 ST-LINK Utility一边开着Keil两个软件同时在抢占ST-LINK端口。如果你发现Keil偶尔连不上ST-LINK可以先看看后台是不是还挂着ST-LINK Utility没有关闭。类似的情况也会出现在用STM32CubeProgrammer烧录时CubeProgrammer和Keil抢同一个调试器互相报错。烧录这件事说白了就是“硬件通路 驱动识别 软件配置”的三角关系任何一个环节断了都会出问题。但只要你按照本文的顺序先把接线和驱动搞定再核对Keil里的Debug、Flash Download、Utilities这几块设置绝大多数烧录失败都能在十分钟内解决。最后想说的是不要害怕报错STM32的报错信息绝大多数都是“明确的提示”它已经告诉你问题出在哪了。你需要的只是一套系统的排查思路而这也是这篇内容最想让你拿走的东西。