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

STM32CubeIDE几个调试工具使用演示

[复制链接]
STMCU小助手 发布时间:2022-8-14 15:15
微信图片_20220814151501.jpg
0 }0 @3 s: r" R. C, f

  X: H( N) s6 T
意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。# A; Z* D8 {: a5 s* ?( O* u, |- r
微信图片_20220814151458.png
5 Y0 K* f& ^9 Q- B0 c5 H1、利用Live Expression 实时显示变量数据;
/ m$ g6 S. }1 E2、利用SWV的SWO功能实现printf打印输出;) G+ I" F! e; @  r) y# v" O
3、利用SWV实现数据实时跟踪动态图形显示;
* ], I+ q% W. e$ E6 A4、利用CubeIDE集成的串口终端软件实现printf输出;
1 b0 c) _* b1 o6 g
, Z& h9 e% F7 [  S8 l2 O9 S
要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。. T% B# N& r% |% g2 w7 a! C( D
/ C8 R) B  C' u: P/ h
微信图片_20220814151455.png # }  v9 C( L& ?" Z1 d9 P
1 i7 A& R$ t' q
要实现SWO输出,基于CubeMx进行配置时,要做如下操作:3 }; P; }) |! o  Q
  A6 n. l0 _6 w
微信图片_20220814151451.png   B# {; I. W2 k
8 y2 G- }" n- u/ K( y( o
然后在代码里需添加些许代码,在main文件前面加上:
6 w1 t6 ^3 }+ k#include"stdio.h"
: k4 b& S5 {; v- c1 c% u; @& O' iint __io_putchar(int ch)$ L. j  v6 F" e/ Q) b4 C! b
{- M3 i( u" u6 B0 z: h
ITM_SendChar(ch);
/ I  G: C, a( @( Jreturn(ch);}
* T- H9 u% t" i, j
) }8 n* _& s  D0 D( m. @

- V- Y3 C5 \$ e" P- r另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】:
& i( g7 }1 M/ r1 i) x: ]/* USER CODE BEGIN 4 */
0 s, |4 _% {* b6 A  gint _write(int file, char *ptr, int len)- `- J( u& n3 Z5 U  ^
{* ~0 ?7 m5 S3 g4 \3 K+ U
int DataIdx;7 n  s1 `; X; H" R
for (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );}
( y. V, @( }+ U2 Sreturn len;/ R, H" q( f! B  G6 l/ m) A
}
* u8 }: g5 E% d7 b. L/* USER CODE END 4 */: s, M' s2 f" n2 y- c# P6 b9 V
【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】
" B  z, f4 S9 ?1 u# ?7 ]8 K) n- M5 n/ U- \8 b% @
我这里定义了几个全局变量,通过Live Expression和SWO 打印输出结果。# l( v6 ]8 U% g! a
uint8_t countcir=0;7 R5 V% t- O, O( }4 q" _, q% N
floatVar1=0.0;5 o; k$ O, I1 ]$ f5 W; U
float  Var2=0.0;
8 K! ?! W0 ]1 X
. c; P% `0 L1 X8 I6 B& D$ I1 a4 f
要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:, s" V% r7 K3 [) l- Q; ^

# V9 T& F* u' o& V; p; a
微信图片_20220814151447.png ' \$ }  T* n) o" c$ {

  e1 F: ^; ^$ p+ b: L编译完成后,点击小虫子图标进入调试状态并运行:/ X2 w1 D+ o9 b

: c, \% j7 b1 K2 a$ n* Q3 D
微信图片_20220814151444.png
( z9 d, w: A2 N# T5 m6 j& q( F  T; ^5 ]
我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。: w: Q, K2 J/ f' ?% q" i% a: f

  B" N/ e* V  [3 _! n" t% T# u
微信图片_20220814151440.png
7 n0 C4 Y) o# O2 g& _( o6 L
1 D& L, O8 D' D9 ]' D: f+ m$ k如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV  Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。% b# i3 V+ [& u5 Y6 ~7 L: {
这里我对变量countcirVar2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】) b8 t1 A: _) Z, J- Q! J+ ~- E
9 M. i  H& D' q* P2 L: \. M
微信图片_20220814151435.png 7 n. x( z+ w+ S$ p) Z. ]3 ~

  n- D9 f2 }3 D7 v配置完成确认后,再进入调试状态并运行,可以看到下面结果:; ?6 ^1 @9 V. a6 L1 I* r( G- w
0 ~: r$ I2 T" T  s$ @2 l. ?  n) U
微信图片_20220814151431.png $ s7 Y6 v' n, n6 c/ P. L* z
上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。
5 d2 ?: y" K8 u  @  o1 c$ c) o
顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。% N7 Q  z' h7 ]# \- c( D) j
) x3 Z# p8 Z# j4 A
微信图片_20220814151428.png
8 @7 H8 B, E  T/ o# k
5 H% A% d# U# F2 Z' t% a5 }下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。' w  R8 H6 s8 O' }+ j" j
当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置
5 p; j; T, b; M" O
6 G$ q1 r: B2 w& ~  O% d3 w$ K

% E' J% Y5 P' U6 `( |0 e 微信图片_20220814151425.png # ]' N* W  s3 P1 |" t. \, j
, p7 e' g$ d% Z) C4 o' \
当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。% Z" O$ g1 K6 v# f
以CubeIDE为例,在main()前面添加下面代码:
% q; e) Q1 m6 J/* USER CODE BEGIN PM */0 @* a+ n8 E* U7 l. A) K9 v
#ifdef __GNUC__& c6 f* E$ I8 ~  }  u( A) I
/* With GCC, small printf(option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */2 ]/ e$ O) @6 Z7 f: S7 U
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch): F& W0 a. h3 z
#else8 z9 e- i3 W) H7 E* o
#define PUTCHAR_PROTOTYPE intfputc(int ch, FILE *f)
8 H0 K' k3 _; k" {7 b* }#endif/* __GNUC__ */
& }+ e5 n* X, P3 p# L- J/* USER CODE END PM */
- r- |2 ]  ?  s( J" I; w8 q5 A- T2 X  t: x
然后在用户代码区添加下面代码:
" i1 M2 w& h4 s& \. J" ^9 B/* USER CODE BEGIN 4 */
# L# P  s  N, ?9 |/* @brief Retargets the C library printffunction to the USART.*/
( v2 Q3 f' O5 m0 u7 q1 Z( z
PUTCHAR_PROTOTYPE$ V" }- a, O% U3 L5 M$ w9 ?
{
4 _: K& y- V4 t$ X6 T/* Place your implementation of fputc here */; l  |5 e) x8 E8 S+ k+ F( {
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);, x8 p5 C1 ?- D0 x
return ch;3 ]: Q4 `* w9 h5 W+ N% h0 u
}  [9 X* V9 D& @8 i9 U0 w
/* USER CODE END 4 */
7 W; T- S3 F# q  o3 @- S
, b) L, E3 i3 n. c7 B5 D
关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。
4 S0 q4 O/ @( r+ H7 f8 e
最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示:
2 a9 r5 f# T5 D) z8 n. x- H  X' y  }( u7 w" f
' D  F' `5 L; s" k1 S
微信图片_20220814151420.png ) f' _7 ?" o4 ]( j. D

, U" K% B# E2 P. F. n有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。
' ?7 s  \( H6 {, [1 x9 N/ ]5 `/ W$ G! u- R" Q* g
`1IEFP)W{[7]RA]T{W{[2JO.png

" G' H- @5 |. H8 B' }7 G7 B$ W
2 H+ i% U# i* m8 z( m6 h1 R1 H: R
1 P, S' r- @" l$ X; g6 c) T) c
收藏 1 评论0 发布时间:2022-8-14 15:15

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版