一、文档背景
在项目开发过程中,通常会使用物理串口的方式,打印log信息进行变量或者信息的查看。但是,也存在遇到某些情况下物理串口不够或者板卡上没有USB转串口模块,无法通过串口调试器打印log信息。
二、 解决的问题或者进行问题分析
在keil MDK中有一个特殊的串行窗口Debug (printf) Viewer,可以与微控制器交换数据。对于Cortex-M微控制器,该窗口显示从Instrumentation Trace Macrocell (ITM)接收的打印数据。相当于在keil mdk中通过虚拟的串口在keil mdk中直接打印log数据。
三、 如何配置使用Debug (printf) Viewer功能
1、准备软硬件环境
1)、软件:KEIL MDK Pro
2)、仿真器:Ulink Pro
3)、开发板:ATSAMV7x开发板(带SWD+ETM口)
4)、电脑环境:Windows 11
2、打开Manage Run窗口,找到Compiler->I/O组件。(如图3-2)

图3-2
3、勾选STDERR、STDIN、STDOUT三个组件,并将每个组件的Variant设置为ITM(如图3-3),然后点击OK。

图3-3
4、配置SWO trace功能。
1)、创建配置文件SAMx7_TP.ini,并写入对于SWO trace端口的配置内容,例如:ATSAMV7x芯片的trace端口的配置文件内容如下。(关于配置文件中内容,请查看Keil MDK Trace ETM功能文档)

2)、在Options窗口中的Debug-Initialization Flies处,点击...,选择上一步创建的配置文件(如图3-4-2)

图3-4-2
3)、连接好仿真器和板子后,进入Debug->settings窗口中(如图3-4-3)。

图3-4-3
4)、在打开的窗口中Debug栏将Port类型选择为SW。(如图3-4-4)

图3-4-4
5)、切换到Trace栏中,勾选Trace Enable(如图3-4-5中第1处),Trace Port类型选择"Serial Wire Output - Manchester"(如图3-4-5中第2处),将ITM Stimulus Ports的Enable的值修改为0x00000001和Privilege的值修改为0x00000000(如图3-4-5中第3处)。

图3-4-5
5、至此Debug (printf) Viewer功能就配置完成了。
四、使用Debug (printf) Viewer
1、在对应的代码处添加printf语句(如图4-1)。

图4-1
2、进入debug模式下,在view菜单栏中,找到Serial Windows->Debug(printf)Viewer窗口(如图4-2)。

图4-2
3、运行程序,就可以在Debug(printf)Viewer窗口看到printf语句输入的信息了(如图4-3)。

图4-3
五、讨论分析
1. Debug(printf)Viewer窗口最大的输出速率是多少?
2. Debug(printf)Viewer窗口最大的输出字节是否有限制?
六、结论
在物理串口不够或者板卡上没有USB转串口模块,无法通过串口调试器打印log信息的情况下,可以使用Debug(printf)Viewer窗口在Debug模式下通过printf语句输入log信息。