网上大神关于基于SWO的printf打印输出4种方式,
·基于Keil的『Debug(printf)Viewer』
·基于IAR的『Terminal IO』
·基于ST-LINK Utility的『Serial Wire Viewer』
·基于J-Link的『SWO Viewer』
现在只有 基于ST-LINK Utility SWO printf打印输出测试是有效的,记录如下:
1、main.c文件中,重定向printf到ITM,实现SWO输出
#include "stdio.h"
........
/* USER CODE BEGIN 4 */
int fputc(int ch, FILE *f)
{
ITM_SendChar(ch);
return ch;
}
/* USER CODE END 4 */
2、keil配置-1
3、keil配置-2
4、ST-LINK Utility配置
5、例程
int main(void)
{
int TEST_num=0;
........
//初始化
.......
TEST_num=3;
printf("cnt = %d\n", TEST_num);
delay_ms(1000);
TEST_num=6;
printf("cnt = %d\n", TEST_num);
}
以上测试ok。
-------------------------分隔线-----------------------分隔线-------------------------分隔线-----------------------分隔线-----------------------
问题:
如果采用keil debug方式,Debug (printf)Viewer窗口总是不断打印出 ”e0“等乱码,不知道哪里有问题
不死心又试了这个大神的方法,目前有效
Keil中使用Debug (printf) Viewer显示串口信息代替物理串口
这种方式不需要重写int fputc(int ch, FILE *f) 函数,但是如果已经重新定义过fputc函数,并且不能显示打印信息,建议注释掉fputc函数试下。
实测在keil调试的过程中,使用debug printf viewer打印信息,printf函数执行时间56us。
20220511更新:
以上删除这一步
Keil工具栏的 Manage Run-Time Environment
将STDOUT,STDIN,STDERR勾选,并设置为ITM
printf函数依然可以在debug printf viewer窗口中打印出信息。
参考:
使用SWO代替UART,实现Printf打印功能
printf系列教程05_SWO打印输出配置,基于ST-LINK Utility『SWV』
printf系列教程
-------------------------分隔线-----------------------分隔线-------------------------分隔线-----------------------分隔线-----------------------
备忘录:
printf 实现多行显示:
printf("a = %d\n b = %d\n c = %d\n d= %d\n", a,b,c,d);