STM32CubeIDE几个调试工具使用演示

本文详细介绍了如何在STM32CubeIDE中利用LiveExpression、SWV和串口终端进行变量跟踪、printf输出和图形显示,包括设置步骤和关键代码示例。此外,还涉及了浮点数处理和集成串口功能的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fe9793bebee99f88e34be413975f7a49.jpeg

意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。

fd2b7ef05bc08cb496c99055a1ce3f7f.png

1、利用Live Expression 实时显示变量数据;

2、利用SWVSWO功能实现printf打印输出;

3、利用SWV实现数据实时跟踪动态图形显示;

4、利用CubeIDE集成的串口终端软件实现printf输出;

要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。

bf5d1dc5479bbc846493b2b5d77b410b.png

要实现SWO输出,基于CubeMx进行配置时,要做如下操作:

5140d6007315da865ddac64f73a12f73.png

然后在代码里需添加些许代码,在main文件前面加上:

#include"stdio.h"

int __io_putchar(int ch)

{

ITM_SendChar(ch);

return(ch);

}

另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】:

/* USER CODE BEGIN 4 */

int _write(int file, char *ptr, int len)

{

int DataIdx;

for (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );}

return len;

}

/* USER CODE END 4 */

【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】

我这里定义了几个全局变量,通过Live ExpressionSWO 打印输出结果。

uint8_t countcir=0;

float   Var1=0.0;

float  Var2=0.0;

要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:

8d3f774752e5cfc760c6f946d81cb08e.png

编译完成后,点击小虫子图标进入调试状态并运行:

3bcb0c5f7d3c896ad06dde617857709d.png

我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。

972851dd3289049bfbc6254816e8ba5e.png

如果我们要利用SWV实现变量数据的实时图像显示,还需要做些配置。

打开IDE环境下window/SWV的相关功能项,即将下图中第1部分中SWV下面的SWV  Data Trace Timeline Graph选上。然后进入调试状态,点击下图中第2部分的蜻蜓状的图标进入设置阶段,即下图中的第3部分。

这里我对变量countcir和Var2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】

03e56fd5147236025a1ab6b25c07a13b.png

配置完成确认后,再进入调试状态并运行,可以看到下面结果:

a21c6bfddeef911fe004f26231c8bb66.png

上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。

顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。

6fa7de1ed45832f4ad3c657aaa18b6fc.png

下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UARTprintf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。

当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置

a6fc5a9431e2412135f569d89d5fccd6.png

当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。

CubeIDE为例,在main()前面添加下面代码:

/* USER CODE BEGIN PM */

#ifdef __GNUC__

/* With GCC, small printf(option LD Linker->Libraries->Small printf

set to 'Yes') calls __io_putchar() */

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE intfputc(int ch, FILE *f)

#endif/* __GNUC__ */

/* USER CODE END PM */

然后在用户代码区添加下面代码:

/* USER CODE BEGIN 4 */

/* @brief Retargets the C library printffunction to the USART.*/

PUTCHAR_PROTOTYPE

{

/* Place your implementation of fputc here */

HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

return ch;

}

/* USER CODE END 4 */

关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。

最后,分享一个关于STM32CubeIDE培训视频资料的站点,在www.stmcu.com.cn的设计资源区,如下图所示:

e9bd3f3b36bf7b1995f9cd94e461bd6e.png

有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。

0345cabb555def685e568bd8f776b2ae.png

好,就此打住。希望上面分享能对您有帮助,祝君好运!

**********************************

往期话题阅读链接【点击即可阅读】:

1、STM32CubeIDE使用之培训视频

2、基于STM32CubeIDE的变量查看话题

3、单次事件触发DMA读取多字节SPI数据

4、通过STM32外部中断触发DMA传输

5、基于STM32的除以0运算话题

eb39f2aa53fe369381ab79976daae2e8.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值