printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』本文原创作者 strongerHuan 首发于微信公众号 嵌入式专栏 同时也更新在我的个人网站 EmbeddedDeve 标签 printf SWD SWO SWV ITM JLink RTT ST Link J Link 仿真 重定义 串口映射一 写在前面 SWD SerialWireDe 串行线调试 SWO SerialWireO

本文原创作者『strongerHuang

首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop

标签:printf、 SWD、 SWO、 SWV、 ITM、 JLink-RTT、 ST-Link、 J-Link、 仿真、 重定义、 串口映射

 

一、写在前面

SWD:Serial Wire Debug,串行线调试

SWO:Serial Wire Output,串行线输出

SWV:Serial Wire Viewer,串行线查看器

ITM:Instrumentation Trace Macrocell,指令跟踪宏单元

 

SWO串行线输出是单引脚、异步串行通信,可在Cortex-M3/M4/M7上使用,并由主调试器探测支持。

它是利用Cortex内核中ITM模块来实现此功能。

连接引脚:

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

SWO输出,需要一根SWO(引脚)线,同时需要借助SWV(查看器)查看数据,我打算整理4种查看方法:

·基于Keil的『Debug(printf)Viewer』

·基于IAR的『Terminal IO』

·基于ST-LINK Utility的『Serial Wire Viewer』

·基于J-Link的『SWO Viewer』

 

本文主要是第四种基于J-Link的『SWO Viewer』,会结合STM32,ST-link和J-link工具讲述相关配置。

想更加了解ITM,请参看a href=”https://mp.weixin..com/s/lGwKyVdHkMuSOYcgASLeNg”>《printf系列教程03》中第二章节
<关于itm>

 

二、SWO引脚配置

SWO引脚可以理解为UART的Tx引脚,如果不连接此引脚,则(SWV)终端不会接收打印信息。

对于STM32而言,只要是Cortex-M3/M4/M7内核的MCU都有SWO引脚。

而Cortex-M0则没有此项功能,包含STM32F0、STM32L0和STM32G0等。

在STM32CubeMX工具中,Debug选项进行如下配置即可。

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

三、SWO输出代码

在ST-LINK Utility的『Serial Wire Viewer』显示打印信息,与Keil、IAR差异在于:显示的位置不同,MCU中代码其实一样。

3.1 重定义fputc

和UART实现printf打印输出区别就是:将重定义代码中UART发送字符,改为ITM发送字符。

int fputc(int ch, FILE *f) { ITM_SendChar(ch); return ch; }

ITM_SendChar说明 这个函数位于core_cm3.h(或cm4 cm7)中,直接调用即可。

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

修改ITM端口 比如:修改成使用ITM端口1,修改该函数对应值即可:

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

提示:若软件修改了ITM端口,需要使能对应ITM刺激(Stimulus)端口才能正常打印输出。

四、SWV终端配置及输出

显示终端就是J-Link的『SWO Viewer』这个上位机软件。

J-Link / J-Trace下载地址(Windows版本): https://www.segger.com/downloads/jlink/JLink_Windows.exe

安装之后,在安装目录下找到JLinkSWOViewer.exe

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

烧写程序到MCU,通过J-Link连接,打开JLinkSWOViewer.exe软件:

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

OK确认之后,使能ITM端口号,就会输出信息:

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

 

提示: 1.CPU时钟必须相同; 2.ITM端口号,软件和查看器(SWV)配置须一致;

 

五、下载

为方便大家理解,提供源码工程下载,参考代码:

·STM32F103(HAL)_SWO

·STM32F411(HAL)_SWO

百度网盘: https://pan.baidu.com/s/1aYBuHtOgtLqLvj6SsMYlQA

提取码:nbd3

 

提示:

1.若链接失效,请关注公众号获取最新链接。

2.源码仅供学习参考,不一定适用于实际项目。

 

六、说明

1.该文档仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号『嵌入式专栏』,关注微信公众号回复【printf系列教程】即可查看全系列教程。

 

七、最后

我的知乎: strongerHuang
我的博客: www.strongerhuang.com

关注微信公众号『strongerHuang』,在底部菜单中查看更多精彩内容!

printf系列教程06_SWO打印输出配置,基于J-Link『SWO Viewer』

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215849.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:01
下一篇 2026年3月18日 下午1:01


相关推荐

  • 谈vuex的…mapGetters

    谈vuex的…mapGetters谈vuex的…mapGetterscomputed:{…mapGetters([‘test’]),}我们在vue文件中就可以直接this.test来访问vuex中的属性了。但是…mapGetters是什么?mapGetters前用了扩展运算符”…”functionfn(){ return{a:1,b:2};}//如mapGettersvara={…

    2022年6月11日
    30
  • ubuntu过期版本软件源[通俗易懂]

    ubuntu过期版本软件源[通俗易懂]ubuntu10.04软件源国内源,参考:https://blog.csdn.net/snaking616/article/details/52966634debhttp://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/lucidmainrestricteduniversemultiversedebhttp://mi…

    2022年10月14日
    5
  • led显示屏坏点(显示器坏点多少算正常)

    LED显示器的坏点相关问题   声明:本文为博主学习时的摘录,部分内容来源于网络,如有侵权,请联系博主删除,在此感谢分享这些内容的原作者,Helpingeachother,makeprogresstogether1,名称概述:  (1) 坏点   在白屏情况下为纯黑色的点或者在黑屏下为纯白色的点。在切换至红、绿、蓝三色显示模式下此点始终在同一位置上并且始终为纯黑色或纯白色…

    2022年4月10日
    1.3K
  • bookkeeper具体做什么_reading for knowledge翻译

    bookkeeper具体做什么_reading for knowledge翻译序言,关于capCAP是分布式系统中的一个特别重要的理论。CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),三者不可得兼。CAP是NOSQL数据库的基石。分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:一致性(C):在分布式系统中的所…

    2025年7月7日
    3
  • 腾讯元宝双模型发布:混元T1升级,DeepSeek V3代码能力提升

    腾讯元宝双模型发布:混元T1升级,DeepSeek V3代码能力提升

    2026年3月13日
    3
  • dpkg命令用法[通俗易懂]

    dpkg命令用法[通俗易懂]dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包。下面是它的一些命令解释:1.安装软件命令行:dpkg-i<.debfilename>示例:dpkg-iavg71flm_r28-1_i386.deb2.安装一个目录下面所有的软件包命令行:dpkg-R示例:dpkg-R/usr/local/src3.释放软件包,但是不进行配

    2022年5月21日
    109

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号