搜索
bottom↓
回复: 45

请教STM32用JLINK V8 SWD输出调试信息到ITM Viewer的问题

[复制链接]

出0入0汤圆

发表于 2010-8-1 21:24:30 | 显示全部楼层 |阅读模式
请教各位,我在用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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2010-8-1 21:31:49 | 显示全部楼层
原始的参考信息链接是这个:http://bbs.21ic.com/icview-109178-1-1.html
难道现在的J-LINK V8还是不能支持吗

出0入0汤圆

 楼主| 发表于 2010-8-2 11:04:45 | 显示全部楼层

(原文件名:swd.jpg)

上面是我原来连接用的电路,后来我按照下面的图,加入了SWO-PB3连接。但还是不能工作。
一旦在cortexM3-JLINK中选择了 trace,就会遇到
(原文件名:error1.jpg)
这样的错误。
如果去掉trace,那么在 ITM viewer中则没有任何信息出现。

出0入0汤圆

 楼主| 发表于 2010-8-2 11:08:11 | 显示全部楼层
下面是我的设置方法和J-LINK信息。

(原文件名:1.jpg)



(原文件名:2.jpg)


(原文件名:3.jpg)


(原文件名:4.jpg)

出0入0汤圆

发表于 2010-8-2 11:19:37 | 显示全部楼层
注意以下内容:
- Keil MDK版本适当更新,过旧的版本对Jlink的支持可能不够好。该同步的DLL要同步。
- Cortex M3的调试接口必须使用SWD,至少需要5线连接:Vref, SWDIO, SWCLK, SWO, GND。
- 在Keil中确认调试模式选择的SWD。

JLink设置没有什么问题。
这种设置,应该是编译通过,程序能运行,但是不一定ITM能看到输出。

STM32开ITM输出,有一个引脚功能需要手工设置,有一个寄存器。查一下手册就行了。

出0入0汤圆

 楼主| 发表于 2010-8-2 12:05:45 | 显示全部楼层
楼上很专业哈~
我现在已经连接了 Vref,SWDIO,SWCLK,SWO,GND
更换了keil下JL2CM3.DLL,由1.8.0换成了1.5.7,开启  trace不会提示select sw port了。
现在用ST的库,其中有ITM_SendChar,它已经设置了寄存器,但是我还是不能正常的看到我输出的信息。ITM Viewer中有时会看到一些hex的数据,但是不明白是什么,而且程序在运行到ITM_SendChar后,似乎就停止下来了。

  STM32Init();
  while (1)
  {
    ITM_SendChar(0xAB);
  }

下面是那个函数的定义,来源于core_cm3.h
static __INLINE uint32_t ITM_SendChar (uint32_t ch)
{
  if (ch == '\n') ITM_SendChar('\r');
  
  if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA)  &&
      (ITM->TCR & ITM_TCR_ITMENA)                  &&
      (ITM->TER & (1UL << 0))  )
  {
    while (ITM->PORT[0].u32 == 0);
    ITM->PORT[0].u8 = (uint8_t) ch;
  }  
  return (ch);
}
运行到    while (ITM->PORT[0].u32 == 0); 停止

出0入0汤圆

 楼主| 发表于 2010-8-2 13:36:27 | 显示全部楼层
如果用软件模拟,则在ITM Viewer 中,可以看到调试信息。

出0入0汤圆

 楼主| 发表于 2010-8-2 18:47:31 | 显示全部楼层
现在的测试结果,用了jlink V7,V8两个编程器。在MDK 4.12下,调试中会在core_cm3.c中的
static __INLINE uint32_t ITM_SendChar (uint32_t ch)
    while (ITM->PORT[0].u32 == 0);
处死循环。
如果不调试,断电上电运行,是正常的。但是都不能在ITM窗口看到调试信息。不明白了。。。
现在我的SWO(PB3)连接到jlink的13脚的。

出0入0汤圆

发表于 2010-8-2 19:42:30 | 显示全部楼层
我看了一下,可以用的配置和你是类似的,看看这些是不是正确:

1、写个点LED的代码,确认程序下载到Flash了。(脱开JLink,应该能正常点灯)

2、我的JLink设置:
Debug的Cache Options是一个都没选。因为我要求数据是同步的。这个应该没影响。
Debug的Download Options,两个都有。Verify应该可以不选;Download to Flash应该选上把……要不然咋用?

Trace的Core Clock要按照你初始化代码初始化后的写。
右边一竖列,就是TimeStamp,Trace Events,这个要求MCU集成ETM才好用。STM32好像是没有的,因此最好不要选。
中间的Inst Trace也是什么都不要选的。
ITM按图没问题。

3、代码上,STM32F103C8T6需要DBGMCU_CR = 1 << 5;查一下手册具体的含义。总之就是需要允许一个引脚功能,否则SWO打不出来。

4、用ITM之前,MCU的Core时钟一定要到和你在JLink Trace一样的频率,否则异步数据打出来都是乱的。(类似UART波特率匹配)

写ITM就是这样的语句
while((CM3_ITM_PORT[0] & 0x1) == 0x0)
CM3_ITM_PORT[0] = _C
就足够了。

你参考一下,我用103C8T6在Jlink V7上非常正常。当然开始的时候因为初始化什么的略微折腾了两下。

出0入0汤圆

发表于 2010-8-2 19:55:04 | 显示全部楼层
另外补充几句,可能有助于ITM调试。

就我观察到的现象,Keil MDK的Jlink驱动,会根据在Settings页面的设置,在适当的时候设置Cortex M3相关的寄存器。这样用户就不用自行设置相关寄存器,而可以直接使用ITM。
当然,此事不能保证一定在所有的Keil版本和JLink的驱动上复现。

从CM3内核实现上来说,你就视SWO是一个UART就可以了(SWO好象是有两个实现,一个是曼彻斯特编码,一个是UART)。只不过它数据的数据是经过调试接口打包过的。ITM是数据报文的一部分而已。该UART是用CM3 Core的时钟驱动的。
和串口一样,仿真器需要给定一个采样频率,然后你需要在ARM Core设置相应的分频数量。然后允许ITM相关的寄存器,并且让信号从引脚输出。最终ITM方可工作。
ITM输出就是带有Buffer的串口那样。
按串口的调试思路,比较容易搞定。

出0入0汤圆

 楼主| 发表于 2010-8-2 21:06:27 | 显示全部楼层
非常感谢dr2001,刚才调试通过了。
就是那个DBGMCU_CR的TRACE_IOEN位,需要在调试文件STM32DBG.INI中配置,默认是0,选为1即可。否则程序就会在while (ITM->PORT[0].u32 == 0);处死循环。
补充一下,Download to Flash和verify不用选上,我没有发现选中和不选的差异。
右边那些event,我选中后,有一些我看不明白的调试信息输出。研究中。
SWO速度,好像按照一定的分频,就不会出错,就像usart的波特率,只要是和标准波特率没有过大的偏差,就可以自己适应。
可怜网上的资源啊,之前只有一个德文论坛上有类似讨论,我怀疑网上资料大部分都仅仅是调试了软件模拟,没有真实硬件调试。
调试功能中有一些好像JLINK不支持,准备去买一个ULINK2试一下。

出0入0汤圆

发表于 2010-8-2 21:31:00 | 显示全部楼层
IAR 可以吗?

出0入0汤圆

发表于 2010-8-3 09:35:47 | 显示全部楼层
回复【10楼】dhyana  
-----------------------------------------------------------------------

恭喜。搞定了就好。

Download to Flash,主要是JLink自己能分辨目标是RAM还是Flash,然后调用对应策略搞定。所以Keil的有些选项究竟是什么作用,不太容易弄清楚。不影响使用的话,还是不选比较安全点。

那些Event都会通过ETM打出来调试报文,Keil的调试界面不一定解析了这些东西。或者他的JLink驱动没去解析。谁知道呢。。。
反正一般情况下用不到那些。

具体报文结构在CM3的TRM里边貌似有线索,可能需要看ETM的手册才能知道报文格式。

ITM是单向输出的,如果就是打印调试信息的话,是个很好用的东西。

出0入0汤圆

发表于 2010-8-3 09:37:12 | 显示全部楼层
回复【11楼】lzyr  
-----------------------------------------------------------------------

IAR不太清楚,你可以查查。
支持CortexM调试的话,我估计多少会支持一些的。

出0入0汤圆

 楼主| 发表于 2010-8-3 15:31:56 | 显示全部楼层
IAR据说是支持的。

dr2001很热心,我目前打印调试信息就可以了。之后准备花时间专门学习一下调试方面的东西。

出0入0汤圆

发表于 2010-8-3 23:54:04 | 显示全部楼层
好贴啊,应该裤头

出0入0汤圆

发表于 2010-8-18 19:48:11 | 显示全部楼层
又见高人,学习

出0入0汤圆

发表于 2010-10-11 11:57:22 | 显示全部楼层
最近在看trace方面的东西,mark一下~

出0入0汤圆

发表于 2010-12-29 11:21:20 | 显示全部楼层
UART 调试

出0入0汤圆

发表于 2011-1-2 21:48:20 | 显示全部楼层
请问楼主有没有在ULINK2下试验成功?

出0入0汤圆

发表于 2011-7-14 15:43:10 | 显示全部楼层
发一个在ULINK2下可用的工程,红牛开发板例程。

红牛开发板例程,可用于ULINK2仿真器。ourdev_657801UUTPRH.rar(文件大小:280K) (原文件名:ADC_test.rar)

出0入0汤圆

发表于 2011-7-17 09:47:26 | 显示全部楼层
JLINKV8的USB驱动可以发一份给我么?

出0入0汤圆

发表于 2011-7-24 21:22:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-6 19:12:27 | 显示全部楼层
mark~~~

出0入0汤圆

发表于 2011-8-17 22:00:27 | 显示全部楼层
反正发现用ULINK2  根本 就不行  让费了 我5天时间  官方的例子不行  看到隔壁一个哥们 用TI的CCS开发环境能采样到AD的波形在开发平台上显示出来  羡慕中!

MDK  官方说 用硬件 看逻辑分析仪只能看 4路   结果一个都不行  害得让费我几天时间.

出0入0汤圆

发表于 2011-8-17 22:03:34 | 显示全部楼层
请问  【20楼】 scsdwxj2005  兄弟 有没有 把硬件AD采样的 波形在 MDK  逻辑分析仪上显示正确过??

出0入0汤圆

发表于 2011-8-17 22:29:57 | 显示全部楼层
楼主的问题我遇见过,后来找了FAE解决的
1.我用的是IAR5.1版本的,后来FAE给装了6.2版本,据说低版本的用SWD用一些文件冲突;
2.VCC GND SWDIO SWDLK一个都不用上拉,FAE给出的解释是,盗版的JLINK内部19脚有5V输出,而正版的没有5V,所以接口上拉,有很多不必要的麻烦;

出0入0汤圆

发表于 2012-4-10 17:20:42 | 显示全部楼层
Mark SWD调试

出0入0汤圆

发表于 2012-6-29 17:09:24 | 显示全部楼层
写的很好 解决了很多疑问 学习了  

出0入0汤圆

发表于 2012-10-10 10:34:24 | 显示全部楼层
不错,原来这个问题这么复杂的,学习了!

出0入0汤圆

发表于 2012-11-15 21:56:14 | 显示全部楼层
好资料,学习。

出0入0汤圆

发表于 2012-11-16 09:05:14 | 显示全部楼层
学习一下,非常想实现这个先进的调试功能。

出0入30汤圆

发表于 2012-11-16 09:21:55 | 显示全部楼层
这个功能很实用。学习了。

出0入0汤圆

发表于 2013-2-11 23:09:21 | 显示全部楼层
这个帖子好多干货啊。。。。难得马一个。。。

出0入0汤圆

发表于 2013-7-11 16:11:11 | 显示全部楼层
楼上有高手

出0入0汤圆

发表于 2013-7-15 16:26:24 | 显示全部楼层
顶一顶,但是楼主没说怎么样才能设置
就是那个DBGMCU_CR的TRACE_IOEN位,需要在调试文件STM32DBG.INI中配置,默认是0,选为1即可。
求详细说明,有没有?

出0入0汤圆

发表于 2013-10-24 15:51:20 | 显示全部楼层
MDK安装目录下    Keil4\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky

出0入0汤圆

发表于 2013-10-24 15:54:08 | 显示全部楼层
参考手册RM0008上有  _WDWORD(0xE0042004, 0x00000027);  // DBGMCU_CR    第一个应该是地址,第二个参数应该是数值 ,第5个就是TRACE_IOEN 位 0x00000020

出0入0汤圆

发表于 2013-10-28 16:23:34 | 显示全部楼层
参考这个,很详细。http://www.mcu123.com/news/Artic ... up/200808/4856.html

出0入0汤圆

发表于 2013-10-28 16:24:47 | 显示全部楼层
c:\Keil\ARM\Startup\ST\STM32DBG.ini

出0入0汤圆

发表于 2013-11-11 15:56:04 | 显示全部楼层
真是好帖子,学到很多!

出0入0汤圆

发表于 2014-1-11 22:45:58 | 显示全部楼层
Keil\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky\STM32DBG.ini中是_WDWORD(0xE0042004, 0x00000027);  
Keil\ARM\Startup\ST\STM32DBG.ini中是_WDWORD(0xE0042004, 0x00000007);  
如果楼主用的是第一个文件,就不会有这个帖子了。

出0入0汤圆

发表于 2014-6-26 16:29:40 | 显示全部楼层
dhyana 发表于 2010-8-2 11:08
下面是我的设置方法和J-LINK信息。

(原文件名:1.jpg)

这里ITM的权限应该设反了,clear才是给权限。

出0入0汤圆

发表于 2017-10-18 14:56:35 | 显示全部楼层
dhyana 发表于 2010-8-2 12:05
楼上很专业哈~
我现在已经连接了 Vref,SWDIO,SWCLK,SWO,GND
更换了keil下JL2CM3.DLL,由1.8.0换成了1.5.7 ...

你的JL2CM3.DLL,是怎样从1.8.0换成了1.5.7的,我也遇到这样的问题,我用的keil是5.24.2,jlink是v8 4.92,使用jlink itm功能,使能track后,仿真时弹出出track hw not present,是JL2CM3.DLL造成的吗?要到哪里下载低版本的JL2CM3.DLL。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 11:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表