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

STM32CubeIDE几个调试工具使用演示

[复制链接]
STMCU小助手 发布时间:2022-8-14 15:15
微信图片_20220814151501.jpg
0 |1 m& [4 U, ]: s- |- P) x
" N: |( ^, x+ |( ^8 [! ?1 {
意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。
, z$ t  y. A: A* \9 t
微信图片_20220814151458.png
# r4 {5 ^, E. x, |0 j* M1、利用Live Expression 实时显示变量数据;  s% `6 N: T! Q- s1 A" s9 c
2、利用SWV的SWO功能实现printf打印输出;3 R* _- q# g3 p: t% }* ~7 [: R' U
3、利用SWV实现数据实时跟踪动态图形显示;/ _/ z6 O) }* {5 c# O  b. W( r
4、利用CubeIDE集成的串口终端软件实现printf输出;: [& s  ^( W$ ?5 d3 |

% x& @- T  b1 Z0 |' L7 h2 Y
要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。
5 V+ i( [  h$ ^* H6 D2 Y; |2 G, w% t) P  L9 G1 Y) o( r: W- r0 Y9 B
微信图片_20220814151455.png ! P5 ]1 F5 ]3 B! P* E$ {% D2 J

. v9 H; {* \9 ]/ `+ l要实现SWO输出,基于CubeMx进行配置时,要做如下操作:
5 U' J. P% ~9 u+ j, X4 r# e4 c, |
微信图片_20220814151451.png $ G1 S" K# j6 ~3 m
5 H1 j  |& P% `
然后在代码里需添加些许代码,在main文件前面加上:
* A  m3 p; d0 ?0 c" c7 W#include"stdio.h"% P9 D/ o9 z, x, g5 L
int __io_putchar(int ch), [. q. h1 T" F" e  @+ i
{
' }( g' N( {# w3 [ITM_SendChar(ch);7 S" ^9 P% |) H( ]7 |2 z
return(ch);}
# v+ R. {. D1 u/ V0 X1 L7 f" Y3 J! {0 f. n1 ~1 }

; d: K7 h! }+ ~' w8 D另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】:
( _; x! @6 S7 H$ [2 ?, g' a/* USER CODE BEGIN 4 */8 ^1 y- Q; o1 x; o. M3 t  H
int _write(int file, char *ptr, int len)
4 N3 F1 H: O, v' Z5 \4 z{
2 |. D/ ^7 ~% C7 mint DataIdx;
- `" f9 V) F1 w+ ffor (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );}
' q8 W1 G6 u6 G" a7 V9 ^return len;  J8 K2 g% X6 l2 ^
}* u) @" r  x0 |! ^) B$ Q0 U6 w
/* USER CODE END 4 */# `) L+ m9 c4 V
【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】
; d5 y1 N* {! L4 v
/ ~- b4 `: i8 t
我这里定义了几个全局变量,通过Live Expression和SWO 打印输出结果。
* f( U/ O0 Z) X* u: v, ~
uint8_t countcir=0;
: K/ ~4 m2 x% S) E1 C  B$ @, y& t. V
floatVar1=0.0;
! A+ J1 ~% g# Y: @. \' O% u8 x
float  Var2=0.0;  l5 j0 N8 R" X5 O

2 ?, V" a8 g) H) y0 y0 f; r
要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:. D9 n. q* _# J. y

* x: `  A3 p  @/ A1 v) O+ ^. P
微信图片_20220814151447.png
' l$ d: g# Z! _' O2 Z4 G2 U& [$ _- ^, z, v2 A# y- \& Q! D( I# b
编译完成后,点击小虫子图标进入调试状态并运行:7 C  u4 u8 C: j$ t' t7 \1 W$ [

$ Q! F6 O. D. {# y% c
微信图片_20220814151444.png
* {' c! P, q8 U% L; _% h( {) c
6 w' H9 L0 D* Q/ ^0 K7 p1 j我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。# L0 O! s9 B# t" @& z. P
) i: d( h, v' O3 q9 u1 ^
微信图片_20220814151440.png
& F# [' ^" a( K5 _& x, l' J$ J- H/ f% Q" _4 p
如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV  Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。" ?* o: _2 h$ s  I. k, _) Z: z
这里我对变量countcirVar2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】
; a6 u: F4 M+ p. A% Z) m) c5 O% y/ {0 X
微信图片_20220814151435.png ' c& A. o  y$ y3 \/ K: D
" `6 \. B# i7 k" r* f) q) W$ d
配置完成确认后,再进入调试状态并运行,可以看到下面结果:
5 S  ^% j5 l8 {: p! [) t# Q9 M1 N  h+ E
微信图片_20220814151431.png
& Y: x9 T! C; {5 |1 i/ J8 b: c上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。
" l' r8 x  S$ L
顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。, \2 G3 E8 m" s3 |

+ K) K  b/ @- r( f. D) z
微信图片_20220814151428.png
. D  A9 g3 S( ~* ^) Y2 {
/ @! S% @$ ]$ j& }下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。' i" |& v# |  u* {  o8 Y2 T0 v
当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置
# y* q; }" ~& I; h: X8 b' F) l/ e2 i  ~; K0 S
" v9 \! Q9 k4 V3 t+ a, o
微信图片_20220814151425.png
2 e/ I- B4 x6 t2 c6 p* k' i; C9 i4 _  j
当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。
4 }  c6 V" l% e$ S' x
以CubeIDE为例,在main()前面添加下面代码:
: `0 |5 C% U; B! X9 b  b1 s; I/* USER CODE BEGIN PM */% a0 W8 J' w/ ?6 T3 b1 v
#ifdef __GNUC__
0 E  |- M1 m9 A3 E$ ?% \. @! o/* With GCC, small printf(option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */
4 Z2 q8 O0 t. a' w#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)  f$ i1 t- ]3 B- @+ c1 j
#else+ Y% q1 H: B( [7 z9 B' r. S
#define PUTCHAR_PROTOTYPE intfputc(int ch, FILE *f)$ `- ~* o$ G: N& J+ v4 G1 J
#endif/* __GNUC__ */, Y  M- j/ D* F$ L4 l
/* USER CODE END PM */
% i+ t  _$ h. ?* a4 u, f% `( [8 \  D/ h+ D
然后在用户代码区添加下面代码:
! ?4 z' E# o4 {9 J3 |1 B6 l1 |$ D/* USER CODE BEGIN 4 */
5 U4 p: r/ I) }- u1 e& \/* @brief Retargets the C library printffunction to the USART.*/
+ S: O. }& W" s% G8 V0 j
PUTCHAR_PROTOTYPE+ V7 l/ h4 B% r8 G! d. t/ q
{! G! o$ z$ f8 ]
/* Place your implementation of fputc here */
: p+ w% H5 S$ CHAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);* m& J  V' y" E8 Y
return ch;
1 G5 }9 M# @* B}2 H4 p, Z) W# r) o8 l
/* USER CODE END 4 */6 ^7 I1 v- o# @$ V$ C# D8 j

7 O) b/ Z! E" F- H: u
关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。
! ]; A6 y9 h* V8 R% p* p
最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示:
% K4 A8 h8 M% [, u8 `" m( K
7 q7 V2 {" ~) L! r

5 P0 K% m* I- S9 W7 N 微信图片_20220814151420.png
9 E* C+ W% ^- ~7 G3 h
5 f( @- W+ u: m. K有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。
( ?. X; Y6 a! n9 y  c. m
% c9 J- H  V  {! U, ?; L
`1IEFP)W{[7]RA]T{W{[2JO.png

0 Q9 _! v* S8 ]* n. l0 ^0 ~# c% ^( s: J9 h2 D! }* n

$ |; G6 Z9 X' ]  {, E
收藏 1 评论0 发布时间:2022-8-14 15:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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