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

STM32CubeIDE几个调试工具使用演示

[复制链接]
STMCU小助手 发布时间:2022-8-14 15:15
微信图片_20220814151501.jpg
: B7 A2 T6 \/ u+ B: |

6 S5 W! X* p1 f8 g
意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。
- o6 H4 d9 Q3 x" g4 h- a1 l+ {
微信图片_20220814151458.png
" A" y+ O/ l4 n3 F  r1、利用Live Expression 实时显示变量数据;
0 T( k% P* x; e2、利用SWV的SWO功能实现printf打印输出;% w, @/ j# {$ C' {  @
3、利用SWV实现数据实时跟踪动态图形显示;
* L7 S0 m7 C( [' B( \3 R) V4、利用CubeIDE集成的串口终端软件实现printf输出;
# z, Y# z- e7 a) E9 `# ]% B9 c: ~/ X0 [# Z) T8 a% T
要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。
( q( U3 U) S5 f) G% \% m( O( F) s# O6 e8 X1 s. }0 F" W5 `) ?- h8 I
微信图片_20220814151455.png 5 Z, t0 _, v5 [& q$ I
6 R9 |" K0 M5 O6 X6 v* k  Q3 V
要实现SWO输出,基于CubeMx进行配置时,要做如下操作:
, W3 i) p; C  ~: F; o. V6 N$ a
# s( F. ~3 @9 u* V4 d& u
微信图片_20220814151451.png % U1 I5 J" J; L* d* W
* j' L; }' W$ a0 n) T9 P( F
然后在代码里需添加些许代码,在main文件前面加上:! w6 P0 H+ \- }- ]5 M8 r
#include"stdio.h"
& o, V. T" m# M2 m( c% \int __io_putchar(int ch)
. m, _5 _8 |- P, X; @{
, H; Z1 N8 v7 d, _6 mITM_SendChar(ch);1 B6 Q9 e0 H; u
return(ch);}
3 a- c5 B' k, L# F: c: H0 l. R5 _
# B7 q& k1 ~4 z+ j7 i$ M# Z
/ b" U+ j  m/ A' m
另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】:
2 d/ N0 V( ^- |9 ]( @8 a3 d/ e' P/* USER CODE BEGIN 4 */! r1 V: U  p; [
int _write(int file, char *ptr, int len)
- G9 @" f% Y5 X8 E* h5 M2 n{
7 r5 g7 V: W3 G+ g, h* cint DataIdx;* `, |( X# @' _+ w# J
for (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );}! [7 w, Q/ Q6 C0 i2 G: D
return len;
% w% t$ j) P3 i$ s+ A}
# Z  S* v! f. ]/ p" O/* USER CODE END 4 */4 m! T( f6 ^! s- [% [7 X% C7 R
【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】9 u; U+ k% A" i( K

! c% c  e. |- F6 C! s
我这里定义了几个全局变量,通过Live Expression和SWO 打印输出结果。: g9 k. m3 C  z; M4 b, k
uint8_t countcir=0;
# t$ O# ^3 o  I, m% ?! O
floatVar1=0.0;
7 j6 |: c7 H! L" X" Z& A4 q
float  Var2=0.0;
( A4 ?. }! O8 _/ A0 P' @9 H4 N3 J
7 x1 `* g( U1 Z5 P- s4 x
要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:
% F( I* }: V$ n2 x6 ]! ~0 `) e6 X6 N% l% O- i3 O* Q
微信图片_20220814151447.png , f4 I8 m" n( }0 Q- f! Q

- Z( o' f2 g* a1 K# ?编译完成后,点击小虫子图标进入调试状态并运行:
; r2 t9 N$ ~. o$ B0 m* E. `; M/ ]8 Z6 h7 W* V( f8 ]6 o
微信图片_20220814151444.png , b! x  n% h! s# j2 w: U% J
  r& A9 B* i, y8 |! T  U% |
我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。( V! L/ L6 M8 z* T" c! l4 c

% j3 n& c+ @8 M, o  _
微信图片_20220814151440.png 7 b! h# s, {! G
' D7 R7 l3 l5 z* ~( B; A1 L5 I4 ~' u& C
如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV  Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。
8 T  m; s0 [# i& ]$ f/ j; M2 }" d2 a
这里我对变量countcirVar2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】
- [: Y7 {, a: K0 Q
, N/ e0 x7 i0 R! z; M: N8 M
微信图片_20220814151435.png
3 z* P% e* R1 e/ \3 m* p; Y" ]) U: T, F
配置完成确认后,再进入调试状态并运行,可以看到下面结果:
  t0 c" _- D. T& `: g' X9 g) Z# k4 H/ C
微信图片_20220814151431.png
2 y% j. ^' i) O2 q1 K- @上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。
3 m4 U2 X9 v) |3 D" C' T
顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。3 n" R3 I1 P' f3 b) f! \; r4 |

! k6 {; Z( c; F' |% d3 I
微信图片_20220814151428.png
! L( d7 J- E$ h8 r( h% W& u2 O5 L$ x0 q; o0 N  N. |# i: Q
下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。
, T" a7 h( @) u) V0 e0 ?
当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置# @: h6 d% `9 l2 Z
6 p9 b9 f) |: ~. K( ~2 N+ S

  ]% R& m$ g! ?' H1 f# @' F$ t 微信图片_20220814151425.png
% }2 A2 b0 M5 I
& G) u. E+ t+ U' {当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。6 M( g+ M# C' U; g2 j* K
以CubeIDE为例,在main()前面添加下面代码:
& @+ O2 l3 B! x  L8 ~/* USER CODE BEGIN PM */6 ^2 U& W4 q6 }/ e
#ifdef __GNUC__
# w+ _3 I- R1 Z# O$ g! u, B3 s/* With GCC, small printf(option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */9 Y# I. b0 S2 n# `& ?  m
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
) v4 Z' ^( Y$ a5 O0 g#else
  A9 K( W# I* F#define PUTCHAR_PROTOTYPE intfputc(int ch, FILE *f)
- i' x* g5 @/ q4 i6 ^2 n#endif/* __GNUC__ */* L% d+ H' ?  i1 S
/* USER CODE END PM */" I+ d( V' E% p+ }7 @- o6 u; U

. J7 ^& P& p' s% M8 g5 c* u2 A2 d7 b
然后在用户代码区添加下面代码:
- |* `, Y# z9 m8 g. i; A6 ^; Q/* USER CODE BEGIN 4 */9 v) c1 j, f$ \1 b
/* @brief Retargets the C library printffunction to the USART.*/
3 ^. u5 L5 Q7 A' n: A% J8 A% ^+ V
PUTCHAR_PROTOTYPE% t. |( w! J3 P
{
" F- m3 p, a% |$ U/* Place your implementation of fputc here */
( h2 B1 z. m  D" [* Y3 C! yHAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);. j/ N# R: y& L. f0 c
return ch;$ S$ B- p% @/ d0 p# o$ f
}  N: {4 w* y9 R
/* USER CODE END 4 */) L0 Q" L5 Z8 I4 t1 \9 j3 i
0 m; p! |% E' {& Q" L2 R$ d' x
关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。
! ~$ j1 {" V6 `$ S! |
最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示:
6 k1 h# {" f! g7 I$ h' C+ W
4 `! z- g2 \  @( B" y& }; y6 y* E
: j3 s1 @# u2 f; m$ u  l
微信图片_20220814151420.png 2 i7 G6 I: L" E/ a, E2 D$ o& _. B& m
2 A* g8 c5 L. m
有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。# R8 m- d* [; w& D
4 z5 S, K' j: j# l
`1IEFP)W{[7]RA]T{W{[2JO.png
9 v1 @" P9 l" t) j+ L4 ^% E, Q

0 C* B8 j4 d: }  e3 s9 C. y* r8 q) V# C
, V- W5 E8 A# f
收藏 1 评论0 发布时间:2022-8-14 15:15

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版