基于SWO功能实现串口打印功能

发布于 2021-11-12  559 次阅读


1、SWO功能简介

SWO也叫做trace(跟踪)功能,通过此功能,只需要在SWD调试基础上增加一条SWO线缆,就可以实现类似串口输出功能,配合printf函数打印相应的信息到utility窗口中。此功能不占用串口资源,无需在中断中执行。

2、ITM(指令跟踪微单元)简介

我们此次功能实现是通过调用ITM实现的。
ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成:
● 软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。
● 硬件跟踪:ITM会发布由DWT产生的信息包。
● 时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。
由ITM发送的信息包输出到TPIU(Trace Port Interface Unit),TPIU再添加一些额外的包(参考TPIU),然后输出完整的包序列给调试器。

3、使用代码

#include "main.h"
#include "stdio.h"

int fputc(int ch, FILE *f)
{
	ITM_SendChar(ch);
	return ch;
}

int main(void)
{
  HAL_Init();
  SystemClock_Config();

  while (1)
  {
    printf("test swo\r\n");
    HAL_Delay(2);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

4、打开 STM32CubeProgrammer,选择SWV,并开始执行


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。