微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 只使用JLINK一根线实现串口功能

只使用JLINK一根线实现串口功能

时间:10-02 整理:3721RD 点击:

这个技巧是我网上找的,并非原创,这个对于学习者来说是比较好的。

我们在调试的时候,经常会需要使用到printf指令,通过串口调试工具来查看变量的值,如果是单步或在线调试时,就需要连接JLINK和串口线,对于笔记本,现在都是需要USB转串口,使用起来比较麻烦。
经过在网上搜索,发现一个好的方法,就是只用JLINK一根线,就可以既在线调试程序,同时也可以查看printf显示的数据,方法如下:
首先,建立一个.c 的文件,内容如下:

#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;
}
然后在配置里面(Options for Target)选择调试工具为J-LINK/J-TRACE Cortex,点击Settings,选择Trace选项,使能Trace,时钟选择实际时钟,比如我是72MHz,在ITM Stimulus Ports只勾选Port0,。
最后,点击仿真,选择View---serial windows----debug viewer就可以像在串口调试工具里面一样显示了。

我们在调试的时候,经常会需要使用到printf指令,通过串口调试工具来查看变量的值,如果是单步或在线调试时,就需要连接JLINK和串口线,对于笔记本,现在都是需要USB转串口,使用起来比较麻烦。
经过在网上搜索,发现一个好的方法,就是只用JLINK一根线,就可以既在线调试程序,同时也可以查看printf显示的数据,方法如下:
首先,建立一个.c 的文件,内容如下:

#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;
}
然后在配置里面(Options for Target)选择调试工具为J-LINK/J-TRACE Cortex,点击Settings,选择Trace选项,使能Trace,时钟选择实际时钟,比如我是72MHz,在ITM Stimulus Ports只勾选Port0,。
最后,点击仿真,选择View---serial windows----debug viewer就可以像在串口调试工具里面一样显示了。


这个挺实用的,Printf的重定向

我要试试!                        

留个记号            

不管能不能用,先看看先

这个是semihosting的功能吗?

我也来试下,先谢过LZ

very useful for me

表示看不懂啊  不过还得学啊

很好啊,做个实验看一下效果!

表示看不懂啊····

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top