JLink的SWO调试设置方法
目前JLINK的功能越来越强大,为了解放UART,在调试的时候方便printf打印所需要的信息,下面说下SWO的使用方法以及步骤。
以STM32F103C8T6为例:SWO接口即为JLink的TDO接口。
实现下图的功能
第一步:按照下图设置
在Project里会生成Compiler菜单
第二部:在设置选项里操作如下选项
第三步:在代码里添加下列指令,进行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);
}
与下图一样
第四步:在main函数里,就可以直接printf打印了。
第五步:对程序进行编译下载,然后开始你debug的swo输出之旅
在debuge调试框里添加printf窗口
调试打印信息如下所示
问题总结:
使用stm32cubemx生成的代码debug不能正常运行
STM32F103出现CPU could not be halted问题的解决方案
解决办法:
将HAL_MspInit()的__HAL_AFIO_REMAP_SWJ_DISABLE();注释掉,换成
__HAL_AFIO_REMAP_SWJ_NOJTAG();