尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

STM32G0B2调试接线:ST-LINK/V2的SWD引脚定义与EVLSPIN32G0B2烧录实战

STM32G0B2调试接线:ST-LINK/V2的SWD引脚定义与EVLSPIN32G0B2烧录实战 手里拿着EVLSPIN32G0B2这块评估板准备用ST-LINK/V2给里头的STM32G0B2下载程序结果第一关就卡在怎么把ST-LINK/V2那个20pin座子上的SWDIO、SWCLK、VCC、GND对号入座。这个场景我太熟悉了而且网上翻到的资料大多是直接说“接上就行”没几个把针脚位置讲透。这篇文章就把整个连接过程拆开揉碎先认清楚EVLSPIN32G0B2评估板的调试接口再讲ST-LINK/V2的20pin座子的引脚定义教你快速找到SWDIO、SWCLK、VCC、GND这四根线最后分享一套我自己用下来最稳的烧录流程和常见问题排查方法。不管你是第一次碰STM32调试还是刚从Keil里转过来想用ST-LINK/V2烧录电机控制固件这篇都能让你少踩两个坑。1. 先把这两个名字搞清楚EVLSPIN32G0B2是什么ST-LINK/V2要干什么1.1 EVLSPIN32G0B2评估板的核心构成EVLSPIN32G0B2是意法半导体推出的一款低压三相无刷直流电机控制评估板核心芯片是STSPIN32G0B2。这颗料很有意思它把电机驱动部分和一颗Cortex-M0内核的STM32G0B2单片机封装在一起也就是说驱动器和MCU在一个封装里外部只需要加一点周边电路和MOSFET就能组成一套完整的电机控制器。板子上的主控部分和你平时用的STM32G0B2开发板没有本质区别内部有64MHz主频的Cortex-M0内核、Flash、SRAM、ADC、定时器还集成了运放和比较器专门伺候电流采样和过流保护。电机控制部分负责产生三相逆变桥的上下管PWM同时内部集成了栅极驱动器可以直接驱动低压MOSFET。这块板子的典型应用就是低压无刷电机、风机、水泵、电动工具这类场景。1.2 ST-LINK/V2在调试流程里扮演的角色ST-LINK/V2是ST官方出的调试下载器通过SWD接口和MCU通信。和早期单片机烧录器不同SWD协议只需要两根线SWDIO数据线和SWCLK时钟线再加上电源和地最多四根线就能完成连接。EVLSPIN32G0B2虽然板子不大但上面没有板载ST-LINK所以你得自己外接一个调试器。用ST-LINK/V2能做几件事下载固件、在线调试、读取Flash内容、设置读保护等。对于EVLSPIN32G0B2来说最常见的工作就是烧录电机控制固件然后通过调试器查看MCU运行状态。有一点必须提醒ST-LINK/V2的固件版本如果太老可能不认识STM32G0B2这颗芯片连接时会直接报错。所以拿到ST-LINK/V2后第一件事是打开STM32CubeProgrammer在固件升级界面把ST-LINK/V2升级到最新版本这一步能省掉后面很多莫名其妙的麻烦。2. ST-LINK/V2的20PIN座子引脚定义SWDIO、SWCLK、VCC、GND到底在哪2.1 先学会数针脚ST-LINK/V2通常有一个2x10的20pin排针座这个座子兼容ARM标准的20pin CoreSight调试接口定义但ST这里做了一点点自己的排布。很多新手拿到手就懵了密密麻麻20个脚不知道从哪里看起。数针脚有个口诀看缺口找左上。把ST-LINK/V2的20pin座子缺口朝上或者你把板子翻到能看到丝印的这一面面向自己左上角那个引脚就是第1脚。第一列是1、3、5、7、9、11、13、15、17、19第二列是2、4、6、8、10、12、14、16、18、20。注意别从右下角开始数这是最常见的数反原因。2.2 你需要认识的5个关键引脚连接EVLSPIN32G0B2时你不需要把20个脚全部用上只需要认得其中几个引脚号信号名作用连接去向第1脚VAPP / VTREF目标板参考电平输入必须接到EVLSPIN32G0B2的3V3让ST-LINK知道目标板电压第7脚SWDIOSWD数据线接EVLSPIN32G0B2的SWDIO第9脚SWCLKSWD时钟线接EVLSPIN32G0B2的SWCLK第3脚或第5脚GND共地参考接EVLSPIN32G0B2的GND第15脚NRST目标板复位信号可选建议接EVLSPIN32G0B2的NRST这就是网上常说的不用看全表记住“1、7、9、3/5、15”这几个位置就够用了。SWDIO在第7脚SWCLK在第9脚这两个是刷机的命根子。GND可以接第3脚或第5脚两个是连通的哪个方便接哪个。NRST接不接的区别我在后面第三章细说。2.3 关于VCC、VAPP和ROHS的常见误解先说VCC。ST-LINK/V2的20pin座子上第19脚标着VCC这脚和USB的5V是连通的理论上可以给目标板供电。但我不建议你用这个脚给EVLSPIN32G0B2供电原因有两点一是ST-LINK/V2的VCC输出电流能力有限而电机控制板上一堆LED、驱动芯片、电容启动瞬间电流可能超出它的能力二是单独一个调试器给目标板供电一旦功率级错误上电或者短路ST-LINK/V2很可能直接报废。正规做法是目标板独立供电ST-LINK只做下载两者共地即可。再说VAPP也就是第1脚。这个脚是参考电压检测用来让ST-LINK/V2判断目标板的IO电平是1.8V还是3.3V还是5V。虽然官方文档说它是参考输入但实际使用中如果你不确定目标板电压直接把它接到EVLSPIN32G0B2的3V3上十有八九不会错。这也是“只接四根线还能正常工作”的关键所在VAPP供给了参考电平SWDIO和SWCLK的逻辑电平才能对上。最后是ROHS。很多人买ST-LINK/V2时看到PCB或外壳上印着ROHS以为是某个功能标记或者“高配版”。其实ROHS只是环保合规标识意思是产品不含某些有害物质和调试功能一点关系都没有不需要专门设置什么东西。如果你买的ST-LINK/V2是那种特别便宜的山寨版板子上印再多的ROHS也不代表质量好该连不上照样连不上。3. EVLSPIN32G0B2侧SWD调试接口在哪里怎么接线3.1 板上的SWD接口位置EVLSPIN32G0B2这块评估板本身没有引出一个标准2x10的SWD插座所以你没法直接把ST-LINK/V2的20pin排针插上去需要飞线或者用杜邦线进行转接。板上一般会有一个标着SWD、SWDIO、SWCLK、3V3、GND之类的排针焊盘可能是5pin或6pin也可能是一组圆形的测试点。具体位置不同批次可能稍有不同拿到板子先做两件事第一看板子丝印。找SWD、SWCLK、NRST、3V3/GND这些字样一般会集中在板的某一侧离MCU比较近。第二翻一翻板子的说明书或者原理图PDF确认哪几个点是真的调试引脚。这个提醒不是因为废话而是因为我见过有人把电机控制排针上的某几个IO当成SWD来接线结果自然连不上。EVLSPIN32G0B2的SWD接口归根结底就是MCU的PA13SWDIO和PA14SWCLK它们在STSPIN32G0B2里面就是这两根引脚板上一般会引出来找准丝印就不难。3.2 四线接法与五线接法的取舍连接方案有两种最少四线或者稳妥五线。四线就是SWDIO、SWCLK、GND、VCC/3V3VAPP参考五线就是再加一根NRST。四线接法最简单也是最常用的。连接顺序如下ST-LINK/V2的第7脚SWDIO接到EVLSPIN32G0B2的SWDIO。ST-LINK/V2的第9脚SWCLK接到EVLSPIN32G0B2的SWCLK。ST-LINK/V2的第1脚VAPP接到EVLSPIN32G0B2的3V3。ST-LINK/V2的第3脚或第5脚GND接到EVLSPIN32G0B2的GND。五线接法就是多接一根ST-LINK/V2的第15脚NRST接到EVLSPIN32G0B2的复位引脚。这根线看起来不是必须的但在特定场景下价值很大。比如目标板内部运行的程序把SWD引脚复用成了普通IO或者系统时钟配置有问题导致MCU跑飞普通的四线SWD可能连不上此时用“Connect under reset”模式ST-LINK会通过NRST引脚按住复位让MCU停在复位状态再趁机建立SWD连接成功率会高很多。所以我的建议是能接就接五根线又不费事关键时候能救命。3.3 供电方案确认在接线之前先确认EVLSPIN32G0B2的供电。这块板子有两种供电情况一种是控制逻辑部分的供电用于让STM32G0B2跑起来通常通过板上的USB接口或者3.3V/5V排针给入另一种是电机功率级的供电需要外接直流电源电压范围要看板子标识一般最高45V。调试固件时只需要给控制逻辑部分供电让MCU跑起来就行不用接电机功率电源。如果你上来就把电机电源接上万一固件里的PWM初始化有误电机可能直接就转了这在小空间调试时是非常危险的事。正确的调试顺序是先接ST-LINK的四到五根线再给控制逻辑上电打开烧录工具确认能识别到芯片最后才考虑功率级供电的问题。4. 实操从接线到用STM32CubeProgrammer完成烧录4.1 接线前检查清单这一步是我每次都要花半分钟做检查的能避免大量低级错误接线前先把ST-LINK/V2的USB线拔掉确保调试器不带电。确认EVLSPIN32G0B2处于断电状态。检查杜邦线是否完好母头有没有松垮。劣质杜邦线是SWD连接失败的高发原因。核对ST-LINK/V2的针脚号反复确认SWDIO接第7脚、SWCLK接第9脚、VAPP接第1脚。确认EVLSPIN32G0B2侧的SWDIO和SWCLK没有接反。这个错误太常见了因为板子丝印和ST-LINK丝印的朝向未必一致眼睛一花就交叉了。线长尽量控制在15cm以内特别是SWDIO和SWCLK这两根如果太长或者绞在一起高速通信时容易出错。全部检查完先给EVLSPIN32G0B2上电再插上ST-LINK/V2的USB线。4.2 STM32CubeProgrammer连接配置与常见模式打开STM32CubeProgrammer右边的烧录配置区域会有几个关键选项第一个是ST-LINK连接方式一般选ST-LINK。第二个是接口类型选SWD。第三个是Mode模式我建议先试Hot Plug如果连不上再选Under reset。第四个是Reset模式如果用了五线接法可以选Hardware reset。连接速度这里有个小坑。ST-LINK/V2默认的SWD速度可能比较高但如果你的杜邦线比较长、质量也一般太高的时钟频率会导致通信不稳定。调低频率比如4MHz甚至1.8MHz代价只是下载慢那么零点几秒但稳定性提升是肉眼可见的。尤其是EVLSPIN32G0B2这种电机控制板板上还有其他驱动芯片和功率器件电磁环境比普通开发板复杂降频是最快的解决问题手段。配置完成点击Connect如果一切正常软件右侧会显示MCU的基本信息包括Device ID、Flash大小、UID等。看到芯片型号信息出来说明ST-LINK/V2和EVLSPIN32G0B2已经建立起了SWD连接。4.3 烧录与运行验证连接成功后烧录就很简单了。在CubeProgrammer左侧点开烧录界面选择要下载的hex或bin文件可以勾选“Verify after programming”和“Run after programming”。前者会在烧录后回读校验后者会在烧录完成后让MCU自动复位运行。这里有一个对电机控制固件特别重要的细节烧录完成后如果MCU自动复位运行板子上的功率级可能立即开始初始化PWM即使电机还没转也会在输出脚上产生驱动信号。所以烧录EVLSPIN32G0B2固件时我习惯不勾选“Run after programming”而是烧录完断电、确认功率电源没接再手动上电复位这样更安全。如果你还需要调试回到CubeProgrammer的在线调试界面可以查看寄存器、读写变量、单步执行。不过电机控制程序很多时候不太好单步因为电机在转你停了MCU电机的反电动势会反馈到驱动板上容易触发各种保护。我更推荐在固件里用串口打印或者虚拟示波器方式做观测尽量少打断MCU运行。4.4 命令行批量操作有时候你会需要反复烧录很多块板子这时候点GUI界面效率太低。ST-LINK/V2配合STM32_Programmer_CLI命令行工具会方便很多。我常用的命令大致是这个样子STM32_Programmer_CLI -c portSWD modeUR resetHWrst -e all -w motor_control.hex -v -rst这条命令的意思是连接SWD接口使用Under reset模式硬件复位擦除全部Flash写入motor_control.hex校验然后复位运行。配合一个简单的for循环脚本就能批量烧录。这条命令在产线复制固件时非常实用不过我建议第一次接触还是先用GUI跑通流程再上命令行。5. 常见问题与排查技巧实录5.1 连接不上的标准排查流程SWD连接失败是最常见的问题而且报错信息五花八门比如“Error: Connection error”或者“Target connection lost”等等。遇到这类报错我一般按下面的流程排查第一步检查电源。确认EVLSPIN32G0B2的控制逻辑已经上电用万用表量一下3V3和GND之间的电压是否正常。VAPP如果悬空或者电压不对ST-LINK会认为目标板没供电连接必然失败。第二步检查共地。量一下ST-LINK/V2的GND和EVLSPIN32G0B2的GND之间是不是通的。如果接了杜邦线但接触不良这一点很容易被忽略。多用电表二极管档确认每根线的连通性。第三步交换SWDIO和SWCLK试试。很多人觉得线看起来没错实际上一交叉就是连不上而且外观上非常难分辨。我见过有工程师花一个小时怀疑固件、怀疑芯片最后发现是两根线插反了。第四步降低SWD速度并尝试Under reset模式。把CubeProgrammer里的Frequency调低Mode改成Under reset如果接了NRST就重新试一次。第五步确认目标芯片型号。ST-LINK/V2升级完固件后如果目标板上MCU的电源其实没起来或者芯片被读保护锁住了连接也会有异常。G0系列如果Flash里设置了RDP级别ST-LINK默认情况下无法读取复位后的内容需要在更高权限下执行全片擦除CubeProgrammer会提示是否执行Option Byte修改选同意并在提示时给目标板断电上电一次。5.2 典型错误现象和解决办法错误现象可能原因解决办法提示No ST-LINK detectedUSB线只供电不传数据或驱动没装好换USB线重装ST-LINK驱动目标板连接失败VAPP电压为0目标板没上电或3V3没接给EVLSPIN32G0B2上电检查3V3目标板连接失败SWD频率太高杜邦线太长或质量差调低SWD频率至4MHz以下连接时偶发成功偶发失败接触不良或线序有串扰换线线长控制短重新插拔能连上但擦除失败Flash读保护级别过高关闭读保护执行全片擦除烧录后电机不转功率级没供电或固件配置不对检查功率电源确认固件参数用Keil下载报找不到芯片ST-LINK固件太老不认识G0B2升级ST-LINK/V2固件到最新5.3 几个值得留意的独家经验我在用ST-LINK/V2连EVLSPIN32G0B2的过程中确实踩过几个比较有代表性的坑。第一个坑是劣质ST-LINK/V2。市面上几十块的所谓“ST-LINK/V2”很多用的不是ST原厂方案而是用CH341或者STM32F103做的仿制品。它们能烧录老型号芯片但在STM32G0B2这种较新的Cortex-M0上经常出现连不上、烧写到一半失败、校验错误的情况。如果确认接线没问题、环境也没问题但就是频繁失败可以考虑换一个正版ST-LINK或者ST-LINK/V3SET配置稍微高一点稳定性天差地别。第二个坑是电机控制板的电磁干扰。这块板子一旦功率级开始工作PWM斩波产生的电磁噪声会影响SWD通信。如果你带着功率电源去在线调试可能鼠标点一下变量就掉线了。我的习惯是调试逻辑时关掉功率级或者用隔离方式处理信号线。第三个坑是SWD引脚被复用。我自己编译工程时习惯了把PA13和PA14当成普通IO来测试结果下次上电ST-LINK连不上一开始还以为是板子坏了。如果你烧录过自己的固件且固件里设置了PA13/PA14的复用而你现在想重新烧录先试试Under reset模式实在不行把BOOT0引脚拉高让MCU进入系统存储器启动模式再用ST-LINK连上擦除Flash然后再把BOOT0拉回来。这个方法在EVLSPIN32G0B2这种没有独立串口引导的板子上算是最稳妥的恢复手段。第四个经验是接线习惯。我把ST-LINK/V2的20pin座子引出了一组母对母杜邦线线序固定按“VAPP、SWDIO、SWCLK、GND、NRST”排好做好标记收在一个小袋子里。每次用的时候直接拿这一束线不用临时翻数据手册大大减少接错线的概率。电机控制调试本来就容易炸管子任何减少人为失误的措施都值得做。我的体会是硬件连接这件事用一次记不住用三次就刻进肌肉记忆了。希望这篇内容能让你在烧录EVLSPIN32G0B2的第一天就把这个步骤一次做对。
返回列表