魔改国产ST-LINK V2仿真器,增加SWO支持

最近同事提到合宙商城在搞AIR32F103的BluePill开发板(https://wiki.luatos.com/_static/bom/BluePill.html)促销活动,9.9一个开发板还额外赠送一片AIR32F103CCT6,之前从来没接触过STM32系的MCU,于是入了一片研究,至少可以收藏。

到手后在合宙官网快速学习了一下,又从搜索引擎上查找了一些STM32的入门资料学习(互联网时代各行各业的入门知识都很廉价),了解到了各种上传程序的方法,由于之前购买过ST-LINK V2(本来是打算留着给文宇WY815P焊台刷固件用的),于是选择了ST-LINK SWD方式测试,焊好排针,按丝印指示接好线,电脑装上STM32 ST-LINK Utility,插上调试器,顺利识别,随后又装了研究版的Keil(买ST-LINK时送的网盘5.23版),按合宙wiki里的教程装好AIR32的软件库,学了下GPIO的调用方法,顺利点亮了板子上的小灯(到这一步就已经能够感觉到Arduino对比起来有多简单了😂),而且也能成功使用Keil进行断点调试,但是紧跟着问题就来了,用Arduino Nano时,虽然无法断点调试,但是可以很容易的使用IDE自带的串口通讯工具查看log以及完成命令行形式的交互,现在这套配置并不能实现简单的看printf功能,于是又花了一些时间搜索调研…

调研后发现其实手里的ST-LINK都是山寨的,官方版的应该长这样:https://www.st.com/en/development-tools/st-link-v2.html

淘宝上搜索了下,确实也有卖的,不过一个购买一打山寨版了。于是又去另谋他路,后来查到其实我朝的山寨ST-LINK V2其实还是很受国际友人欢迎的,同时也发现有人遇到了和我现在一样的问题,并提出了一种解决方案,就是SWD其实并不只是SWDIO,SWDCLK,还有一根可选的SWO接线,接上后就可以使用ST-LINK调试状态下的log查看:

也就是Keil里调试器的这个Trace功能,如何设置等细节就不展开了,网上搜一下有很多,于是顺着这个思路很快就碰到了下一个问题:手里这个山寨的ST-LINK V2并没有引出接SWO的接口,需要硬改,参考这篇文章的方法:Completion of the Chinese ST-Link v2: add the SWO debug information output interface and foot reset – https://sudonull.com/post/20076-Completion-of-the-Chinese-ST-Link-v2-add-the-SWO-debug-information-output-interface-and-foot-reset,看了下操作复杂度还可以,飞一根线就可以了(我并不需要硬reset,也不想破坏多余供电、接地插针),开始动手。

拆除壳子后发现果然是复刻版,芯片用的都不是ST的,查了下是一个叫极海半导体的Geehy APM32F103 MCU,简单看了下数据手册,引脚完全兼容ST的,按照参考文章找到对应引脚直接飞线,由于之前搞过PS2的直读,这种操作算是有经验了,没按参考文章的方式刮PCB(实际上也刮不了,手里这块下面根本没有走线😂)直接跳线挂锡烫粘在需要的引脚上,完事后别暴力拽就行了,结果如下:

测试了下可以看到SWO的输出了,不过注意,Trace中的频率要设置正确,同时对于AIR32来说还要正确设置JTAG复用关闭(这里合宙的芯片还有个坑,后面再补一篇记录)。

最后研究了下,发现LED上面的透孔好像刚好可以用来把这根线穿出来,灯光也能勉强看到,于是魔改后的山寨ST-LINK V2最终变成了这个样子:

博主友情提示:

如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。