你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2021-9-14 13:32
01引言9 @6 D: A8 [, V" M3 ]8 \2 n5 ^" y" ^
, T* c& l+ g# \+ e3 M7 u& [. O. N
STM32CubeIDE是ST官方推出的集成开发环境,集成了很多STM32的调试与开发工具。本文主要介绍如何使用SWV功能来打印输出。
9 E& [" q6 u9 n7 x( p/ f2 N+ e, W; A& ], y& L
02问题描述
" v7 T) q1 e% M* e1 c4 g9 F! W
9 r, w6 q7 X( I客户使用STM32CubeIDE开发环境,将Printf定位到串口上是正常的,但是在重定位到SWO上却出现了无法打印的问题。客户也参考了网上的教程,仍然无法实现,不知道是什么原因。 5 w+ j& d& D4 o' }2 h$ Z3 _5 ~
STM32CubeIDE 版本:V1.6.1+ |2 I8 e" e; k
硬件环境:Nucleo-G431RB

! W  |: V0 n+ D7 Q
14.png

! ]% T0 a% g6 L03问题分析与定位
2 w) G1 |$ u2 N/ a( y* ~& o3 _% J% e' F6 a7 b
首先,我们需要查找资料,在《UM2609 STM32CubeIDE user guide》的第4章中,对SWV有比较详细的介绍。此处推荐先查看官网文档,这个文档本身是非常权威的。可能你在网上也会找到关于SWV功能的介绍,但是这个文档还是必须要看的,因为这个是源头。 . T8 T* D( }8 g% c( J
( a2 d( @1 q) F2 J* T
通过查看这个文档,知道了实现SWV的简单步骤如下: ' @; b3 P+ a- g* K  |0 v

  M$ I0 ~1 N. A8 F, G! s7 c第一步:在Pinout & Configuration选项中打开SWO的功能,此步骤是必须的。 $ G- ~9 k. W4 }2 D7 b
+ z$ Z5 g* t$ Y. t
15.png

* U! B& B, g9 x% C0 y2 r7 j第二步:重定位printf的接口函数。
6 a! ^6 p, e5 s+ h! y( w  l
. k+ T: c3 m5 i- P( S2 K& I

( }5 b& g/ `+ J这里有个简单的方法,直接在syscalls.c文件中,改写_write()函数的内容,代码如下所示。再在此文件中包含ITM_SendChar 实现的头文件core_cmX.h,此文件一般都是已经被包含在你所选择的器件型号的头文件中。
3 O( V$ g# y( a4 v. R, c5 d2 g% I, I* M
此处我们选择的是stm32g431xx.h,直接放在此文件的开始处即可。
1 {" s+ X6 h, X3 O! p+ ^% N
16.png
第三步:在main.c文件中包含stdio.h这个头文件,并尝试打印printf,此处注意,打印不能很频繁,所以需要增加延时。
5 y; d! J) e$ G
17.png
全局编译一下,查看是否有错误,如果有错误,请对应提示信息修改。编译没有错误之后,我们就可以进行下一步了。 $ V5 {6 g3 l/ Y& Z) K9 M2 G

" d0 C7 U2 H. B! C4 d

5 g( i; F" v# R3 w8 x
18.png
第四步:配置仿真调试参数。打开SWV的调试功能。此处注意:Core Clock必须与你配置的时钟是一致的。此处我配置是170MHz,与我的系统时钟一致。  
) T; J$ g" g, m, g! O: O
! ?% o, c3 n* `* S- X/ A

) U8 }; j* [. S' X5 s
19.png
第五步:开始进入调试界面,并在调试界面中打开Windows-->Show;View-->SWV的ITM data Console窗口。注意,整个SWV其实是共用一个配置文件的,所以,当你打开SWV内的任意一个窗口都可以进行SWV 的配置。在这里我们只是为了查看Printf的内容,所以就选择了SWV ITM Data Console窗口。关于这里边其他几个部分的详细说明参考UM2609的4.3章节的内容。
4 |$ [) m$ a7 \, M% \. A# r
20.png
此窗口打开后,需要新增一个Port端口。默认TIM中使用的就是0端口,所以我们直接选0即可。
+ y% A8 S. _- E7 E, t* ]
" m; C! Q. i# K# f; Q3 ^" d* e

* ~6 ~! Q# x% f% ], g1 v7 r
21.png
选择点击配置按钮对参数进行配置。配置情况如下:
0 |1 Q! y5 [! ^( S7 W. K/ V# ]
22.png
0 [8 g8 X  {6 z; v( v( c
推荐先复位一下工程(可选项),然后“启动跟踪/start trace”。注意:此处是先启动跟踪,之后再让程序运行起来,不能反序。
1 ?5 G  A5 c& u; H7 G
23.png
此时即可看到打印出来的内容了。 8 n1 X; L4 a# ^* j. h1 \/ i4 C
24.png
最后打印输出的状态3 X# }" w7 [) n' S. b+ w/ r

3 V4 v8 z& q% R* Q! Z
& W: J- }1 E& K! _
04小结9 k# G2 @7 h: L9 E$ R( k: f' ^! c7 D
" r2 u; a8 S+ Q& S: r
" R; U/ T6 K# n$ `8 Q4 Y" m3 q6 Y9 L5 {
其实很多的内容都已经在手册中有详细的描述,但是因为英文或者是时间的问题,我们大部分人没有时间和精力阅读完所有的文档的。所以在遇到问题时候,会阻塞你比较长时间。希望本文在你遇到困难的时候能够给你一点启示,帮你快速解决手中的问题。) \) `+ n  K4 r
( N+ ]2 l: h& @
赞 收藏 2 评论0 发布时间:2021-9-14 13:32

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版