stm32f103的ST-link调试接线

📅 2026/7/30 18:31:51 👁️ 阅读次数 📝 编程学习
stm32f103的ST-link调试接线

画板子的时候,发现不知道用st-link烧录器烧录的时候,SWDIO与SWCLK这两根线是接到stm32哪里的,于是去查找了芯片手册,用来记录自己的学习过程。

关于调试,我看到了这样一段:翻译:

2.3.24 串行线式JTAG调试端口(SWJ-DP)

ArmSWJ-DP接口是嵌入式的,它是一个集成了JTAG和串行线调试端口的功能,能够使串行线调试或 JTAG 探头连接到目标设备。JTAG 的TMSTCK引脚分别与SWDIOSWCLK共用,而在 TMS 引脚上的特定序列用于在JTAG-DP 和 SW-DP 之间进行切换。

我花了二十分钟理清了里面的关系,并得出结论,上电后芯片就是SWD的烧录模式,并且SWDIO与SWCLK与TMS共用引脚,SWCLK与TCK共用引脚,也就是对应的PA13与PA14,从而我确定了在绘制原理图时要留出的引脚,以便后面stlink的接线。

接线图:

JTAG是什么?跟ST-LINK烧录有什么关系?

  • JTAG是什么?
    JTAG(Joint Test Action Group)最初是一种芯片内部测试标准,用于在芯片制造后检测电路连接是否正常。后来,工程师发现它非常适合用来控制CPU,于是就把它发展成了嵌入式开发中最常用的调试和烧录接口。它通常需要5根线:TMS、TCK、TDI、TDO,以及可选的nTRST。

  • 跟ST-LINK烧录有什么关系?
    ST-LINK就是一款利用JTAG(或SWD)协议来烧录和调试STM32芯片的硬件工具。
    你可以把ST-LINK理解为“翻译官”:电脑上的IDE(如Keil/IAR)通过USB发送指令给ST-LINK,ST-LINK再通过JTAG或SWD接口,把程序烧进芯片的Flash里,并实时控制CPU执行、暂停、查看变量。

SWJ-DP是什么?跟JTAG有什么关系?

  • SWJ-DP是什么?
    SWJ-DP(Serial Wire JTAG Debug Port)是ARM公司定义的一个混合调试端口。它把两种调试接口——JTAG-DPSW-DP——集成到了同一组物理引脚上。它的设计初衷是节省引脚,让你可以在同一个引脚上,根据需要选择使用JTAG(功能全、线多)还是SWD(线少、高速)。

  • 跟JTAG的关系?
    SWJ-DP是“容器”,JTAG-DP是“容器里的一种模式”
    也就是说,SWJ-DP这个端口支持两种工作模式:

    • JTAG模式(使用5根线)

    • SWD模式(使用2根线,即SWDIO+SWCLK)

    大多数STM32芯片上默认启用的就是SWJ-DP,所以你插上ST-LINK,默认就能用(通常优先走SWD模式)。

JTAG的TMS与TCK怎么切换成SWDIO与SCLK?

这个问题是硬件连接上的关键:

  • 引脚是物理共用的:在芯片内部,TMS引脚SWDIO引脚是连到同一个焊盘上的;TCK引脚SWCLK引脚也是共用的。所以硬件上不需要物理跳线,它们本来就是同一个引脚。

  • 切换是靠“协议序列”:切换不是靠拨动开关,而是靠调试器(如ST-LINK)在TMS/SWDIO这根线上发送一串特定的波形

    • ARM规定了一个“SWJ切换序列”:调试器先通过JTAG方式(用TMS和TCK)发送一个特定的16位数据包(0xE79E)。

    • 芯片内部的SWJ-DP模块收到这个序列后,就知道“主人想切换到SWD模式”,于是内部逻辑就将引脚的功能从JTAG状态机切换到SWD状态机

    • 此后,TMS引脚就被当作SWDIO来用,TCK被当作SWCLK来用。

大部分ST-LINK在连接时会自动发送这个切换序列,所以你不需要手动操作。

JTAG-DP与SW-DP是什么,跟JTAG与SWJ-DP有什么关系?

JTAG-DP是JTAG协议的调试端口,SW-DP是SWD的调试端口,也就是我们用的ST-link,只需要SWDIO与SWCLK两根线,SWJ-DP是ARM公司将JTAG和SWD两种调试方式结合在一起的名称,JTAG-DP只是SWJ-DP的一种模式。

展望:由于时间原因,我没有再深入去研究为什么一上电就是SWD的烧录模式以及Keil在这个流程中发挥的作用。