stm32 SWD printf SWD调试输出

  • Post author:
  • Post category:其他



http://www.keil.com/support/man/docs/jlink/jlink_trace_itm_viewer.htm


http://armcortexm.blogs.upv.es/stm32f4-discovery-and-printf-redirection-to-debug-viewer-in-keil/



当年实习面试时面试官考我机试,keil上面写代码,然后仿真在debug view上printf数据,我当时就觉得牛叉了,一直没搞懂怎么弄的。(ps:那公司在我入职其他公司了才叫我去上班,这不是搞笑么。。。)。这几天忽然对占用一个串口作调试口这一做法很不爽了,虽然我几乎不用printf调试,我是单步调试看内存党。。。



于是我花了半个晚上google,找到上面两个教程,然后花了半个晚上测试。OKl了。有个bug未解决。



闲话少说,上图:

红圈是需要注意的地方,使用的是stlin SW模式。


需要添加以下代码:

 struct __FILE { int handle; /* Add whatever you need here */ };
    FILE __stdout;
    FILE __stdin;

int fputc(int ch, FILE *f)
{
	return ITM_SendChar(ch);
}
ITM_SendChar()是在core_m3.h中定义的,m4的芯片在core_m4.h,m7的板子懒得拿出来了。注意下我在f4discovery上试,不需要定义__FILE这个结构体也能跑,f103上不行,
看了下两个工程得stdio.h有些不同,其实都定义了__stdout,但f103工程上报未定义错误,可能我错过了啥。。。能跑就暂时没纠结这里了。
结果上图:
<img src="data:image/png;base64,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9QVue0iDW7OOTV+/ic9/PZ+0EeOVACK8s2RBBERABCapgOZQRWvEZFrqae8+2k7U09ndx0AEii1xCrExDqIinyjp7qKjuYXW1m6G1LwBoknITsRh1+Lv7qK9qgMc0NM3hNulxRj4ZZyKQx9IAYChLno6Wqhq6g62FGXH7NVi1RoxpofKeU62MeDqpe3w7/jbjmSmrr2Iq69bRYaa2xd+eWgtepO9T/6Qo2e/xEULGqj781Z27+gm6Tu3MFs/gAEjtrhEnAmx2PXD423HY7BhHnOdAys9tJS2oU1MwhZtw6Lz4HWPXGdwddHbUk5DFygxGcQ5zZg9fbTX9GDIysRuVjA0vcf7u/bx6w+n85vvric12szJR0mFBwHePvo7O2lqHMSWlYlD3TaQo/nRdi2aITwD7dRVNtPv8eLFgtkeS2J2PGpIp+1vobm1jY4hPY7kKcSrz+8YHGOdWn+g3TYaalsZRE2WtROdGE9skhXDqPFahq+URHRbFkVABERABCaPgObwibaIAOJ/38B7S7ax88MD7CntwudxM1BZjmfJjZy1YS3nzIkPPIcgstdDzYeo3v17/lB/A58/b4i2F95m724v2f/zIzYmg/n/twNfD3XvvsCeg5UcnncL/7YiAXvks6wjByHLIiACIiACIvC/XGDUJYz/fb3V+H34fF48HjUXQ8GYtY4VqxexIDcB8/Algohum5zppC26inn7zThMNoxz8smz+oi3adCrN1eMsU3E5v/cRVsaydkOMhekYDH8/9yXf+5IpXYREAEREIHPuICmsKrjf/UZiM+4vwxPBERABERABP5PCvyvPwPxf1JVOi0CIiACIiACn3EBTf+QR85AfMZ3sgxPBERABERABM60gMbv90sAcaZVpT4REAEREAER+IwLKDU1NZ/xIcrwREAEREAEREAEzrSAcvz4cXTq04XkJQIiIAIiIAIiIAITFFCys7NxOp0TLC7FREAEREAEREAERAACd2Go8zvISwREQAREQAREQAQmKhB+knJ3dzcnTpyY6HZSTgREQAREQAREYBILhAOI/v5+ysvL6ejowOdT54iQlwiIgAiIgAiIgAiMLRAOINSvPR4P1dXVREVFYTabx95C1oqACIiACIiACEx6gREBxLDGFVdcQV5e3vBHeRcBERABERABERCBEQJjBhBarRb1T14iIAIiIAIiIAIi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



版权声明:本文为janosong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。