
01引言 - J+ l3 n5 G% l7 _& S' T STM32CubeIDE是ST官方推出的集成开发环境,集成了很多STM32的调试与开发工具。本文主要介绍如何使用SWV功能来打印输出。 + `% [6 f) o+ F6 n+ q 2 d& O! N2 L1 v 02问题描述 ! K7 P \3 P7 _+ ]1 b- _ 客户使用STM32CubeIDE开发环境,将Printf定位到串口上是正常的,但是在重定位到SWO上却出现了无法打印的问题。客户也参考了网上的教程,仍然无法实现,不知道是什么原因。 STM32CubeIDE 版本:V1.6.1, N5 N( ~8 X1 f8 s6 x ![]() 03问题分析与定位 7 ^' A' o. B) f8 p. J9 Z' n: `+ Y 首先,我们需要查找资料,在《UM2609 STM32CubeIDE user guide》的第4章中,对SWV有比较详细的介绍。此处推荐先查看官网文档,这个文档本身是非常权威的。可能你在网上也会找到关于SWV功能的介绍,但是这个文档还是必须要看的,因为这个是源头。 / Y% w/ o% `! q1 Z# Q 通过查看这个文档,知道了实现SWV的简单步骤如下: % F3 j. u) \ k. t( T$ n 第一步:在Pinout & Configuration选项中打开SWO的功能,此步骤是必须的。 % f3 A( P. W+ h4 k/ B ![]() 第二步:重定位printf的接口函数。9 d/ w# ]& A: N1 y ' V9 {5 X( P1 R; n7 h: M 这里有个简单的方法,直接在syscalls.c文件中,改写_write()函数的内容,代码如下所示。再在此文件中包含ITM_SendChar 实现的头文件core_cmX.h,此文件一般都是已经被包含在你所选择的器件型号的头文件中。6 ]# [" S0 Q! s9 g% F( ~3 G) h3 k 此处我们选择的是stm32g431xx.h,直接放在此文件的开始处即可。 ; u2 O7 k. [* O3 ]( U' F ![]() ![]() ![]() ![]() ![]() : ] m! O) }( b ![]() ![]() 推荐先复位一下工程(可选项),然后“启动跟踪/start trace”。注意:此处是先启动跟踪,之后再让程序运行起来,不能反序。 ![]() ![]() * \. ]. f* \' q a. C9 M 04小结 * r: R1 d5 B8 X9 \$ ` 其实很多的内容都已经在手册中有详细的描述,但是因为英文或者是时间的问题,我们大部分人没有时间和精力阅读完所有的文档的。所以在遇到问题时候,会阻塞你比较长时间。希望本文在你遇到困难的时候能够给你一点启示,帮你快速解决手中的问题。 - w. T* B* y) l% ` F+ p9 h |
【STM32N6570-DK评测】摄像头video encoder
【STM32N6570-DK评测】开发环境及LED debug
实战经验 | 基于STM32CubeIDE下载TouchGFX GUI应用的出错分析
实战经验 | 如何修改STM32Cube固件包的存储位置
兔哥的杂谈【002】——如何性价比更高地去编译STM32
IDE删除编译中间文件
STM32CubeIDE 快速入门指南
【NUCLEO-WB09KE评测】BLE创建服务和写特征控制LED
基于STM32CubeIDE+MPU6050做的动量轮平衡自行车(一)
【NUCLEO-WB09KE评测】使用I2C点亮一个OLED