工程师笔记 | STM32CubeIDE SWV功能简介

cathy的头像

01、引言

STM32CubeIDE是ST官方推出的集成开发环境,集成了很多STM32的调试与开发工具。本文主要介绍如何使用SWV功能来打印输出。

02、问题描述

客户使用STM32CubeIDE开发环境,将Printf定位到串口上是正常的,但是在重定位到SWO上却出现了无法打印的问题。客户也参考了网上的教程,仍然无法实现,不知道是什么原因。

STM32CubeIDE 版本:V1.6.1

硬件环境:Nucleo-G431RB

“图片1:STM32CubeIDE版本信息"
图片1:STM32CubeIDE版本信息

03、问题分析与定位

首先,我们需要查找资料,在《UM2609 STM32CubeIDE user guide》的第4章中,对SWV有比较详细的介绍。此处推荐先查看官网文档,这个文档本身是非常权威的。可能你在网上也会找到关于SWV功能的介绍,但是这个文档还是必须要看的,因为这个是源头。

通过查看这个文档,知道了实现SWV的简单步骤如下:

第一步:在Pinout & Configuration选项中打开SWO的功能,此步骤是必须的。

“图片2:STM32CubeIDE中使能SWO功能"

第二步:重定位printf的接口函数。

这里有个简单的方法,直接在syscalls.c文件中,改写_write()函数的内容,代码如下所示。再在此文件中包含ITM_SendChar 实现的头文件core_cmX.h,此文件一般都是已经被包含在你所选择的器件型号的头文件中。

此处我们选择的是stm32g431xx.h,直接放在此文件的开始处即可。

“工程师笔记

第三步:在main.c文件中包含stdio.h这个头文件,并尝试打印printf,此处注意,打印不能很频繁,所以需要增加延时。

“工程师笔记

全局编译一下,查看是否有错误,如果有错误,请对应提示信息修改。编译没有错误之后,我们就可以进行下一步了。

“图片3:编译成功正确界面"
图片3:编译成功正确界面

第四步:配置仿真调试参数。打开SWV的调试功能。此处注意:Core Clock必须与你配置的时钟是一致的。此处我配置是170MHz,与我的系统时钟一致。

“图片4:仿真调试配置界面"
图片4:仿真调试配置界面

第五步:开始进入调试界面,并在调试界面中打开Windows-->Show;View-->SWV的ITM data Console窗口。注意,整个SWV其实是共用一个配置文件的,所以,当你打开SWV内的任意一个窗口都可以进行SWV 的配置。在这里我们只是为了查看Printf的内容,所以就选择了SWV ITM Data Console窗口。关于这里边其他几个部分的详细说明参考UM2609的4.3章节的内容。

“图片5:开启SWV
图片5:开启SWV ITM数据窗口

此窗口打开后,需要新增一个Port端口。默认TIM中使用的就是0端口,所以我们直接选0即可。

“图片6:增加输出端口"
图片6:增加输出端口

选择点击配置按钮对参数进行配置。配置情况如下:

“图片7:SWV窗口配置界面"
图片7:SWV窗口配置界面

推荐先复位一下工程(可选项),然后“启动跟踪/start trace”。注意:此处是先启动跟踪,之后再让程序运行起来,不能反序。

“图片8:启动跟踪和开始运行"
图片8:启动跟踪和开始运行

此时即可看到打印出来的内容了。

“图片9:最后打印输出的状态"
图片9:最后打印输出的状态

04、小结

其实很多的内容都已经在手册中有详细的描述,但是因为英文或者是时间的问题,我们大部分人没有时间和精力阅读完所有的文档的。所以在遇到问题时候,会阻塞你比较长时间。希望本文在你遇到困难的时候能够给你一点启示,帮你快速解决手中的问题。

来源:STM32嵌入式开发
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。