STM32CubeIDE调试利器之SWV(串行线查看器)

938 阅读1分钟

SWV(串行线查看器)是ARM单片机调试接口自带的一个功能(低成本芯片M0/M0+没有),在常见的IDE都支持.这里我使用ST官方的STM32CubeIDE来简单描述一下SWV的几个常用功能的使用方法.

image.png

一,开启SWV:

1,硬件要求:除了普通调试需要的信号(CLK和DIO)外,还需要额外的一个SWO信号;

2,软件上使能SWV(串行线查看器);

image.png

二,实现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,如需打印浮点数须勾选如下:

image.png

5,编译并进入调试模式,开启SWV ITM Data Console(printf打印区域):

image.png 6,开启port并开启开始追踪(start trace):

image.png image.png

image.png 7,点击resume(或F8),开始运行程序,在打印区域即可看到打印的消息;

image.png

三,live expressions(现场表达式),可以在程序运行时查看变量的值

有时在我们调试过程中,仅需要查看变量的值,就不需要printf了(也就不需要上述二的操作了),我们可以直接通过 live expressions(现场表达式)来在程序运行时实时查看变量值的变化,而不需要使用断点和暂停.

image.png

四,图形显示

直接看变量的值有时不够直观,我们还可以以图形的方式来查看变量的值,设置方法基本和打印信息的设置方法一样.

image.png

image.png 开始运行 image.png