意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。 1、利用Live Expression 实时显示变量数据; 2、利用SWV的SWO功能实现printf打印输出;% w, @/ j# {$ C' { @ 3、利用SWV实现数据实时跟踪动态图形显示; 4、利用CubeIDE集成的串口终端软件实现printf输出; % B9 c: ~/ X0 [# Z) T8 a% T 要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。 # O6 e8 X1 s. }0 F" W5 `) ?- h8 I 6 R9 |" K0 M5 O6 X6 v* k Q3 V 要实现SWO输出,基于CubeMx进行配置时,要做如下操作: * j' L; }' W$ a0 n) T9 P( F 然后在代码里需添加些许代码,在main文件前面加上:! w6 P0 H+ \- }- ]5 M8 r #include"stdio.h" int __io_putchar(int ch) { ITM_SendChar(ch);1 B6 Q9 e0 H; u return(ch);} / b" U+ j m/ A' m 另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】: /* USER CODE BEGIN 4 */! r1 V: U p; [ int _write(int file, char *ptr, int len) { int DataIdx;* `, |( X# @' _+ w# J for (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );}! [7 w, Q/ Q6 C0 i2 G: D return len; } /* USER CODE END 4 */4 m! T( f6 ^! s- [% [7 X% C7 R 【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】9 u; U+ k% A" i( K 我这里定义了几个全局变量,通过Live Expression和SWO 打印输出结果。: g9 k. m3 C z; M4 b, k uint8_t countcir=0; floatVar1=0.0; float Var2=0.0; 要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示: ) e6 X6 N% l% O- i3 O* Q 编译完成后,点击小虫子图标进入调试状态并运行: . `; M/ ]8 Z6 h7 W* V( f8 ]6 o r& A9 B* i, y8 |! T U% | 我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。( V! L/ L6 M8 z* T" c! l4 c ' D7 R7 l3 l5 z* ~( B; A1 L5 I4 ~' u& C 如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。 这里我对变量countcir和Var2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】 3 m* p; Y" ]) U: T, F 配置完成确认后,再进入调试状态并运行,可以看到下面结果: & `: g' X9 g) Z# k4 H/ C 上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。 顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。3 n" R3 I1 P' f3 b) f! \; r4 | & u2 O5 L$ x0 q; o0 N N. |# i: Q 下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。 当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置。# @: h6 d% `9 l2 Z 6 p9 b9 f) |: ~. K( ~2 N+ S 当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。6 M( g+ M# C' U; g2 j* K 以CubeIDE为例,在main()前面添加下面代码: /* USER CODE BEGIN PM */6 ^2 U& W4 q6 }/ e #ifdef __GNUC__ /* 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) #else #define PUTCHAR_PROTOTYPE intfputc(int ch, FILE *f) #endif/* __GNUC__ */* L% d+ H' ? i1 S /* USER CODE END PM */" I+ d( V' E% p+ }7 @- o6 u; U 然后在用户代码区添加下面代码: /* USER CODE BEGIN 4 */9 v) c1 j, f$ \1 b /* @brief Retargets the C library printffunction to the USART.*/ PUTCHAR_PROTOTYPE% t. |( w! J3 P { /* Place your implementation of fputc here */ HAL_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功能很丰富、很强大,更多功能有待你去探究挖掘。 最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示: : j3 s1 @# u2 f; m$ u l 2 A* g8 c5 L. m 有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。# R8 m- d* [; w& D 4 z5 S, K' j: j# l |
兔哥的杂谈【002】——如何性价比更高地去编译STM32
IDE删除编译中间文件
STM32CubeIDE 快速入门指南
【NUCLEO-WB09KE评测】BLE创建服务和写特征控制LED
基于STM32CubeIDE+MPU6050做的动量轮平衡自行车(一)
【NUCLEO-WB09KE评测】使用I2C点亮一个OLED
【NUCLEO-WB09KE评测】USART的printf和GPIO的使用
STM32CubeIDE 1.3.0 汉化方法
【STM32H7S78-DK评测】XIP模板问题处理与电机控制
【STM32H7S78-DK评测】开发板初识与工程模板创建