SWV(串行线查看器)是ARM单片机调试接口自带的一个功能(低成本芯片M0/M0+没有),在常见的IDE都支持.这里我使用ST官方的STM32CubeIDE来简单描述一下SWV的几个常用功能的使用方法.
一,开启SWV:
1,硬件要求:除了普通调试需要的信号(CLK和DIO)外,还需要额外的一个SWO信号;
2,软件上使能SWV(串行线查看器);
二,实现printf:
为了调试的方便,我们在调试时使用printf来打印一些程序运行时的关键信息,有时我们专门留一个硬件串口来通过串口助手查看这些信息.如使用SWV ITM后,不仅可以节省一个硬件串口,而且可以方便地在一个软件(常见的IDE都支持)内完成调试的所有工作.
提醒:建议在正式版的程序中通过宏定义取消printf,这个还是比较影响性能的;
1,在main.h中添加
#include <stdio.h>
2,在main函数前添加
int _write(int file , char *ptr,int len)
{
int DataIdx;
for(DataIdx = 0;DataIdx<len;DataIdx++){
ITM_SendChar(*ptr++);
}
return len;
}
3,调用printf();使用时一定要加换行,否则CubeIDE(1.11)只有在接收到一定数量的字符后才打印.
4,如需打印浮点数须勾选如下:
5,编译并进入调试模式,开启SWV ITM Data Console(printf打印区域):
6,开启port并开启开始追踪(start trace):
7,点击resume(或F8),开始运行程序,在打印区域即可看到打印的消息;
三,live expressions(现场表达式),可以在程序运行时查看变量的值
有时在我们调试过程中,仅需要查看变量的值,就不需要printf了(也就不需要上述二的操作了),我们可以直接通过 live expressions(现场表达式)来在程序运行时实时查看变量值的变化,而不需要使用断点和暂停.
四,图形显示
直接看变量的值有时不够直观,我们还可以以图形的方式来查看变量的值,设置方法基本和打印信息的设置方法一样.
开始运行