热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于STM32CubeProg、『SerialWireViewer』SWO打印输出

关注星标公众号,不错过精彩内容作者|strongerHuang微信公众号|嵌入式专栏本文原创首发于公众号『嵌入式专栏』,为《printf系列教程》的一篇

关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏

本文原创首发于公众号『嵌入式专栏』,为《printf系列教程》的一篇,后台回复“printf系列教程”更多该系列更多内容。

1写在前面

SWD:Serial Wire Debug,串行线调试

SWO:Serial Wire Output,串行线输出

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

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

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

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

连接引脚:

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

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

·基于IAR的『Terminal IO』

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

·基于J-Link的『SWO Viewer』

·基于STM32CubeProg的『Serial Wire Viewer』

本文主要是第三种基于STM32CubeProg的『Serial Wire Viewer』,会结合STM32,ST-link工具讲述相关配置。

想更加了解ITM&#xff0c;请参看《printf系列教程03》中第二章节<关于ITM>。

2SWO引脚配置

SWO引脚可以理解为UART的Tx引脚&#xff0c;如果不连接此引脚&#xff0c;则&#xff08;SWV&#xff09;终端不会接收打印信息。

对于STM32而言&#xff0c;只要是Cortex-M3/M4/M7内核的MCU都有SWO引脚

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

在STM32CubeMX工具中&#xff0c;Debug选项进行如下配置即可。

3SWO输出代码

在STM32CubeProg的『Serial Wire Viewer』显示打印信息 和 ST-LINK Utility类似&#xff0c;与Keil、IAR差异在于&#xff1a;显示的位置不同&#xff0c;MCU中代码其实一样。

3.1 重定义fputc

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

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

ITM_SendChar说明

这个函数位于core_cm3.h&#xff08;或cm4 cm7&#xff09;中&#xff0c;直接调用即可。

修改ITM端口

比如&#xff1a;修改成使用ITM端口1&#xff0c;修改该函数对应值即可&#xff1a;

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

4SWV终端配置及输出

显示终端就是STM32CubeProg这个上位机软件。

STM32CubeProg下载地址&#xff1a;

https://www.st.com/en/development-tools/stm32cubeprog.html

(公号不支持外链接&#xff0c;请复制链接到浏览器打开&#xff09;

推荐阅读我的文章&#xff1a;STM32CubeProg介绍、下载、安装和使用教程

烧写程序到MCU&#xff0c;通过ST-Link连接&#xff0c;打开STM32CubeProg软件&#xff0c;从菜单进入SWV&#xff1a;

配置时钟和使能ITM端口&#xff1a;

提示&#xff1a;ITM端口默认使用port0&#xff0c;也可修改软件&#xff08;见上面软件&#xff09;&#xff0c;实现0~31任意端口。

4.1 输出效果

提示&#xff1a;

1.CPU时钟必须相同&#xff1b;

2.ITM端口号&#xff0c;软件和查看器&#xff08;SWV&#xff09;配置须一致&#xff1b;

5下载

为方便大家理解&#xff0c;提供源码工程下载&#xff0c;参考代码&#xff1a;

STM32F103&#xff08;HAL&#xff09;_SWO

STM32F411&#xff08;HAL&#xff09;_SWO

百度网盘&#xff1a;

https://pan.baidu.com/s/1aYBuHtOgtLqLvj6SsMYlQA

提取码&#xff1a;nbd3

提示&#xff1a;

1.公众号不支持外链接&#xff0c;请复制链接到浏览器打开。

2.源码仅供个人学习参考&#xff0c;不一定适用于实际项目。

3.若链接失效&#xff0c;请关注公众号&#xff0c;回复『printf系列教程』获取最新链接。

6

说明

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

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

3.本文收录于公众号『嵌入式专栏』&#xff0c;关注微信公众号回复【printf系列教程】即可查看全系列教程。  

------------ END ------------

推荐阅读&#xff1a;

USB PD快速充电通信原理

C语言实现面向对象的原理

无MMU抢占式操作系统的抢占工作原理

关注微信公众号『strongerHuang』&#xff0c;后台回复“1024”查看更多内容&#xff0c;回复“加群”按规则加入技术交流群。

长按前往图中包含的公众号关注

点击“阅读原文”查看更多分享&#xff0c;欢迎点分享、收藏、点赞、在看。


推荐阅读
author-avatar
博客百度2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有