搜索
bottom↓
回复: 229

【教程】摆脱UART,仅用JLink也能实现printf功能!! /*更新scanf*/

  [复制链接]

出0入0汤圆

发表于 2013-1-17 18:53:35 | 显示全部楼层 |阅读模式
本帖最后由 zgxcom123 于 2013-1-19 10:50 编辑

Printf函数在单片机调试过程中可谓功不可没,开发人员可以很直观很方便的获取当前程序的运行状态。但在例如STM32这样的片子中,想要实现printf,就必须借助UART。有没有办法仅凭一个JLink就实现打印功能呢?答案是肯定的,ARM公司在Cortex-M系列中采用了一种全新的调试机制——ITM,可以很轻易地通过JLink实现printf功能,从此,调试只需要一根线!…………


/**************写在前面**************/

1、  该教程的原理由ARM官网得到,经过本人的进一步测试与细化,以确保更高的可靠性

2、  本方法已在STM32F103芯片上测试通过,仿真工具分别使用了JLink V8及JLink ARM-OB STM32,均可以正常使用。理论上该方法适用于所有Cortex-M内核的IC

3、  该方法仅限在Debug环境中使用,不能完全取代UART(例如需要与上位机进行通讯时),但在一般的调试过程中,肯定是够用的

4、  笔者水平有限,教程编写无法做到面面俱全,如有考虑不周的地方还望各位多多指点



/**************硬件连接*************/

必须使用SW模式,并且必须连接SWO!很多精简版的JLink只保留了GND、SWC、SWD,若想使用此功能,必须将SWO(即JTAG模式下的TDO)管脚引出,管脚分布及对应的JTAG接口如下图:

由此可见,若想实现Debug模式下的printf函数功能,JLink最少需要4根连接线,不过跟串口比起来,硬件开销明显更小!



/**************代码编写*************/

//代码部分非常简单,分三步走!

// 1、添加ITM寄存器定义
  1. #define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))

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

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



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

  5. #define TRCENA          0x01000000
复制代码
//2、添加fputc函数以便将数据写入到ITM的Port0寄存器
  1. struct __FILE { int handle; /* Add whatever you need here */ };

  2. FILE __stdout;

  3. FILE __stdin;



  4. int fputc(int ch, FILE *f) {

  5.   if (DEMCR & TRCENA) {

  6.     while (ITM_Port32(0) == 0);

  7.     ITM_Port8(0) = ch;

  8.   }

  9.   return(ch);

  10. }
复制代码
//3、在需要的位置添加printf语句
  1. printf(“Hello World! Counter = %d\n”,cnt);

  2. //如果之前的工程中没有包含stdio.h 记得加一句 #include <stdio.h>
复制代码
/**************MDK环境下的配置*************/

注:由于本人没有安装IAR环境,因此仅能提供MDK下的配置,相关的配置项我会尽量列举并讲解详细,以便大家在IAR中能够完成

1、 打开工程配置


2、 在Debug分栏下选择调试器为JLink,并打开Setting


3、 在Port下拉栏中选择SW模式


4、 切换至Trace分栏,在CoreClock中输入当前芯片工作的主频(根据不同的IC,不同的配置,这里的数据会有所不同,需要注意),并在ITM Stimulus Ports中按照下图所示进行配置,以便让ITM Port0能够捕获信息:


5、 进入Debug模式,并在菜单中依此选择View — Serial Windows – Debug(printf) Viewer,此时窗口右下角会出现相应的窗口


6、 运行程序,此时就会看到文中第一幅图片中那样打印出的信息了!



附上ARM网站的原文连接:

http://www.keil.com/support/man/ ... race_itm_viewer.htm

2013.1.19
更新scanf功能,尚有缺陷,请大家帮助测试与完善

代码取自网络,经测试可以满足基本需求
目前缺陷缺陷:
1、输入的字符不会实时显示出来
2、第一次执行会默认输入一个‘0’

代码:

  1. //之前的fputc函数可以注释掉

  2. #pragma import(__use_no_semihosting_swi)

  3. //struct __FILE { int handle; /* Add whatever you need here */ };
  4. //    FILE __stdout;
  5. //    FILE __stdin;
  6.    
  7. int fputc(int ch, FILE *f)
  8. {
  9.     return ITM_SendChar(ch);
  10. }

  11. volatile int32_t ITM_RxBuffer;
  12. int fgetc(FILE *f)
  13. {
  14.   while (ITM_CheckChar() != 1) __NOP();
  15.   return (ITM_ReceiveChar());
  16. }

  17. int ferror(FILE *f)
  18. {
  19.     /* Your implementation of ferror */
  20.     return EOF;
  21. }

  22. void _ttywrch(int c)
  23. {
  24.     fputc(c, 0);
  25. }

  26. int __backspace()
  27. {
  28.     return 0;
  29. }
  30. void _sys_exit(int return_code)
  31. {
  32. label:
  33.     goto label;  /* endless loop */
  34. }
复制代码
主函数改为:
  1. int main(void)
  2. {
  3. int key=0;
  4.     while (1)
  5.     {
  6.         printf("input the number:");
  7.         scanf("%d",&key);
  8.         printf("\nyour input is : %d\n",key);
  9.     }
  10. }
复制代码
运行效果如下:

本帖子中包含更多资源

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

x

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-1-17 18:56:57 | 显示全部楼层
mark 不错 顶顶

出0入0汤圆

发表于 2013-1-17 18:59:52 | 显示全部楼层
这个要顶!

出100入85汤圆

发表于 2013-1-17 19:04:53 | 显示全部楼层
虽然已经用过,但是没有总结。

顶你总结

出0入0汤圆

发表于 2013-1-17 19:12:18 | 显示全部楼层
     顶一个。不错,有空测试一下。

出0入0汤圆

发表于 2013-1-17 19:24:29 | 显示全部楼层
标记一下, 谢谢分享

出0入0汤圆

发表于 2013-1-17 19:34:51 | 显示全部楼层
顶,不错!

出0入0汤圆

发表于 2013-1-17 19:49:43 | 显示全部楼层
顶一个,先收藏

出0入12汤圆

发表于 2013-1-17 19:55:44 | 显示全部楼层
噢...看来我那个JLink ARM-OB STM32要加1根线上去了

出0入0汤圆

 楼主| 发表于 2013-1-17 20:06:43 | 显示全部楼层
skynet 发表于 2013-1-17 19:55
噢...看来我那个JLink ARM-OB STM32要加1根线上去了

今天测试的时候,直接牺牲一根杜邦线

剪断一边,剥出铜芯…………………………胶带纸伺候

出0入0汤圆

发表于 2013-1-17 20:07:02 | 显示全部楼层
jlink好像要用个initialization file来使能itm功能吧?直接就可以用了?

出0入0汤圆

发表于 2013-1-17 20:10:38 来自手机 | 显示全部楼层
我用串口也只要一根先。我都只看结果。

出0入0汤圆

 楼主| 发表于 2013-1-17 20:19:09 | 显示全部楼层
wangzheyu 发表于 2013-1-17 20:07
jlink好像要用个initialization file来使能itm功能吧?直接就可以用了?

网上见到过有人用init file …………
但是我试过只要把文中几点配置好,目录下会自动生成初始化文件

出0入0汤圆

 楼主| 发表于 2013-1-17 20:19:37 | 显示全部楼层
inkfish321 发表于 2013-1-17 20:10
我用串口也只要一根先。我都只看结果。

这个貌似还可以扩充函数,将scanf也写进去

出110入0汤圆

发表于 2013-1-17 20:25:04 | 显示全部楼层
果断试用一下,现在用的uart dma输出调试信息……

出0入0汤圆

发表于 2013-1-17 20:32:10 | 显示全部楼层
顶~顶~顶~

出0入0汤圆

发表于 2013-1-17 20:43:22 | 显示全部楼层
单片机没仿真器用Printf函数就调试方便

出0入0汤圆

发表于 2013-1-17 20:45:34 | 显示全部楼层
这个好,神帖啊。

出0入24汤圆

发表于 2013-1-17 21:17:12 | 显示全部楼层
之前只有在nios上用过jtag串口,想不到arm也可以~
学习了,感谢楼主

出0入0汤圆

发表于 2013-1-17 21:21:42 来自手机 | 显示全部楼层
mark 不错 顶顶

出0入0汤圆

 楼主| 发表于 2013-1-17 21:51:52 | 显示全部楼层
ycwjl728 发表于 2013-1-17 21:17
之前只有在nios上用过jtag串口,想不到arm也可以~
学习了,感谢楼主

我就是偶然间想到NIOS的printf功能很方便,就试着google了一下
没想到还真行!!!

出0入0汤圆

发表于 2013-1-17 21:53:49 | 显示全部楼层
哦,这个着实厉害,顶起。。

出0入0汤圆

发表于 2013-1-17 21:54:30 | 显示全部楼层
itm阿 stlink也可以的。
实际上用 semihost也是一样的。。。。。

出0入0汤圆

发表于 2013-1-17 22:19:54 | 显示全部楼层
必须顶的好资料啊

出0入0汤圆

 楼主| 发表于 2013-1-17 22:31:51 | 显示全部楼层
jisaowang 发表于 2013-1-17 21:54
itm阿 stlink也可以的。
实际上用 semihost也是一样的。。。。。

应该也可以的~

不过我觉得JLink用起来更顺手(也有可能是自己不会用stlink)

出0入0汤圆

发表于 2013-1-17 22:32:56 | 显示全部楼层
这个顶一下!

出0入0汤圆

发表于 2013-1-17 22:34:10 | 显示全部楼层
mark ,那天实验一下

出0入0汤圆

发表于 2013-1-17 22:42:36 | 显示全部楼层
scanf 也支持那就更完美啦,等楼主的消息。

出0入0汤圆

发表于 2013-1-17 22:45:32 | 显示全部楼层
jlinkV8 printf

出0入0汤圆

 楼主| 发表于 2013-1-17 22:47:58 | 显示全部楼层
hujian2288 发表于 2013-1-17 22:42
scanf 也支持那就更完美啦,等楼主的消息。

正在研究,争取早日放出!

出0入0汤圆

发表于 2013-1-17 22:57:09 来自手机 | 显示全部楼层
用串口printf输出信息 经常会丢失数据 试试这个方法

出0入0汤圆

发表于 2013-1-17 23:03:24 | 显示全部楼层
神贴啊~~

出0入0汤圆

发表于 2013-1-17 23:22:27 | 显示全部楼层
用D版就是这个坏处了,买的东西能干啥都不知道。。。。你要是出了正版的价,肯定里里外外研究个透,不然对不起价

出0入0汤圆

 楼主| 发表于 2013-1-17 23:26:45 | 显示全部楼层
jisaowang 发表于 2013-1-17 23:22
用D版就是这个坏处了,买的东西能干啥都不知道。。。。你要是出了正版的价,肯定里里外外研究个透,不然对 ...

买了块F4-Discovery

开始用板载STLink…………俩小时后用不惯于是换成了自制的JLink……………………

出0入0汤圆

发表于 2013-1-17 23:33:10 来自手机 | 显示全部楼层
不错,学习了。

出0入0汤圆

发表于 2013-1-17 23:35:19 | 显示全部楼层
zgxcom123 发表于 2013-1-17 23:26
买了块F4-Discovery

开始用板载STLink…………俩小时后用不惯于是换成了自制的JLink…………………… ...

其实stlink用itm确实不怎么好用,用ulink-me jlink-edu都无问题,stlink就给我乱码。。。。
把它刷成其他的debugger估计会比较好,但是懒的飞线。。。。

出0入0汤圆

 楼主| 发表于 2013-1-17 23:37:55 | 显示全部楼层
jisaowang 发表于 2013-1-17 23:35
其实stlink用itm确实不怎么好用,用ulink-me jlink-edu都无问题,stlink就给我乱码。。。。
把它刷成其他 ...

我当时恨不得把Discovery上面的stlink锯下来……………………

后来为了不破坏完整性还是用杜邦线吧

出0入0汤圆

发表于 2013-1-17 23:39:08 | 显示全部楼层
学习学习了~~~~

出0入0汤圆

发表于 2013-1-18 06:34:44 | 显示全部楼层
回去试试

出0入0汤圆

发表于 2013-1-18 06:48:48 | 显示全部楼层
好教程,謝謝分享資訊.

出0入0汤圆

发表于 2013-1-18 14:11:29 | 显示全部楼层
这个需要顶,越来也贴近VC了

出0入0汤圆

发表于 2013-1-18 14:59:40 | 显示全部楼层
mark下,不过我现在调试的ARM7估计肯定不行,回家试试M0/M3/M4的

出0入0汤圆

发表于 2013-1-18 16:59:48 | 显示全部楼层
  标记啊,不错,很强大

出0入0汤圆

发表于 2013-1-18 17:34:51 | 显示全部楼层
这个要顶,很有帮助的技术贴

出0入0汤圆

发表于 2013-1-18 18:57:36 | 显示全部楼层
不错回头试试

出50入0汤圆

发表于 2013-1-18 22:50:18 来自手机 | 显示全部楼层
顶顶顶            mark

出0入0汤圆

发表于 2013-1-18 23:25:59 | 显示全部楼层
明早去办公室试下~

出0入0汤圆

发表于 2013-1-18 23:37:51 | 显示全部楼层
这个很有用,MARK

出0入0汤圆

发表于 2013-1-18 23:46:36 | 显示全部楼层
有空试试看看

出0入0汤圆

发表于 2013-1-19 00:03:22 | 显示全部楼层
还有此方法,太牛逼了~

出0入0汤圆

发表于 2013-1-19 04:00:43 | 显示全部楼层
gamalot 发表于 2013-1-18 14:59
mark下,不过我现在调试的ARM7估计肯定不行,回家试试M0/M3/M4的

M0就不要尝试了....不支持itm....

出0入0汤圆

发表于 2013-1-19 05:10:34 来自手机 | 显示全部楼层
串口用习惯了,基本没用过在线调试,都是直接写进去,看结果!

出0入17汤圆

发表于 2013-1-19 08:02:28 | 显示全部楼层
好东西。顶

出0入0汤圆

发表于 2013-1-19 08:11:47 | 显示全部楼层
1、ARM7到ARM9可以用CP15的DCC进行双向信息传输。
2、Cortex系列有ITM的可以用ITM+SWO(似乎也可以走Trace Port)进行Chip -> Host的单向信息传输。
3、Cortex系列因为可以不Hold CPU访问内存,可以直接读写内存完成双向信息传输。

ITM是因为一般的工具直接提供了相关功能;而别的方法需要自己编码实现。
如果你使用的开发工具具备相应的SDK,那么完全可以实现更高级的信息传输功能。

出0入18汤圆

发表于 2013-1-19 08:34:43 | 显示全部楼层
  灰常的不错  很好 哈

出0入0汤圆

发表于 2013-1-19 08:57:30 来自手机 | 显示全部楼层
这个功能不错,有空测试下,谢谢提供!

出0入0汤圆

 楼主| 发表于 2013-1-19 10:46:53 | 显示全部楼层
更新scanf函数,但存在缺陷

本人水平有限
请大家帮助测试并完善:)

出0入0汤圆

发表于 2013-1-19 10:53:01 | 显示全部楼层
回去试试.

出0入0汤圆

发表于 2013-1-19 12:28:44 | 显示全部楼层
Mark,以后可能用上

出0入0汤圆

发表于 2013-1-19 14:24:07 | 显示全部楼层
8错8错。。。。。。。

出0入0汤圆

发表于 2013-1-21 17:11:58 | 显示全部楼层
好东西,收藏了

出0入0汤圆

发表于 2013-1-21 17:18:59 | 显示全部楼层
学习!Jlink printf

出0入0汤圆

发表于 2013-1-21 17:21:05 | 显示全部楼层
回去试试,回来在顶

出0入0汤圆

 楼主| 发表于 2013-1-21 17:21:44 | 显示全部楼层
lpc1788 发表于 2013-1-21 17:21
回去试试,回来在顶

谢谢支持!!

出0入0汤圆

发表于 2013-1-21 18:26:32 | 显示全部楼层
之前就在别的群里见过有人讨论这个,可惜不知道手里这个ob的下载线有没有引出那个口啊!

出50入0汤圆

发表于 2013-1-21 19:39:52 | 显示全部楼层
这个得mark一下,用得上。

出0入0汤圆

发表于 2013-1-21 20:29:14 | 显示全部楼层
却是好用啊。

出0入0汤圆

发表于 2013-1-22 00:10:27 | 显示全部楼层
好东西,很有用,学习

出0入0汤圆

发表于 2013-1-22 08:08:16 来自手机 | 显示全部楼层
记号,回家看

出0入0汤圆

发表于 2013-1-22 08:20:54 | 显示全部楼层
本帖最后由 dr2001 于 2013-1-22 08:45 编辑

ITM自身是不能从外部获得数据的,PC向MCU发数据都没办法走ITM,必须用其它的手段;当然,CortexM系列能够用的手段相对比较多一些,而且在特定情况下可以不影响内核执行代码。

scanf在CMSIS里边使用DAP访问特定地址的变量实现的,对内核没啥影响。第一个字节是0的问题可以通过给那个变量赋初值为EMPTY的值搞定。

出0入0汤圆

发表于 2013-1-22 08:26:15 | 显示全部楼层
jlinkV8 printf

出0入4汤圆

发表于 2013-1-22 08:31:52 | 显示全部楼层
好东西,一定要试试。

出0入0汤圆

发表于 2013-1-22 09:29:29 | 显示全部楼层
好给力的方法,有空测试下,谢谢分享

出0入0汤圆

发表于 2013-1-22 10:13:45 | 显示全部楼层
果断回去试试LZ方法

出0入0汤圆

发表于 2013-1-22 10:17:12 | 显示全部楼层
非常有用,一定要顶啊!

出0入0汤圆

发表于 2013-1-22 13:34:19 | 显示全部楼层
不错,顶!
Jlink printf scanf

出0入0汤圆

发表于 2013-1-22 21:41:41 | 显示全部楼层
mark it , use later

出0入0汤圆

发表于 2013-1-23 09:13:31 | 显示全部楼层
优点:解放了硬件串口;
缺点:依赖于发开环境,没法离线使用;

出0入0汤圆

发表于 2013-1-23 20:08:36 | 显示全部楼层
调试stm32 不用串口,直接用JLINK ,太好了,收藏

出0入0汤圆

发表于 2013-1-23 20:45:06 | 显示全部楼层
Onsunsl 发表于 2013-1-23 09:13
优点:解放了硬件串口;
缺点:依赖于发开环境,没法离线使用;

可以离线用,但是scanf需要事先约定一些东西;printf基本不需要。
即便自己写代码也不是非常麻烦,相关资料都是公开的。

出0入0汤圆

发表于 2013-1-24 07:21:33 来自手机 | 显示全部楼层
收藏 谢谢

出0入0汤圆

 楼主| 发表于 2013-1-24 10:35:09 | 显示全部楼层
dr2001 发表于 2013-1-23 20:45
可以离线用,但是scanf需要事先约定一些东西;printf基本不需要。
即便自己写代码也不是非常麻烦,相关资 ...

也就是说需要自己再定制一个工具,能够解析相关端口的协议?

出0入0汤圆

发表于 2013-1-24 11:24:25 | 显示全部楼层
zgxcom123 发表于 2013-1-24 10:35
也就是说需要自己再定制一个工具,能够解析相关端口的协议?

理论上,启动SWO只需要很简单的工具就行,只不过我懒得详细查资料测试了。

1、一个CMOS电平的串口,电平需要和MCU的JTAG接口符合。
2、CTS/RTS中输出的那根线和TXD连接到SWD的引脚上;RXD连接到SWO。
3、用那几个线进行翻转,完成SWD的切换;SWO这时候理论上就启动了。(如果SWO和JTAG复用,这个步骤必须用外部工具完成。)
4、用串口就能直接读到ITM报文,程序解析报文就行了,注意波特率。

以上操作用MCU实现是一样的。

用户代码需要自己设置那一堆允许ITM输出而需要设置的寄存器,说白了就是Jlink那个设置页面上选的基本上都要设置。总共也没几个。

出0入0汤圆

 楼主| 发表于 2013-1-24 11:28:38 | 显示全部楼层
dr2001 发表于 2013-1-24 11:24
理论上,启动SWO只需要很简单的工具就行,只不过我懒得详细查资料测试了。

1、一个CMOS电平的串口,电平 ...

非常详细!!谢谢指点!!!

没想到居然跟串口有这么大的联系~~~

出0入0汤圆

发表于 2013-1-24 12:37:04 | 显示全部楼层
还有这个功能,不错,值得借鉴

出0入0汤圆

发表于 2013-1-24 12:40:46 | 显示全部楼层
牛x 啊。。。

出0入18汤圆

发表于 2013-1-24 13:23:10 | 显示全部楼层
这个必须MARK啊  

出0入0汤圆

发表于 2013-1-24 13:36:01 | 显示全部楼层
顶。
不过ITM是什么东西啊?

出0入0汤圆

发表于 2013-1-24 13:55:15 | 显示全部楼层
zgxcom123 发表于 2013-1-24 11:28
非常详细!!谢谢指点!!!

没想到居然跟串口有这么大的联系~~~ ...

ITM SWO输出的格式之一就是标准UART的格式;另外一个是曼彻斯特编码。

所以,重要的是从硬件上允许SWO的输出,剩下的事情都很好说。

出0入0汤圆

发表于 2013-1-24 14:39:46 | 显示全部楼层
dr2001 发表于 2013-1-24 13:55
ITM SWO输出的格式之一就是标准UART的格式;另外一个是曼彻斯特编码。

所以,重要的是从硬件上允许SWO的 ...

大神,ITM是什么意思啊,我在百度上没有找到~

出0入0汤圆

发表于 2013-1-24 15:07:14 | 显示全部楼层
本帖最后由 minchina 于 2013-1-24 15:09 编辑

keil3也可以吗?

出0入0汤圆

 楼主| 发表于 2013-1-24 15:26:01 | 显示全部楼层
minchina 发表于 2013-1-24 14:39
大神,ITM是什么意思啊,我在百度上没有找到~

STM32的官方手册中就有:

ITM是一应用驱动的跟踪源,它支持printf类的调试手段来跟踪操作系统(OS)和应用事件,并发布判定的系统信息。ITM以包的形式发布跟踪信息,它由以下部分组成:

软件跟踪:软件可以通过直接写ITM激发寄存器来发布包信息。

硬件跟踪:ITM会发布由DWT产生的信息包。

时间戳:时间戳被发布到相应的包上。ITM包含一个21位的计数器以产生时间戳。Cortex-M3的时钟或串行线观测器(Serial Wire Viewer)的位时钟率给计数器提供时钟。
由ITM发送的信息包输出到TPIU(Trace Port Interface Unit),TPIU再添加一些额外的包(参考TPIU),然后输出完整的包序列给调试器。
用户在设置或使用ITM之前,必需先使能异常调试和监视控制寄存器(Debug Exception and Monitor Control Register)的TRCEN位。

出0入0汤圆

 楼主| 发表于 2013-1-24 15:27:18 | 显示全部楼层
minchina 发表于 2013-1-24 15:07
keil3也可以吗?

没试过……………………

洒家有升级强迫症

出50入0汤圆

发表于 2013-1-24 15:41:02 | 显示全部楼层
一种新的调试程序的手段,谢谢楼主。

出0入0汤圆

发表于 2013-1-24 15:53:23 | 显示全部楼层
zgxcom123 发表于 2013-1-24 15:27
没试过……………………

洒家有升级强迫症

楼主,我的还是来不起~可以分享下工程吗?

出0入0汤圆

 楼主| 发表于 2013-1-24 16:25:28 | 显示全部楼层
minchina 发表于 2013-1-24 15:53
楼主,我的还是来不起~可以分享下工程吗?

原工程已经被我改的面目全非了=,=
现在新的工程里面直接用这个,一直没问题!

建议重新检查一下各项配置

出0入0汤圆

发表于 2013-1-24 16:27:28 | 显示全部楼层
zgxcom123 发表于 2013-1-24 16:25
原工程已经被我改的面目全非了=,=
现在新的工程里面直接用这个,一直没问题!

我用的STM32F103RBT6,根据您的更改,我一直死在了红色处的while。
int fputc(int ch, FILE *f) {
  if (DEMCR & TRCENA) {
    while (ITM_Port32(0) == 0);
    ITM_Port8(0) = ch;
  }
  return(ch);
}

出0入0汤圆

 楼主| 发表于 2013-1-24 16:52:59 | 显示全部楼层
minchina 发表于 2013-1-24 16:27
我用的STM32F103RBT6,根据您的更改,我一直死在了红色处的while。
int fputc(int ch, FILE *f) {
  if ( ...

Trace下的相关配置改好了没有?
里面的主频是要根据当前的系统时钟配置进行更改的

出0入0汤圆

发表于 2013-1-24 18:37:15 | 显示全部楼层
zgxcom123 发表于 2013-1-24 16:52
Trace下的相关配置改好了没有?
里面的主频是要根据当前的系统时钟配置进行更改的 ...

改了,我用的是72MHz。

就是改了过后,就会死在那里。

如果把Trace Setting里面的Enable的勾划去、那么会顺利执行完printf语句,但是ITM窗口同样没有任何反应、、

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-17 06:21

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

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