本文原创作者『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模块来实现此功能。

连接引脚:

SWO输出,需要一根SWO(引脚)线,同时需要借助SWV(查看器)查看数据,我打算整理4种查看方法: ·基于Keil的『Debug(printf)Viewer』 ·基于IAR的『Terminal IO』 ·基于ST-LINK Utility的『Serial Wire Viewer』 ·基于J-Link的『SWO Viewer』

本文主要是第一种基于Keil的『Debug(printf)Viewer』,会结合STM32,ST-link和J-link工具讲述相关配置。

二、关于ITM

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

ITM 的一个主要用途,就是支持调试消息的输出(如printf 格式的输出)。

ITM 包含 32 个刺激(Stimulus)端口,允许不同的软件把数据输出到不同的端口,从而让调试主机可以把它们的消息分离开。 与基于 UART 的文字输出不同,使用 ITM 输出不会对应用程序造成很大的延迟,在 ITM 内部有一个 FIFO,它使写入的输出消息得到缓冲。

2.1 Cortex跟踪组件

为了让更多人理解ITM模块,怎样输出调试信息,这里再深入说明一下。

TPIU:Trace Port Interface Unit,跟踪端口接口单元

ITM模块属于Cortex-M内核调试组件中的一部分内容,ITM输出的消息被送往 TPIU(跟踪端口接口单元)。

这里的TPIU,对应SWO串行线输出。

提示:

1.这里TPIU要和上面说的【ITM 包含 32 个刺激(Stimulus)端口】区分开来。

2.ITM的32个刺激(Stimulus)端口并不是要对应32个SWO引脚。 32个刺激端口调试信息可通过一个SWO引脚输出,下面详细讲述。

三、SWO引脚配置

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

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

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

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

四、Keil SWO输出配置

要想在Keil MDK-ARM的Debug(printf)Viewer中输出信息,需要如下几项配置。

4.1 Keil选项配置

主要就是使能跟踪Trace,配置CPU时钟,以及ITM端口。

基于ST-Link

基于J-Link

提示:ITM端口默认使用port0,也可修改软件,实现0~31任意端口,下面讲述。

4.2 ITM发送源码

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

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

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

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

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

4.3 输出效果

五、下载

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

·STM32F103(HAL)_SWO

·STM32F411(HAL)_SWO

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

提取码:nbd3

提示:

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

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

六、说明

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

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

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

七、最后

我的博客:http://www.strongerhuang.com

我的GitHub:https://github.com/EmbeddedDevelop

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

keil debug如何在watch直接修改变量值_printf系列教程03_SWO打印输出配置,基于Keil『Debug(printf)Viewer』...相关推荐

  1. keil debug如何在watch直接修改变量值_零基础学VBA:什么是VBA?如何编写和运行VBA代码?...

    HI,大家好,我是星光,今天咱们来继续学习VBA.在上一章咱们讲了为什么要学习VBA~VBA还值不值得学~学了还有没有用~零基础学VBA编程01:VBA还能不能学?学了还有没有用? 这一章咱们再来简单 ...

  2. keil debug如何在watch直接修改变量值_python日志记录系列教程,内置logging模块(一),直接使用logging模块的基础日志记录

    前言:成熟的软件开发不可避免的要进行日志记录,python内置模块logging提供了强大的日志记录能力,本文将从多个角度,由浅入深的介绍logging的常见使用方法和一些基本概念,本此系列文章分为两 ...

  3. pythontk界面显示函数中的变量值_简单易学,西门子触摸屏3种修改变量值的方法!博图Wincc V14组态...

    应条友要求,今天分享3种修改触摸屏变量值的最常用方法! 全文约700字,通读4分钟! 看完本章,你将收获以下内容: 一:必会知识点:3种修改变量的方法及适用点 二:实例:3种方法修改触摸屏变量值 三: ...

  4. stm32F051系列教程 前哨篇 建立一个KEIL工程模板

    前哨篇:如何建立一个KEIL工程模板 本节的内容主要针对的是初学者,有个熟练使用KEIL建立ARM工程项目的朋友可以略过: 首先大家安装KEIL for arm 4.3版本以上后,找到桌面的keil图 ...

  5. ClickHouse系列教程六:源码分析之Debug编译运行

    ClickHouse系列教程: ClickHouse系列教程 根据官方文档的编译教程:How to Build ClickHouse on Linux - ClickHouse Documentati ...

  6. idea 鼠标变量_IDEA在debug时修改变量值

    初窥Linux 之 我最常用的20条命令 魏公 SecureCRTuname -avisftppartition,fsshell kshell,bshelluser,groupIPTables文件数, ...

  7. 中使用js修改变量值_谈一谈css-in-js在React项目中的使用

    一.什么是css-in-js 参考:[css in js 简介] 简单来说,传统的前端方案推崇"关注点分离"原则,HTML.CSS.JavaScript 应该各司其职,进行分离. ...

  8. java中label数值_java – 如何在JLabel中显示变量值

    我是 Java编程的新手.我想在输出窗口中显示我的变量的值,而不是在控制台视图中. 代码如下: import java.awt.BorderLayout; import javax.swing.JFr ...

  9. pycharm 运行后,如何查看变量值以及继续输入语句并运行?(非Debug , debug太慢)

    在pycharm中找到Edit Configurations并点击: 在下面位置处打上勾并保存 这样就能在控制台输入语句并运行,也可以查看变量

最新文章

  1. python gil锁存在的意义_关于python的GIL全局解释器锁的简单理解
  2. mysql系统搭建互备DB(双主)记录
  3. 基于.net载发软件的下拉框(ComBox)无法显示数据问题
  4. php 绝对刷新,vue项目线上页面刷新报404 解决方法(绝对有用)
  5. ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
  6. 【转】接口测试面试题
  7. vue面试题+答案,2021前端面试
  8. linux操作系统中ssh的默认端口号,sshd服务的默认端口号
  9. bupt2021秋季计算导论第十三次实验
  10. 网站建设费用贵和便宜有什么区别?
  11. mysql外联多表查询
  12. Samy 蠕虫代码
  13. 【机器学习】过拟合与欠拟合
  14. 博客网页代码块渲染-显示行号,一键复制,全屏显示,mac风格(基于mavon-editor或wangEditor)
  15. oracle中英文文献,库存管理外文文献及中英文翻译.doc
  16. 中文情感分析 (Sentiment Analysis) 的难点在哪?现在做得比较好的有哪几家?
  17. mysql触发器实验小结_mysql 触发器小结
  18. 挑战“数据霸权”,巴克云筑起去中心化网络
  19. 免费下载微软azure文本转语音的mp3文件
  20. axios请求拦截器错误_axios请求、拦截器

热门文章

  1. ValueError: operands could not be broadcast together with shapes解决
  2. ffmpeg推送图片到流媒体服务器
  3. 最短路径的Dijkstra算法(邻接表)
  4. FCN模型训练中遇到的困难
  5. opencv双目测距资料整理
  6. 通用c/c++的Makefile模版
  7. Java从基础进阶到高手
  8. java统计_java统计当前在线数
  9. java enumerator_简单介绍java Enumeration
  10. Mysql主主复制高可用解决方案