目的
ST-LINK是ST意法半导体为评估、开发STM8系列和STM32系列MCU而设计的集在线仿真与下载为一体的开发工具。STM32CubeIDE支持使用ST-LINK进行 SWD
和 SWV
仿真。本文就对相关功能与使用做个说明。
ST-LINK设备
说明
ST-LINK设备可以买ST官方的 ST-LINK V2
或者 ST-LINK V3
:
也可以买TB上那种十几块的U盘大小的仿的 ST-LINK V2
产品:
两者使用是各有优缺点的:
- ST官方的接口齐全,可以支持SW和SWV方式调试(还有JTAG,没前面两个好用),但是官方的ST-LINK不支持向STM32开发板供电,也就是你还得单独给开发板供电;
- TB上那种便宜的对STM32来说几乎都是只支持SW方式调试的,不支持SWV方式(SWV方式开发者可以向IDE输出调试信息,调试起来更加方便),但是这类模块几乎都可以直接为STM32开发板供电;
引脚连接
本文使用ST-LINK调试主要用到下面几个引脚:
SWCLK
:通常连接STM32-PA14引脚,也被标记为JTCK;SWDIO
:通常连接STM32-PA13引脚,也被标记为JTMS;SWO
:通常连接STM32-PB3引脚,也被标记为JTDO;GND
:共地;T_VCC
:官方ST-LINK特有,需要将MCU的电源连接至该引脚,例如MCU 3.3V供电,则需要将该3.3V电源连接至T_VCC
;
SWD调试时需要连接: SWCLK
、 SWDIO
、 GND
、 T_VCC(如果有)
;
SWV调试时需要连接: SWCLK
、 SWDIO
、 SWO
、 GND
、 T_VCC(如果有)
;
如果MCU相应IO口被占用将无法启动调试(STM32CubeMX配置时记得开启SYS->Debug):
更新ST-LINK固件
可以在STM32CubeIDE菜单栏 Help > ST-LINK更新
中更新ST-LINK固件。
SWD
根据上面进行接线,点击Debug就可以进入调试了,初次调试需要进行设置:
Debug相关界面功能说明如下:
SWV
如果在 Debug Configurations > 调试器
中使能SWV就可以开启SWV调试了,默认情况下启动调试后并不会开启SWV功能具体的窗口,需要在 Window > Show View
中开启相应窗口。在各个SWV窗口中均可以启动/暂停/配置SWV:
功能上来说SWV其实就是SWD的扩展,最基本的操作和SWD是一样的,这里主要稍微介绍下扩展的那部分:
向控制台输出信息
在上位机软件调试的时候经常会向控制台输出信息以供调试,现在STM32调试也可以了。
通过向 ITM->PORT[port]
寄存器写入数据就可以向SWV Console输出信息,根据此编写下面函数:
// 向SWV Console输出信息
// port:0~31
void swvPrint(int port, char *ptr, int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
while (ITM->PORT[port].u32 == 0)
{
}
ITM->PORT[port].u8 = *(ptr + i);
}
}
然后就可以在代码中使用该函数向控制台输出信息了:
变量追踪
SWV可以追踪变量并将变量变化绘制成图形:
函数耗时占比统计
异常与中断追踪
SWV追踪日志
总结
使用ST-LINK调试程序相关说明主要就是以上这些了,更多内容可以参考 Atollic TrueSTUDIO官方相关内容:
White paper: 《System analysis and real-time tracing
with Serial Wire Viewer (SWV)》
Blog:《How to use the most powerful debug techniques on ARM Cortex-M devices [SWV]》