2025 Make Blocks阶段2 - 基于STM32F103CBU6设计的SWD下载器
一款基于 STM32F103CBU6 微控制器的智能 DAPLink,利用其强大的性能和丰富的外设资源,打造一款功能强大、稳定可靠、的调试工具,满足开发者在不同项目中的应用需求。通过电容触摸按键实现引脚功能的动态切换,提升开发体验与灵活性。
标签
USB
下载器
调试器
SWD
DAPLink
STM32F103
触摸
Make Blocks
STLink
引脚交换
鲜de芒果
更新2025-09-16
17
KiCad文件
全屏

任务介绍

在嵌入式开发领域,调试和编程工具对于开发者至关重要。DAPLink 作为一种常用的调试适配器,能够为各种微控制器提供高效的编程和调试支持。传统DAPLink引脚功能固定,开发者需手动跳线切换SWD(调试)与串口(通信)模式,操作繁琐且效率低。本项目旨在设计一款基于 STM32F103CBU6 微控制器的智能 DAPLink,利用其强大的性能和丰富的外设资源,打造一款功能强大、稳定可靠、的调试工具,满足开发者在不同项目中的应用需求。通过电容触摸按键实现引脚功能的动态切换,提升开发体验与灵活性。


模块介绍

根据任务要求本次我选用的是 STM32F103CBU6 芯片设计了一款 SWD 调试器,PCB尺寸为 33mm * 13mm 小于任务要求尺寸。引出 SWD 引脚、虚拟串口引脚、5V、3.3V、NRST和GND等8个引脚。采用 2.0mm 插座侧向焊接到PCB上,可以很方便地使用转接线。同时增加了两路触摸切换引脚功能,可以不需要插拔SWD和虚拟串口即可实现切换,十分便捷。


性能升级

  • 主控芯片:采用STM32F103CBU6(Cortex-M3内核,最高72MHz主频),支持单周期乘法和硬件除法指令。
  • 资源扩展:内置128KB Flash、20KB RAM,支持更高复杂度的程序和数据处理。
  • 外设丰富:集成12位ADC(2.4MSps)、多通道定时器、USB 2.0全速接口、I²C/SPI/USART等高速通信接口。


STM32F103CBU6 芯片 DigiKey 链接:https://www.digikey.cn/zh/products/detail/stmicroelectronics/STM32F103CBU6/3087769


功能升级

两年前,我曾设计并制作了一款 超级迷你的STLink、DAPLink双模合一的调试器,实物非常小巧。经过两年时间的使用,总结了那款调试器的几个优缺点:

  1. 由于追极致小巧,拉线座使用了 GH1.25 的贴片插座。这个插座的线没有转 2.0mm  2.54mm 的成品线买,只能买一头带端子另一头不带端子的线回来压接其它端子。并且 GH1.25 贴片插座的线太细容易断。
  2. 不带 5V 输出引脚,虽然没有 5V 也免强够用,但某些场合需要 5V 供电的情况下需要额外接一个电源,还是有些不方便的时候。
  3. 在使用过程中,经常遇到 SWDIO  SWCLK 、虚拟串口的 RX  TX 引脚需要交换的情况,需要拔下插座重新插上。

本次设计的是 2.0 版本的调试器,旨在之前版本的基础上改正以上缺点,并适当放大点尺寸到 33mm * 13mm,采用四层板设计。


原理图和PCB模块介绍

原理图


PCB


PCB预览图

从PCB预览图可看出,该设计没有像以前那样追求极致小巧。而是从实用性的角度出发,设计一款方便使用,同时也方便携带的版本,此版本作为我的升级版本因此版本号为 v2.0。加入了触摸功能,实现SWD和串口引脚的交换功能,避免在使用不同开发板的过程中由于引脚定义的不同需要频繁的插拔。

在USB接口上还预留了 SWD 烧录引脚,不过需要自已制作专用的 TYPE-C 转接线。对于普通人来说好像有点不是很容易做到,因此也额外引出了 1.25 间距的烧录焊盘来进行固件烧录。


硬件设计亮点

1. 电源与时钟

  • 输入电压:使用标准 Type-C 母座作为输入,CC线焊接有 5.1K 电阻。输入电压为 5V DC。
  • 稳压电路:高效LDO稳压至3.3V,为STM32及外设供电。
  • 时钟源:8MHz晶振+内部PLL,支持高精度定时和通信。

2. 核心接口

  • SWD:两线SWD引脚输出,支持触摸交换引脚功能。
  • 虚拟串口:两线制虚拟串口输出,支持触摸交换引脚功能。
  • 复位输出:一路复位输出,支持复位目标芯片。
  • 供电输出:采用 5V + 3.3V 双供电输出,适用范围更广。

3. 增强功能

  • 触摸交换引脚:通过电容触摸按键实现引脚功能的动态切换,提升开发体验与灵活性。
  • LED指示引脚交换状态:板载两路触摸实现SWD和虚拟串口引脚的交换功能,默认情况下指示灯灭引脚为板载丝印功能,当指示灯亮起时引脚为丝印交换状态功能。

4. 尺寸与封装

  • PCB尺寸:尺寸非常小巧(33mm × 13mm),使用侧向焊接双排 2.0mm 间距排母接线。可焊接使用 STLink 官方同款的牛角插座实现防反接功能。

5. 软件支持

DAPLink 开源版本就有 STM32F103CBU6 的支持,有需要的可自行克隆项目仓库源码,无需调整目标板和相应代码后编译固件并烧录就能实现调试器功能。


调试介绍

1 软件介绍

焊接好的核心板,可以使用STM32CubeProgramer、J-Link、DAPLink等软件下载固件。这里我使用我之前制作的迷你STLink来为下载器下载固件。


2 实现过程

下载器可以使用开源项目DAPLink的固件,也可以使用 STLink V2 的固件作为下载器固件。兼容默认引脚配置。


下载器引脚配置

这里我使用了 DAPLink 作为下载器的固件。烧录 DAPLink 的 Bootloader 固件至下载器后,将下载器连接 USB-TypeC 至电脑,将 DAPLink 固件拖拽至 DAPLink U 盘中即可完成固件的更新和升级操作。

#ifndef __IO_CONFIG_H__
#define __IO_CONFIG_H__

#include "stm32f1xx.h"
#include "compiler.h"
#include "daplink.h"

COMPILER_ASSERT(DAPLINK_HIC_ID == DAPLINK_HIC_ID_STM32F103XB);

//USB control pin
#define USB_CONNECT_PORT_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define USB_CONNECT_PORT_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
#define USB_CONNECT_PORT GPIOA
#define USB_CONNECT_PIN GPIO_PIN_15
#define USB_CONNECT_ON() (USB_CONNECT_PORT->BSRR = USB_CONNECT_PIN)
#define USB_CONNECT_OFF() (USB_CONNECT_PORT->BRR = USB_CONNECT_PIN)

//Connected LED
#define CONNECTED_LED_PORT GPIOB
#define CONNECTED_LED_PIN GPIO_PIN_2
#define CONNECTED_LED_PIN_Bit 2

//When bootloader, disable the target port(not used)
#define POWER_EN_PIN_PORT GPIOB
#define POWER_EN_PIN GPIO_PIN_15
#define POWER_EN_Bit 15

// nRESET OUT Pin
#define nRESET_PIN_PORT GPIOB
#define nRESET_PIN GPIO_PIN_0
#define nRESET_PIN_Bit 0

//SWD
#define SWCLK_TCK_PIN_PORT GPIOB
#define SWCLK_TCK_PIN GPIO_PIN_13
#define SWCLK_TCK_PIN_Bit 13

#define SWDIO_OUT_PIN_PORT GPIOB
#define SWDIO_OUT_PIN GPIO_PIN_14
#define SWDIO_OUT_PIN_Bit 14

#define SWDIO_IN_PIN_PORT GPIOB
#define SWDIO_IN_PIN GPIO_PIN_12
#define SWDIO_IN_PIN_Bit 12

//LEDs
//USB status LED
#define RUNNING_LED_PORT GPIOB
#define RUNNING_LED_PIN GPIO_PIN_2
#define RUNNING_LED_Bit 2

#define PIN_HID_LED_PORT GPIOB
#define PIN_HID_LED GPIO_PIN_2
#define PIN_HID_LED_Bit 2

#define PIN_CDC_LED_PORT GPIOB
#define PIN_CDC_LED GPIO_PIN_2
#define PIN_CDC_LED_Bit 2

#define PIN_MSC_LED_PORT GPIOB
#define PIN_MSC_LED GPIO_PIN_2
#define PIN_MSC_LED_Bit 2

#endif


功能展示

成品展示

本次硬件制作还算比较顺利,从设计PCB到打板,再到焊接,基本一次成功。本次只制作了 1 块电路板且能正常烧录DAPLink固件程序。

这里我使用一节7号电池和我的一节食指作为参照,可以直观地展示这两个下载器的大小。和 1.0 版本的相比还是大了挺大一圈的,厚度上还是要比 1.0 版本要薄很多的,只不过这个 1.0 版本我没有焊接背面的串口插座。即使没有焊接背面的插座 1.0 版本的厚度也和 2.0 版本的几乎一致。


下载展示

这里我使用下载器正面上的丝印指示连接到第一期的 STM32Duino-G431Rx 开发板,进行程序下载展示。为此,我写了一段简单的测试代码,只做两件事。

  1. 控制 STM32Duino-G431Rx 开发板上的板载LED以 1Hz 的频率闪烁。
  2. 以每 500毫秒 一次的频率向串口发送一个自增数值。具体代码如下:
#include <Arduino.h>
#include <Wire.h>

#define BUILDIN_LED PC13 // 板载 LED
#define BUILDIN_WS2812 PB1 // 板载 WS2812 LED
static uint32_t count = 0;


void setup() {
Serial.begin(115200); // 串口初始化
delay(1000);

pinMode(BUILDIN_LED, OUTPUT);
}

void loop() {
digitalToggle(BUILDIN_LED);
delay(500);
Serial.println(count ++);
}


串口功能展示

测试程序下载完成后,使用下载器正面上的丝印连接到第一期的 STM32Duino-G431Rx 开发板的串口引脚。这里使用交叉连接,默认是能接收到测试程序发出的串口数据。


烧录引脚交换展示

根据下载器正面上的丝印指示将 SWDIO  SWCLK 引脚交换连接到第一期的 STM32Duino-G431Rx 开发板,此时使用下载器下载程序会失败。触摸下载器正面的 SWD 丝印位置,SWD引脚交换灯亮起后,再次下载测试程序则提示下载成功。


串口引脚交换展示

测试程序下载完成后,根据下载器正面上的丝印指示直接将 RXD  RXD 引脚连接到第一期的 STM32Duino-G431Rx 开发板的 RX  TX 引脚,由于串口通信需要交换引脚,此时下载器是无法接收到 STM32Duino-G431Rx 开发板测试程序发送的串口数据。触摸下载器正面的 UART 丝印位置,串口引脚交换灯亮起后,下载器能正常接收到 STM32Duino-G431Rx 开发板上烧录的测试程序发出的串口数据。


总结

遇到的问题

  1. 接线座的厚度问题,原本想将调试器的厚度尽量做薄一点,因此使用了沉板的TypeC母座,使的整个下载器的厚度尽可能的薄。但为了避免使用排针而导致没有了防反接功能,因此使用了 PHD 端子座,这使得下载器厚度变的比较厚,从而导致使用沉板TypeC母座变的没有多大意义了。如果不使用沉板TypeC母座的话,下载器的尺寸还能再小一点。不知道是否有更薄一点的带防反接的插座,找了很长时间也没遇到相应的型号,如果有知道的小伙伴还请不吝赐教!


心得体会

本项目设计的基于 STM32F103CBU6  DAPLink 具有高性能、低成本、丰富的接口和功能扩展性等优点,在嵌入式开发、教育培训以及商业产品开发等领域具有广泛的应用前景。通过合理的硬件设计和软件优化,实现了高效的程序下载、精确的调试以及稳定的虚拟串口通信等功能,满足了开发者在不同场景下的需求。通过电容触摸交互技术,重新定义了 DAPLink 的设计范式,为嵌入式开发者提供更智能、高效的调试工具。

本次活动为一个系列活动的第二期,这期我在第一期的基础上补充了开发板外接下载器的功能。期待后续的活动能有机会在此开发板的基础上制作一些扩展板。最后,感谢硬禾学堂联合 DigiKey 推出的这次活动!此次活动带给我许多宝贵实践经验和机会,我们下期活动再见!


参考资料

附件下载
stm32f103xb_bl_crc.bin
Bootloader
0257_stm32f103xb__0x0000.bin
DAPLink 固件
ProPrj_DAPLink-v2.0-2025-07-24_125221.zip
KiCAD工程
团队介绍
业余电子爱好者
团队成员
鲜de芒果
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号