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

STM32CubeIDE SWV 功能简介

[复制链接]
STMCU小助手 发布时间:2022-8-4 23:29
1. 引言
8 D# _/ o' N, _  j  ~/ rSTM32CubeIDE 是 ST 官方推出的集成开发环境,集成了很多 STM32 的调试与开发工具。
1 Z+ q0 Q% }3 L/ \) v+ v1 z本文主要介绍如何使用 SWV 功能来打印输出。/ c) g8 b8 x- e* R: A1 d
2. 问题描述. d8 y% X$ T- G2 s/ h
客户使用 STM32CubeIDE 开发环境,将 Printf 定位到串口上是正常的,但是在重定位到SWO 上却出现了无法打印的问题。客户也参考了网上的教程,仍然无法实现,不知道是什么原因。
" F" b6 t6 a/ e& @9 Y& p6 _STM32CubeIDE 版本:V1.6.13 b% g- Z( c* ^9 c+ r% @
硬件环境:Nucleo-G431RB1 x8 W+ S* L8 `' P! L  `2 E$ ~5 Y" k
; E2 K9 r. L: c8 D5 ?2 C& d! Z2 o$ V
8 f2 `6 m& D- ~/ }$ c; I
EZ7L)IAA`[VX){M_NEUU1US.png ! B, K( R! N+ Q; m4 _) f
# {: ]; z& o/ s: K
3. 问题分析与定位& I2 Y4 ]  |4 j: w4 q" [
首先,我们需要查找资料,在《UM2609 STM32CubeIDE user guide》的第 4 章中,对于SWV 有比较详细的介绍。此处推荐先查看官网文档,这个文档本身是非常权威的。可能你在网上也会找到关于 SWV 功能的介绍,但是这个文档还是必须要看的,因为这个是源头。( L% p& O" o6 y, L+ Q3 W
通过查看这个文档,知道了实现 SWV 的简单步骤如下:
* y" t/ ?& _* C第一步:在 Pinout & Configuration 选项中打开 SWO 的功能,此步骤是必须的。
1 |  H* s2 f7 S( o: Z- t1 Y
/ ?4 p, m/ z" J% g% M( }$ @% Y! X
7 y8 e$ t" [! p# u
3~C(12@%F~1QGFAIC@}YM}U.png
1 O$ w# a' y3 U& m% y* _# I: k# P( P# e, L: S. `  a5 N

2 r" s5 f* @" ]! v# ~第二步:重定位 printf 的接口函数。
) Y. F* J; @( a( c4 j这里有个简单的方法,直接在 syscalls.c 文件中,改写_write()函数的内容,代码如下所示。再在此文件中包含 ITM_SendChar 实现的头文件 core_cmX.h,此文件一般都是已经被包含在你所选择的器件型号的头文件中。此处我们选择的是 stm32g431xx.h,直接放在此文件的开始处即可。3 O0 ^# a$ @' {  b. L. G( [$ K
  1. #include "stm32g431xx.h"8 ?! C2 i1 Y  I7 `; M5 G5 d: W
  2. __attribute__((weak)) int _write(int file, char *ptr, int len)
    2 B# V0 q6 l0 ?# f0 A. Q7 o
  3. {
    / S1 U; j# p9 H
  4. int DataIdx;2 R6 T- Y3 m& r$ }; T
  5. for (DataIdx = 0; DataIdx < len; DataIdx++)8 p) p! {+ s, g/ R3 t7 C& S
  6. {/ s- I9 F1 r9 V# L
  7. //__io_putchar(*ptr++);
    / W2 B- ~; K7 N' [4 p2 |
  8. ITM_SendChar(*ptr++);
    0 @; w3 o) @% }* ~
  9. }
    # }* `3 O6 H2 q
  10. return len;: ?# M7 x0 E4 Q! w7 U
  11. }
复制代码

) O" e/ U# G+ f5 N) o) j; e
; I- x+ }7 G6 L# w第三步,在 main.c 文件中包含 stdio.h 这个头文件,并尝试打印 printf,此处注意,打印不能很频繁,所以需要增加延时。6 r0 K# G; @: n* A+ e( d
  1. #include <stdio.h>
    $ }/ U6 I4 {- c4 K2 f) c. _: l
  2. uint8_t Count=0;' h' G- |/ }1 z9 n3 Y! p" I
  3. /* USER CODE BEGIN WHILE */
    9 `1 a1 _6 Q: j" Y
  4. while (1)0 B7 y# V1 _' C" ?' u6 }9 B+ Z
  5. {% B  A3 W7 z: q: ~" ?- G) A: v6 t
  6. HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);9 m" Z1 A( j* |+ A
  7. HAL_Delay(1000);
    % e0 q' H# R. c
  8. printf("Hello World, Count=%d\r\n", Count++);
    ) J  W5 X- {  }+ w5 X; a2 E
  9. /* USER CODE END WHILE */
    , G% _" E- E  O; s. i9 ?6 v
  10. /* USER CODE BEGIN 3 */, M: a0 K& [) l( T: t
  11. }+ _. T* V& }7 P. U) `0 x# i
  12. /* USER CODE END 3 */
复制代码

* h# k4 S$ a8 R8 n/ `
* i( ~7 {* Q" z5 x% Q全局编译一下,查看是否有错误,如果有错误,请对应提示信息修改。编译没有错误之后,我们就可以进行下一步了。
5 B4 a/ H4 F) X! e5 }3 o" p1 n: i) x

$ h8 ?& U+ B: W K)Q~IV6SX1TA[)$LK]VD(NI.png 7 V$ k& y5 i$ ^9 O# G4 F% X4 o& B# r

' c4 P7 ?- h4 U$ X

+ g. n' @, ^2 m( g# B0 `& @- P4 ~第四步,配置仿真调试参数。打开 SWV 的调试功能。此处注意:Core Clock 必须与你配置的时钟是一致的。此处我配置是 170MHz,与我的系统时钟一致。
- F" b$ E7 K9 ]* R! R9 Y+ {
# w3 A# [* {; ]- S2 z0 u2 U8 i3 f
9 `& ?/ c/ v" F0 u
5M%ID[_BDW}BY1LGG[[S{P6.png
1 u" h7 \+ T- v( q! Q
8 v( P; r* h+ I  Y" R" J( q" }) f
第五步,开始进入调试界面,并在调试界面中打开 Windows-->Show View-->SWV 的 ITM dataConsole 窗口。注意,整个 SWV 其实是共用一个配置文件的,所以,当你打开 SWV 内的任意一个窗口都可以进行 SWV 的配置。在这里我们只是为了查看 Printf 的内容,所以就选择了 SWVITM Data Console 窗口。关于这里边其他几个部分的详细说明参考 UM2609 的 4.3 章节的内容。
- S* C& z4 `1 J, A' d0 |: ~5 \6 _. p3 Q# Y
2 T" R+ @; x7 S* t2 W! Z$ d
3 }4 O) X+ ^& d/ B
完整版请查看:附件
" `* d- U% ~: t' f
) T! D4 z9 b, O9 w: ^

+ p& A8 T- e+ z' U' V8 w' _' l; T% W' z: i, z$ k

LAT1024_STM32CubeIDE_SWV_功能简介.pdf

下载

847.96 KB, 下载次数: 13

赞 收藏 评论0 发布时间:2022-8-4 23:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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