跳转到主要内容

AT32 MCU Printf的功能使用方法

AT32 MCU Printf的功能使用方法

<strong><font color="#4e5e9e">内容概述</font> </strong>

本文档主要介绍AT芯片在Keil和IAR两种工程环境下的printf功能使用方法。其共包含如下表统计的6种方法,各方法的具体用法在具体内容中描述。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254134-1.png&…; alt=“表1. AT芯片的printf函数使用方法汇总"></center><center><i>表1. AT芯片的printf函数使用方法汇总</i></center>

<strong><font color="#4e5e9e">具体内容</font> </strong>

<strong>IAR环境下经Terminal I/O虚拟终端输出</strong>

<strong><font color="red">简介</font> </strong>

IAR提供的链接到其Terminal的驱动内就包含有常用的scanf和printf等标准输入输出驱动函数,所以工程文件可直接经IAR自带的Terminal I/O窗口实现信息交互。

<strong><font color="red">例程路径</font> </strong>

001_Printf_Test_IAR_Terminal\project\iar_v8.2

<strong><font color="red">环境及硬件设计</font> </strong>

1) 环境

本方法需在IAR环境下使用,例程支持的编译环境为IAR_V8,硬件电路板为AT-START-F403A_V1.2。

2) 硬件连接

Link/AT-Link&...connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254135-2.png&…; alt=“表2. 硬件连接关系表--(无JTDO)"></center><center><i>表2. 硬件连接关系表--(无JTDO)</i></center>

<strong><font color="red">软件设计</font> </strong>

1) 头文件

代码工程文件内添加“stdio.h”。

2) 重定向设定

Printf解除重定向(屏蔽与实际串口的重定向)。

<strong><font color="red">仿真与下载</font> </strong>

代码经编译后下载到MCU内,然后进入Debug调试环境中,经View->Terminal I/O(下图1)调出虚拟终端,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口Output栏(下图1)内,且在该窗口的Input栏内输入的数据也同样会被打印到Output窗口内。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254136-3.png&…; alt=“图1. 虚拟终端窗口路径"></center><center><i>图1. 虚拟终端窗口路径</i></center>
<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254137-4.png&…; alt=“图2. 虚拟终端交互窗口"></center><center><i>图2. 虚拟终端交互窗口</i></center>

<strong>IAR环境下重定向为串口输出</strong>

<strong><font color="red">简介</font> </strong>

将printf函数重定向到芯片内的一组实际串口,经串口TX脚输出,最后由串口助手工具进行信息交互。

<strong><font color="red">例程路径</font> </strong>

002_Printf_Test_IAR_USART2\project\iar_v8.2

<strong><font color="red">环境及硬件设计</font> </strong>

1) 环境

本方法需在IAR环境下使用,例程支持的编译环境为IAR_V8,硬件电路板为AT-START-F403A_V1.2。

2) 硬件连接

J-Link/AT-Link&...connection

J-Link/AT-Link&...connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254138-5.png&…; alt=“表3. 硬件连接关系表--(无JTDO)"></center><center><i>表3. 硬件连接关系表--(无JTDO)</i></center>

USART2 connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254139-6.png&…; alt=“表4. 硬件连接关系表--(USART)"></center><center><i>表4. 硬件连接关系表--(USART)</i></center>

<strong><font color="red">软件设计</font> </strong>

1) 头文件

代码工程文件内添加“stdio.h”;

2) 重定向设定

串口初始化并将Printf重定向到实际的串口,重定向函数如下

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254140-7.png&…; alt=“AT32 MCU Printf的功能使用方法"></center>

<strong><font color="red">仿真与下载</font> </strong>

代码经编译后下载到MCU内,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口(下图3)内。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254141-8.png&…; alt=“图3. 串口助手交互窗口"></center><center><i>图3. 串口助手交互窗口</i></center>

<strong>经Keil平台的Debug(printy) Viewer虚拟终端输出</strong>

<strong><font color="red">简介</font> </strong>

Keil平台自带有Debug(printf) Viewer接口,在ARM内核集成有常用的scanf和printf等标准输入输出驱动函数的前提下,该接口可用于标准的Printf交互。

<strong><font color="red">例程路径</font> </strong>

003_Printf_Test_Keil_JTDO\project\mdk_v5

<strong><font color="red">环境及硬件设计</font> </strong>

1) 环境

本方法需在Keil环境下使用,例程支持的编译环境为Keil_V5,硬件电路板为AT-START-F403A_V1.2

2) 硬件连接

J-Link/AT-Link&...connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254142-9.png&…; alt=“表5. 硬件连接关系表--(含JTDO)"></center><center><i>表5. 硬件连接关系表--(含JTDO)</i></center>

<strong><font color="red">软件设计</font> </strong>

1) 头文件

代码工程文件内添加“stdio.h”;

2) 跟踪引脚分配

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254143-10.png…; alt=“AT32 MCU Printf的功能使用方法"></center>

3) Printf映射

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254144-11.png…; alt=“AT32 MCU Printf的功能使用方法"></center>

<strong><font color="red">仿真与下载</font> </strong>

勾选如下图4中的Enable,并设定Core值,Core值需与系统时钟相等。

设定串口时钟,通常通过勾选如下图4中的Autodetect max SWO C1来实现。当出现打印乱码时,此时可尝试不勾选Autodetect max SWO C1,并手动修改Prescale Core Clk保证打印信息正常。

随后即可编译代码下载到MCU内,然后进入Debug调试环境中,经View->Serial Windows->Debug (printf) Viewer(下图5)调出虚拟终端窗口,然后运行代码即可看到Hello World被实际打印到了终端交互窗口(下图6)内。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254145-12.png…; alt=“图4. Trace相关设定"></center><center><i>图4. Trace相关设定</i></center>
<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254146-13.png…; alt=“图5. Keil虚拟终端窗口路径"></center><center><i>图5. Keil虚拟终端窗口路径</i></center>
<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254147-14.png…; alt=“图6. Keil虚拟终端交互窗口"></center><center><i>图6. Keil虚拟终端交互窗口</i></center>

<strong>Keil环境下重定向为串口输出(使用MicroLIB)</strong>

<strong><font color="red">简介</font> </strong>

Keil环境有自带一个MicroLIB库,其内包含一些支持Printf函数的代码,在将Printf重定向到串口输出时,勾选使用MicroLIB后可由串口助手工具进行信息交互。

<strong><font color="red">例程路径</font> </strong>

004_Printf_Test_Keil_USART2_MicroLIB\project\mdk_v5

<strong><font color="red">环境及硬件设计</font> </strong>

1) 环境

本方法需在Keil环境下使用,例程支持的编译环境为Keil_V5,硬件电路板为AT-START-F403A_V1.2

2) 硬件连接

J-Link/AT-Link&...connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254148-15.png…; alt=“表6. 硬件连接关系表--(无JTDO)"></center><center><i>表6. 硬件连接关系表--(无JTDO)</i></center>

USART2 connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254149-16.png…; alt=“表7. 硬件连接关系表--(USART)"></center><center><i>表7. 硬件连接关系表--(USART)</i></center>

<strong><font color="red">软件设计</font> </strong>

1) 头文件

代码工程文件内添加“stdio.h”;

2) Printf重定向

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254150-17.png…; alt=“AT32 MCU Printf的功能使用方法"></center>

3) MicroLIB设定

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254151-18.png…; alt=“图7. MicroLIB设定"></center><center><i>图7. MicroLIB设定</i></center>

<strong><font color="red">仿真与下载</font> </strong>

代码经编译后下载到MCU内,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口(下图8)内。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254152-19.png…; alt=“图8. 串口助手交互窗口"></center><center><i>图8. 串口助手交互窗口</i></center>

<strong>Keil环境下重定向为串口输出(不使用MicroLIB)</strong>

<strong><font color="red">简介</font> </strong>

Keil环境有自带一个MicroLIB库,其内包含一些支持Printf函数的代码。在将Printf重定向到串口输出时,如果不勾选使用MicroLIB,自行在工程文件内添加支持Printf函数的代码段,也同样可由串口助手工具进行信息交互。

<strong><font color="red">例程路径</font> </strong>

005_Printf_Test_Keil_USART2__Without_MicroLIB\project\mdk_v5

<strong><font color="red">环境及硬件设计</font> </strong>

1) 环境
2) 硬件连接

J-Link/AT-Link&...connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254153-20.png…; alt=“表8. 硬件连接关系表--(无JTDO)"></center><center><i>表8. 硬件连接关系表--(无JTDO)</i></center>

USART2 connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254154-21.png…; alt=“表9. 硬件连接关系表--(USART)"></center><center><i>表9. 硬件连接关系表--(USART)</i></center>

<strong><font color="red">软件设计</font> </strong>

1) 头文件

代码工程文件内添加“stdio.h”;

2) Printf 重定向

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254155-22.jpg…; alt=“AT32 MCU Printf的功能使用方法"></center>

3) MicroLIB设定

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254156-23.png…; alt=“图9. MicroLIB设定"></center><center><i>图9. MicroLIB设定</i></center>

4) Printf函数支持代码添加

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254157-24.png…; alt=“AT32 MCU Printf的功能使用方法"></center>

<strong><font color="red">仿真与下载</font> </strong>

代码经编译后下载到MCU内,然后全速运行代码即可看到程序主循环内的“Hello World”等内容被打印到了终端交互窗口(下图10)内。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254158-25.png…; alt=“图10. 串口助手交互窗口"></center><center><i>图10. 串口助手交互窗口</i></center>

<strong>经JLinkRTT窗口输出</strong>

<strong><font color="red">简介</font> </strong>

JLink自带有调试输出功能,在添加JLink RTT库代码后,可根据指定的指令实现代码调试输出到对应的窗口。

<strong><font color="red">例程路径</font> </strong>

006_Printf_Test_Jlink_RTT\project\mdk_v5

<strong><font color="red">环境及硬件设计</font> </strong>

1) 环境

本方法在IAR及Keil环境下均可使用,例程支持的编译环境为IAR_V8、Keil_V5,硬件电路板为AT-START-F403A_V1.2。

2) 硬件连接

J-Link connection

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254159-26.png…; alt=“表10. 硬件连接关系表--(无JTDO)"></center><center><i>表10. 硬件连接关系表--(无JTDO)</i></center>

<strong><font color="red">软件设计</font> </strong>

1) 头文件

代码工程文件内添加“stdio.h”;

2) 添加JLink RTT库代码

<ul>
<li>
<p>分别将JLink RTT库代码中的SEGGER_RTT.c和SEGGER_RTT_printf.c添加到工程文件内;</p>
</li>
<li>
<p>根据编译环境选择添加SEGGER_RTT_Syscalls_IAR.c或SEGGER_RTT_Syscalls_KEIL.c到工程文件内;</p>
</li>
</ul>

3) 输出到PC

此时,代码内调用如下SEGGER_RTT_WriteString或SEGGER_RTT_printf命令即可输出到PC端

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254160-27.png…; alt=“AT32 MCU Printf的功能使用方法"></center>

<strong><font color="red">仿真与下载</font> </strong>

1) 通过JLinkRTTClient窗口输出

代码经编译后下载到MCU内,然后进入Debug调试环境中,打开JLink安装路径下名称为JLinkRTTClient的应用程序。此时单步执行代码时即可看到打印信息被依次输出到JLinkRTTClient窗口,如下图11和图12。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254161-28.png…; alt=“图11. 代码工程Debug"></center><center><i>图11. 代码工程Debug</i></center>
<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254162-29.png…; alt=“图12. JLinkRTTClient窗口输出信息"></center><center><i>图12. JLinkRTTClient窗口输出信息</i></center>

2) 通过JLinkRTTViewer窗口输出

代码经编译后下载到MCU内,然后打开JLinkRTTViewer窗口,如下图13。

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254163-30.png…; alt=“图13. 打开JLinkRTTViewer窗口"></center><center><i>图13. 打开JLinkRTTViewer窗口</i></center>

点击OK,并在弹出的窗口再点击OK,然后在弹出的窗口输入并选择如下信息(此处以ZE系列为例),并点击OK。如下图14

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254164-31.png…; alt=“图14. device选择窗口"></center><center><i>图14. device选择窗口</i></center>

拿前述代码进入Debug调试环境中,此时单步执行代码时即可看到打印信息被依次输出到JLinkRTTViewer窗口。如下图15

<center><img src="http://mcu.eetrend.com/files/2022-05/wen_zhang_/100560465-254165-32.png…; alt=“图15. JLinkRTTViewer窗口输出信息"></center><center><i>图15. JLinkRTTViewer窗口输出信息</i></center>

<strong><font color="#4e5e9e">注意事项</font> </strong>

前述具体内容2.3和2.6的测试时,只能用J-Link,AT-Link暂不支持;

前述具体内容2.1和具体内容2.2的测试时,如果使用AT-Link的话,工程内Options→CMSIS DAP→Reset选项必须选择为Hardware或者System,不然无法连接及下载代码;

前述具体内容2.2的测试时,工程内Options→General Options→Library Configuration→Library选项必须选择为Full,不然无法正常输出。因为只有选择为Full时,支持Printf函数的代码才会被包含进来。

前述具体内容2.6.5.1测试时,因输出窗口应用程序暂时无法指定芯片型号,为保证代码与窗口型号匹配且输出正常,目前工程内Device须选择ST的型号。且工程代码内必须要勾选“Options”内的“Use MicroLIB”,不然代码编译可能会出现异常。

来源:<a href="https://mp.weixin.qq.com/s/aw0-f8RkbwH7lVTw5VmCbQ">AT32 MCU 雅特力科技</a>
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。