PS:其实只需要在main函数中增加这个话即可。
int fputc(int ch,FILE *f)
{
ITM_SendChar(ch);
return ch;
}
volatile int32_t ITM_RxBuffer;
int fgetc(FILE *f)
{
while (ITM_CheckChar() != 1) osDelay(1);
return (ITM_ReceiveChar());
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
3. 综合版本使用scanf和printf 3.1 添加retarget文件 将如下代码保存成retarget.c,然后加入到工程中。 #pragma import(__use_no_semihosting_swi) struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int ch, FILE *f) { return ITM_SendChar(ch); } volatile int32_t ITM_RxBuffer; int fgetc(FILE *f) { while (ITM_CheckChar() != 1) __NOP(); return (ITM_ReceiveChar()); } int ferror(FILE *f) { /* Your implementation of ferror */ return EOF; } void _ttywrch(int c) { fputc(c, 0); } int __backspace() { return 0; } void _sys_exit(int return_code) { label: goto label; /* endless loop */ } 3.2 编译运行 编译,烧录,运行,打开Debug (printf) viewer,就可以看到输入,参看下图 |
这里对retarget.c文件做几点说明.
1). 上面的代码实际是在X:\Keil\ARM\Startup\Retarget.c上修改而成的,scanf依赖的函数共有两个,fgetc和__backspace都需要实现,如果缺少__backespace函数,则scanf胡无法从Debug Viewer Dialog 窗口获取输入。另外上面提供的代码只是个demo,用于演示效果,用于生产时应该处理的更完善一些。见参考文献[1]
2). 函数ITM_SendChar,ITM_CheckChar,ITM_ReceiveChar在库文件CMSIS\Include\core_cm3.h中。
3) 查看函数的符号引用关系,可以通过生成详细的map文件来查看。命令行增加 –verbose –list rtt.map选项即可生成名为rtt.map的文件。
4. ITM与RTT结合(待实现)
grissiom 写道:
忽然想到,或许可以把这个半主机做成 device,然后 rt_console_set_device(“semi”) 就可以直接用半主机做 finsh/rt_kprintf 了…… 不知可行不可行……
prife: ITM的接收不知道是否支持中断,目前接收字符使用是轮询方式。如果是中断才有意义。这样可以把ITM设备做成一个 rtt 的device了,让finsh跑在 Debug printf Viewer窗口上。以后只要接一个jtag/SWD口就可以调试了,不用再接串口线了
转贴地址:https://www.douban.com/note/248637026/
Jlink/STLink自带一个SWO接口,使用这个接口配合keil可以输出一些简单的调试信息,在没有串口可以使用的时候,SWO也可很方便的打印一些信息,比如F303RE这个板子在我的电脑上一直没法安装虚拟串口的驱动,所以我可以用这个SWO输出调试信息。论坛送的STM32F303RE上自带的stlink正好有这个SWO口,而且也接到了MCU上,所以正好可以使用,好像有的ST的板子也带了这个接口,但是其中桥接电阻并没有贴到板子上,如果要使用的话,就要自己连接起来(比如STM32F429DISCO好像就没有接上)。
对于stlink的驱动好像也有一些要求,我使用keil4带的有点旧的stlink驱动就会提示驱动不支持,后来使用keil5带的stlink驱动据可以了。
复制代码 打开调试即可得到调试信息: *******************************************一天过去了***************************************
复制代码 直接在debug viewer窗口输入内容然后回车即可,输入的内容不会回显在窗口中,输入也支持中文。运行结果如下: |
转载请注明:徐自远的乱七八糟小站 » 【STM32F303开发】+ 使用SWO输出调试信息到Debug Viewer窗口 – STM32 – 意法半导体STM32/STM8技术社区