
![]() 意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。# A; Z* D8 {: a5 s* ?( O* u, |- r ![]() 1、利用Live Expression 实时显示变量数据; 2、利用SWV的SWO功能实现printf打印输出;) G+ I" F! e; @ r) y# v" O 3、利用SWV实现数据实时跟踪动态图形显示; 4、利用CubeIDE集成的串口终端软件实现printf输出; 要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。. T% B# N& r% |% g2 w7 a! C( D / C8 R) B C' u: P/ h ![]() 1 i7 A& R$ t' q 要实现SWO输出,基于CubeMx进行配置时,要做如下操作:3 }; P; }) |! o Q A6 n. l0 _6 w ![]() 8 y2 G- }" n- u/ K( y( o 然后在代码里需添加些许代码,在main文件前面加上: #include"stdio.h" int __io_putchar(int ch)$ L. j v6 F" e/ Q) b4 C! b {- M3 i( u" u6 B0 z: h ITM_SendChar(ch); return(ch);} 另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】: /* USER CODE BEGIN 4 */ int _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++ );} return len;/ R, H" q( f! B G6 l/ m) A } /* USER CODE END 4 */: s, M' s2 f" n2 y- c# P6 b9 V 【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】 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; 要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:, s" V% r7 K3 [) l- Q; ^ ![]() 编译完成后,点击小虫子图标进入调试状态并运行:/ X2 w1 D+ o9 b ![]() 5 m6 j& q( F T; ^5 ] 我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。: w: Q, K2 J/ f' ?% q" i% a: f ![]() 如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。% b# i3 V+ [& u5 Y6 ~7 L: { 这里我对变量countcir和Var2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】) b8 t1 A: _) Z, J- Q! J+ ~- E 9 M. i H& D' q* P2 L: \. M ![]() 配置完成确认后,再进入调试状态并运行,可以看到下面结果:; ?6 ^1 @9 V. a6 L1 I* r( G- w 0 ~: r$ I2 T" T s$ @2 l. ? n) U ![]() 上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。 顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。% N7 Q z' h7 ]# \- c( D) j ) x3 Z# p8 Z# j4 A ![]() 下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。' w R8 H6 s8 O' }+ j" j 当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置。 ![]() , p7 e' g$ d% Z) C4 o' \ 当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。% Z" O$ g1 K6 v# f 以CubeIDE为例,在main()前面添加下面代码: /* 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) #endif/* __GNUC__ */ /* USER CODE END PM */ " I; w8 q5 A- T2 X t: x 然后在用户代码区添加下面代码: /* USER CODE BEGIN 4 */ /* @brief Retargets the C library printffunction to the USART.*/ PUTCHAR_PROTOTYPE$ V" }- a, O% U3 L5 M$ w9 ? { /* 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 */ 关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。 最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示: - H X' y }( u7 w" f ' D F' `5 L; s" k1 S ![]() 有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。 / ]5 `/ W$ G! u- R" Q* g ![]() |
STM32
STM32C071RBT6外部中断LED点亮熄灭
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
新版STM32Cube for Visual Studio Code开发体验
【STM32N6570-DK评测】摄像头video encoder
实战经验 | STM32CubeIDE实用技巧之工程联调
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
【下载问题解决】关于ST官网下载软件问题解决
【STM32N6570-DK评测】开发环境及LED debug
实战经验 | 基于STM32CubeIDE下载TouchGFX GUI应用的出错分析