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

STM32CubeIDE几个调试工具使用演示

[复制链接]
STMCU小助手 发布时间:2022-8-14 15:15
微信图片_20220814151501.jpg
1 U$ G) r  G, R& V% B; t" q

2 g* a+ q' R. N" P3 V
意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。  I) j" M) u" X. W3 e" ~4 h
微信图片_20220814151458.png ! r% K$ c0 _; ~. W. G
1、利用Live Expression 实时显示变量数据;' A6 `4 B+ P5 a8 ?) A
2、利用SWV的SWO功能实现printf打印输出;" N$ v: a# c+ }5 ]# F  j
3、利用SWV实现数据实时跟踪动态图形显示;
" e* @+ j  L2 J+ k  n9 N5 I; i7 F4、利用CubeIDE集成的串口终端软件实现printf输出;! I. K8 d1 u/ n, {+ Y) c% a0 ?
. _  @" e1 A5 e( F% C" O2 _
要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。* y, ^5 L' D5 X( J( \1 c0 C5 [

! q, U) N, N/ Q0 ]. ]% S 微信图片_20220814151455.png $ f/ M8 \5 r# F2 H- ~

6 u9 t0 x; k+ O5 b, k7 {要实现SWO输出,基于CubeMx进行配置时,要做如下操作:) E/ s+ n7 X9 \$ q' F/ s

* A2 K0 F0 a5 R' V3 @4 |+ F4 A
微信图片_20220814151451.png * g8 z# s4 @7 S8 i

3 m5 x( f' A7 F" v( o8 F然后在代码里需添加些许代码,在main文件前面加上:
9 M. q' `1 s8 V3 f- @$ h#include"stdio.h"
; f/ b3 s- ~8 z1 }3 l# t; m. N: cint __io_putchar(int ch)2 E2 m% q' v. W, g% F" d
{
; ^6 I) Y3 r$ c" xITM_SendChar(ch);2 q( N" p% t, a
return(ch);}
5 \! q3 O) ~$ F7 Q
4 P# q+ m- `- P  O, ?4 w( o
- ^7 y) f" W$ c/ _3 }+ A# n3 e
另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】:$ d+ ?8 e8 H1 l/ Q% h" ?& s) H
/* USER CODE BEGIN 4 */
( H. B; g+ o: v! J2 Zint _write(int file, char *ptr, int len)
* x" P3 U5 ~4 H{! X1 M7 G; q* \' |* a
int DataIdx;
( N% X. }: [* Q8 p! p" ^$ G7 I: v: Ffor (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );}% X* U* b: M% a/ r4 h
return len;1 a$ g/ O$ Y3 E) W; ]; R& v3 f
}: z; d8 t7 i: Y- m
/* USER CODE END 4 */- U2 i6 ^! K% L2 s8 P( b
【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】. T8 h' Z0 r1 x. ^

9 I" w' w( G$ X2 f7 E
我这里定义了几个全局变量,通过Live Expression和SWO 打印输出结果。
- R& t, {& n6 e1 q5 f9 e$ `
uint8_t countcir=0;
9 ]! G8 j1 K# U" ?
floatVar1=0.0;
/ d) U. G  V2 s% P9 \$ @$ {4 f% O
float  Var2=0.0;4 e% h) l3 Y9 _/ W; b$ u
1 O/ t% X- H+ r; j+ L
要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:
' ]& O% |( a( j/ U: Z; L' \4 J; c% ?4 i0 b2 b
微信图片_20220814151447.png
. o+ A% q5 K( z1 x6 }& K4 c8 M1 h$ d9 q" Y; H' X
编译完成后,点击小虫子图标进入调试状态并运行:0 ^) A: a+ A: K9 i2 i" m+ d, S! m/ n/ B
2 d- b# U8 G+ F  o% N
微信图片_20220814151444.png
/ Z  ?. e& ]1 ^
, k. ?& z0 Q3 ]2 S9 s我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。; _9 F6 L8 N7 B- p6 B; G
) h. ?2 B& Z5 _' j/ N" p3 y+ f
微信图片_20220814151440.png
" H2 S- [/ _3 q0 S( [) G- W; ]& ^, `; c5 i+ x
如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV  Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。
8 C$ @- O* L& [
这里我对变量countcir和Var2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】
, |9 \) E' @+ b$ c
1 z) M( y* h, g& R
微信图片_20220814151435.png
5 t3 A" p; X& {7 d$ m* @
7 J9 }' f# Z( |7 w- U6 L% x. d2 @配置完成确认后,再进入调试状态并运行,可以看到下面结果:( u- F. e0 x  d8 F
4 e3 W  y6 [; y2 S8 e. \- E
微信图片_20220814151431.png
5 S5 R0 n+ A) c7 T上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。  ^% j0 r& k0 Z8 k0 [
顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。: u2 r8 F2 r/ s& N( X; {$ R2 @0 O+ J' l
3 I1 @6 Z# Z5 W* V8 D# M
微信图片_20220814151428.png
& V- ?  {" i$ K
2 w2 F% b2 N5 R下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。7 g! T6 ?! m, L0 d
当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置。, ?8 v9 d) x0 M& X( d' K

" h/ D. n  _$ A, ]& q( Q4 c" z

" v. s5 D1 {$ C4 |4 o% ^+ ~ 微信图片_20220814151425.png
& B0 ]# S  v. T$ O+ C- P4 t: f6 `! v
当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。8 L. l1 k  z- p
以CubeIDE为例,在main()前面添加下面代码:
' W/ a' m. P6 m" n6 c8 w/* USER CODE BEGIN PM */
* E6 p1 E4 w/ ?" ?5 e; l% N. a#ifdef __GNUC__* B- X3 @- q" [  `& E
/* With GCC, small printf(option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */$ P+ v, f( `- A# K
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
$ Z8 F5 f, n8 G$ I" q#else: \5 a1 Z6 w& j9 X0 n- y2 @
#define PUTCHAR_PROTOTYPE intfputc(int ch, FILE *f)# ]' p* k* e6 e
#endif/* __GNUC__ */6 S) L' ^7 {7 E6 X( H7 w
/* USER CODE END PM */
$ ?; Y; `/ p5 r! e8 l9 z+ f
3 `- H& N, E1 y8 a! z/ Y8 t& t
然后在用户代码区添加下面代码:
5 j& k- O# ^6 l# _9 b  Q) t/* USER CODE BEGIN 4 */; P/ C: M; p. r, z' `0 \) H7 p
/* @brief Retargets the C library printffunction to the USART.*/) F4 i0 I* ?- P" G1 i' N6 S, {
PUTCHAR_PROTOTYPE- U$ l# Y  z# o3 q' E
{
& q& r- J. U) r8 C" z/* Place your implementation of fputc here */
' |7 E) z4 k  H! @' i: n7 VHAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
, g( O3 @! |* k0 M$ w$ lreturn ch;
+ S  b& t& Y0 ]3 \1 P- ]}3 b/ b" f$ j$ g. e) K
/* USER CODE END 4 */
0 b$ f' d5 r, S! A3 ^; m: A  M* u7 E( c# c* d9 n2 M
关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。4 S/ n( ]4 U* |! H, W
最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示:4 D% n6 D5 `: P$ b- ^( l5 v! @

2 ?- o2 Y2 D& |9 R1 e
. `* l+ Q% F4 y- ?0 \
微信图片_20220814151420.png 2 t! s, V2 x, P$ |+ \
- ~; _( }6 U9 h- z8 `5 i* Y: g
有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。
7 R6 Q2 F2 v' o% d
  P2 d2 W' T& s+ D
`1IEFP)W{[7]RA]T{W{[2JO.png

; ?$ A% r$ c* {$ R
2 c2 x# p) Z1 j9 G1 {
0 d5 X1 \4 _% `0 w* c5 n+ q
赞 收藏 1 评论0 发布时间:2022-8-14 15:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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