请教各位,我在用STM32F103VBT6 , RVMDK 3.9 ,J-LINK V8的SWD口。
接线为VCC PA13 PA14 GND的四线SWD。程序中重定义了printf的fputc到ITM0.
我想在调试时候,从SWO输出调试信息,参考了一下网上的用ULINK2输出到ITM viewer的例子,自己修改了一下。但是发现用J-LINK 有些问题。
代码如下:
//ITM reg
#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);
}
如果在调试器CortexM3 JLINK选项中打开Trace,那么会收到警告信息“Trace仅能从SWO输出,请选择SWD模式”,如果不开trace,那么在ITM viewer中看不到自己的输出信息。
请问有怎么样才可以用printf输出调试信息到ITM viewer
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
难道现在的J-LINK V8还是不能支持吗
(原文件名:swd.jpg)
上面是我原来连接用的电路,后来我按照下面的图,加入了SWO-PB3连接。但还是不能工作。
一旦在cortexM3-JLINK中选择了 trace,就会遇到
(原文件名:error1.jpg)
这样的错误。
如果去掉trace,那么在 ITM viewer中则没有任何信息出现。
(原文件名:1.jpg)
(原文件名:2.jpg)
(原文件名:3.jpg)
(原文件名:4.jpg)
- Keil MDK版本适当更新,过旧的版本对Jlink的支持可能不够好。该同步的DLL要同步。
- Cortex M3的调试接口必须使用SWD,至少需要5线连接:Vref, SWDIO, SWCLK, SWO, GND。
- 在Keil中确认调试模式选择的SWD。
JLink设置没有什么问题。
这种设置,应该是编译通过,程序能运行,但是不一定ITM能看到输出。
STM32开ITM输出,有一个引脚功能需要手工设置,有一个寄存器。查一下手册就行了。
一周热门 更多>