做过STM32开发的同学肯定对J-link或者ST-link非常的熟悉,STM32支持两种debug接口,一种是JTAG接口,另外一种是SW-DP接口。SWD是串行的,只需要一根数据线,一根时钟线以及GND就可以了非常简洁,所以在STM32上一般我使用SWD接口做下载调试比较多。之前一直使用的都是官方的Jlink调试器,然而因为最近的机器人项目中得做一块STM32F4的主控板,我想能不能把调试下载器也一起集成到PCB上,这样就可以像Arduino一样直接连接USB下载了(当然除了下载程序,Jlink的在线调试功能是Arduino远远比不了的…)。之前拆过淘宝上买的U盘形状的STlink,看到里面其实也是一块STM32F1的主控,上网搜索看到还是有不少人自制调试器的,所以后面就好办啦,先做个迷你Jlink试试效果~
这次用的STM32F072芯片做Jlink,相比之前的STM32F103版本多了CDC虚拟串口功能,这个还是很有用的,也就是说一个调试器调试可以当Jlink和USB转串口模块使。主要性能如下:
- 只支持SWD接口
- 只支持Cortex-M MCU
- 支持SWO功能
- 使用STM32F072的硬件串口来实现的CDC虚拟串口,速度更快
- 无需外部晶振,使用内部48M的HSI
- 外部器件更少,体积更小巧
- 固件限制jtag时钟最高2MHz
固件是从SEGGER官方的JlinkARM.dll文件中提取的,制作的过程如下:
- 网上下载安装好Jlink最新驱动,安装目录中找到JLinkARM.dll文件,使用二进制解压工具得到地址0x6D26BC之后的一段数据,大小为0x0A0E8
- 使用串口(BOOT0选择)或者另一个Jlink或者STlink将上述二进制文件和一份包含启动向量表的二进制文件(在0x8000000)一起烧入芯片
- 大功告成,插上USB,电脑提示发现Jlink,并且多出一个COM口,尽情享用~
参考资料在这里,感谢该网站作者:DIY JLink-OB-072 (JLink + COM)
如果觉得上述过程比较麻烦的话,我这边提供处理好的固件直接下载进芯片就行了,链接放在文章末尾。
给出原理图以及相关固件