JLink的SWO调试设置方法

目前JLINK的功能越来越强大,为了解放UART,在调试的时候方便printf打印所需要的信息,下面说下SWO的使用方法以及步骤。

以STM32F103C8T6为例:SWO接口即为JLink的TDO接口。

实现下图的功能

JLink的SWO调试设置方法_第1张图片

 

 

第一步:按照下图设置

JLink的SWO调试设置方法_第2张图片

在Project里会生成Compiler菜单

JLink的SWO调试设置方法_第3张图片

第二部:在设置选项里操作如下选项

JLink的SWO调试设置方法_第4张图片

第三步:在代码里添加下列指令,进行printf的重定向。

#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))

#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))

#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))

 

#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))

#define TRCENA          0x01000000

struct __FILE { int handle; /* Add whatever you need here */ };

FILE __stdout;

FILE __stdin;

 

int fputc(int ch, FILE *f) {

  if (DEMCR & TRCENA) {

    while (ITM_Port32(0) == 0);

    ITM_Port8(0) = ch;

  }

  return(ch);

}

与下图一样

JLink的SWO调试设置方法_第5张图片

第四步:在main函数里,就可以直接printf打印了。

JLink的SWO调试设置方法_第6张图片

第五步:对程序进行编译下载,然后开始你debug的swo输出之旅

在debuge调试框里添加printf窗口

JLink的SWO调试设置方法_第7张图片

调试打印信息如下所示

JLink的SWO调试设置方法_第8张图片

 

 

问题总结:

      使用stm32cubemx生成的代码debug不能正常运行

      STM32F103出现CPU could not be halted问题的解决方案JLink的SWO调试设置方法_第9张图片

解决办法:

将HAL_MspInit()的__HAL_AFIO_REMAP_SWJ_DISABLE();注释掉,换成

__HAL_AFIO_REMAP_SWJ_NOJTAG();

 

 

 

你可能感兴趣的:(嵌入式软件)