# 0. 项目原由
因为我那个板载stlink的NANO板近期要还给老师了。所以我就没有板子和stlink了,但是对于一个stmer来说,怎么能没stlink呢!?所以我决定买一个stlink。但是买的有的功能不全,有的很贵,而且有的还很大。同时还了之后我也没有板子,所以我决定自己制作一个板载stlink外围电路的最小系统小蓝板,这样刷stlink的固件就可以当stlink使用,不刷stlink的固件的时候,也可以当做最小系统版来使用。但是我自己做一个的话,别人要是想复刻我这个项目就得和我一样从头做一个,有点费事儿。**考虑到大家如果要是用stlink的话,大概率是会有那个能买到的最小系统小蓝板。所以我决定让大家利用起来自己的小蓝板,用我的stlink扩展(pin_to_pin兼容市面上的最小系统板)来做一个stlink
调试器。**
先说在前头:本项目硬件不是很难,主要是c8t6的谜之容量和固件兼容性的问题有太多坑。
# 1.简介
ST-LinkV2-1: 支持STM32调试,带虚拟串口和虚拟U盘下载,本项目制作的就是用于STM32程序下载、仿真调试和串口功能为一体的ST-Link V2-1(扩展板)。
stlink扩展板+市面上卖的
STM32F103C8T6核心板 就能构成完整的stlink V2-1调试器。
# 2.图片
stlink扩展板双层板3D图,如下。
![image.png]
我的c8t6最小系统四层板3D图,如下。(第一次画,不合理的地方还请见谅)
![image.png]
stlink扩展板双层板实物图,如下。
![1664802604744.jpg]
# 3.原理图参考
本项目原理图参考了正点原子的NANOF1开发板上的ST-link V2-1设计,如下图。
![image.png]
## 3.1 ST-LINK V2.1电路
NANOF1开发板上的STlink v2.1 ,这里我用
stm32f103c8t6最小系统板上的芯片,部分外围电路在stlink扩展板上。
![image.png]
## 3.2
USB接口电路
NANOF1开发板上的 USB_ST_LINK 可以直接cv过来,本设计中扩展版使用的是**排母** ,接在stm32f103c8t6最小系统板上。
![image.png]
## 3.3 下载电路
刷固件的接口在最小系统板上,stlinkV2.1接口在扩展板上。
![image.png]
## 3.4 COM指示灯
此LED会显示ST-LINK状态:
LED呈闪烁:正在目标和PC之间交换数据。
LED为常亮:PC与ST-LINK之间的通信已建立。
![image.png]
## 3.5 LDO
电源电路
参考这个芯片的手册。(NANOF1上用的1117,为什么我不用1117,因为我的最小系统板有点小,1117这大家伙太占地方)
![image.png]
# 4 ST-Link V2.1固件烧录&固件更新
## 4.1 固件获取
由于ST官方没有将ST-Link源码公开,也没有直接给出ST-Link固件(因为有读保护),但是网传有多个版本的固件。这里我只找了V2J28版本的固件(见附件),但是这个固件对于64k flash 的c8t6用不了(后面我有解决办法,而且已经成功),128k的c8t6和cbt6可以无脑冲V2J28版本(实测完全ok)或者更高版本。如何查看c8t6的flash大小,[见我的B站](https://www.bilibili.com/video/BV1RP411j7GT?share_source=copy_web&vd_source=584714a0cf29c22026ad8acbe10986af)。
我成功提取了V2J27版本(见附件),变砖的64k的c8t6使用这个版本就可以了(hex和bin两种格式都有,无论使用串口工具flymcu还是用Utility又或者STM32CubeProgrammer,都可以刷,终于摆脱flymcu的谜之下载逻辑了,哈哈)
**注意:128k的c8t6或者cbt6刷了V2J27,一般直接就能用;64k的c8t6刷了V2J27,有小概率不能用,这时只需用ST-LinkUpgrade_V2.J27.M15重新升级一下,然后拔插USB,重启烧录软件就行了。(实测成功)**
## 4.2 烧录软件选择
这3个都可以,请随意选择方便的。
1. flymcu(见附件):主要功能是编程烧录,只能用串口,配合CH340的usb转TTL下载(51小伙伴表示熟悉的配方)。
![image.png]
2. [Utility](https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stsw-link004.html)(附件也有):STM32 ST-LINK Utility的主要功能也是编程下载,得用stlink下载,也就是说你得有一个能用的stlink,去隔壁小伙伴那借一下。
![image.png]
3. [STM32CubeProgrammer](https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stm32cubeprog.html)(太大了,附件没有,要用的话直接去官网下):主要功能也是编程下载,支持Windows、 Linux、 macOS操作系统。同时,需要安装[JRE](https://www.java.com/zh-CN/download/)环境才能使用它。这个工具我只用过stlink下载,貌似这个工具还能用串口和USB。
![image.png]
**我采用的Utility和STM32CubeProgrammer,因为有时候得打开STM32CubeProgrammer才能识别自己做的stlink。**
## 4.3 固件更新
**注意:64k的c8t6,一定不要升级,很大可能会变砖,变砖的要重新刷我的V2J27。**
1. 用ST-LinkUpgrade_V2.J27.M15(见附件)升级,这个升级器只能升级到V2J27,非64k flash的不推荐使用。
2. 下载官方固件升级应用程序[STSW-LINK007](https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stsw-link007.html):ST-LINK,ST-LINK / V2,ST-LINK / V2-1和STLINK‑V3板的固件升级。
2. 使用STM32CubeProgrammer或者STM32 ST-LINK utility 自带的升级工具升级。
3. 使用Keil MDK-ARM 内置的升级工具进行升级,当ST-link 的版本低于MDK内置的版本时,会提示进行升级。
固件烧录及更新过程视频见[我的B站](https://www.bilibili.com/video/BV1RP411j7GT?share_source=copy_web&vd_source=584714a0cf29c22026ad8acbe10986af)。
U盘拖拽下载视频和stlink串口收发视频 见附件。
# 5 验证
![QQ截图20221005205431.png]
![image.png]
一般显示ST-Debug而且插上电脑会自动弹出UNDEFINED文件夹,就说明ok了。
# 6 测试
1. 测试烧录功能,用Keil-MDK,下载程序成功,说明烧录功能正常.(视频太大,在我的B站)
2. 测试Debug功能,用Keil-MDK进行Debug调试,可以调试,说明Debug功能正常.(视频在我的B站)
3. 测试U盘拖拽烧录功能,需要生成bin文件([bin文件生成方法](https://blog.csdn.net/Mr__Shen/article/details/105184963)),将bin文件拖到ST-link 模拟的U盘中,成功烧录,说明虚拟U盘功能正常。(视频见附件)
4. 测试串口收发功能:用杜邦线连接ST-LINK V2-1的TX和RX ,打开串口助手,发送数据,接收区收到相同的数据,说明串口收发正常(视频见附件);或者让其它开发板的usart口给虚拟串口发个数据来验证.(视频在我的B站)
# 7 注意事项
1. ST-LINK 最近的几个版本加入了读保护,SWD口是锁上的,不能通过SWD口读写固件。
2. 如果想改成DAP-LINK 之类的固件,不能通过SWD口烧录固件,但是可以通过ISP的方式擦除STM32的固件信息,然后就可以使用SWD口正常读写。(本条参考攻城狮的)
# 8 错误记录
错误记录文档在[我的CSDN](https://blog.csdn.net/Aaags/article/details/127196750)
视频在[我的B站](https://www.bilibili.com/video/BV1RP411j7GT?share_source=copy_web&vd_source=584714a0cf29c22026ad8acbe10986af)
-----
*最后:有问题的小伙伴,可以在评论区留言,看到留言后会及时回复。如果我的这个项目对你有帮助,请在评论区上方点个赞,谢谢!*
-----