STMCU小助手
发布时间:2022-8-14 15:15
" N: |( ^, x+ |( ^8 [! ?1 { 意法半导体ST公司为广大STM32用户免费提供了基于GCC的功能强大集成调试工具STM32CubeIDE。这里简单演示下STM32CubeIDE所支持的几个调试小工具及功能。
1、利用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 | 要实现live expression,首先要在debugger配置中使能该功能,如下图中1处所示。若要使用SWV功能,也需在debugger配置中使能相关选项,如下图中2处所示。 , w% t) P L9 G1 Y) o( r: W- r0 Y9 B
要实现SWO输出,基于CubeMx进行配置时,要做如下操作: + j, X4 r# e4 c, |
5 H1 j |& P% ` 然后在代码里需添加些许代码,在main文件前面加上: #include"stdio.h"% P9 D/ o9 z, x, g5 L int __io_putchar(int ch), [. q. h1 T" F" e @+ i { ITM_SendChar(ch);7 S" ^9 P% |) H( ]7 |2 z return(ch);} " Y3 J! {0 f. n1 ~1 } 另外,在用户代码区添加下面代码【针对CubeIDE而言,不同IDE写法略有不同】: /* USER CODE BEGIN 4 */8 ^1 y- Q; o1 x; o. M3 t H int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++){ __io_putchar( *ptr++ );} return len; J8 K2 g% X6 l2 ^ }* u) @" r x0 |! ^) B$ Q0 U6 w /* USER CODE END 4 */# `) L+ m9 c4 V 【注:上面这个函数代码有些版本应该不需要添加了,在那个syscalls.c文件里已经有了该函数。不过它是弱定义,你再写一次也无妨。】 我这里定义了几个全局变量,通过Live Expression和SWO 打印输出结果。 uint8_t countcir=0; floatVar1=0.0; float Var2=0.0; l5 j0 N8 R" X5 O 要通过SWO输出结果,在CubeIDE里面还需打开相关功能项,如下图所示:. D9 n. q* _# J. y
- ^, z, v2 A# y- \& Q! D( I# b 编译完成后,点击小虫子图标进入调试状态并运行:7 C u4 u8 C: j$ t' t7 \1 W$ [
我们可以看到,下图右上角是live expression结果,图形下部分是基于SWO的printf输出。# L0 O! s9 B# t" @& z. P ) i: d( h, v' O3 q9 u1 ^
' 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 这里我对变量countcir和Var2进行实时监测,做适当的勾选和填写,并启用ITM port0。【注意图中星号所标记的地方】 % Z) m) c5 O% y/ {0 X
" `6 \. B# i7 k" r* f) q) W$ d 配置完成确认后,再进入调试状态并运行,可以看到下面结果: # Q9 M1 N h+ E
上图中下半部分的红色正弦波是Var2的实时显示图形,橙色直线是countcir的实时变化图形。 顺便提醒下,我在上面的输出中使用到了浮点数,要想printf正常运行,有个地方我们还需要在工程属性那里做些配置,如下图示,勾选即可。, \2 G3 E8 m" s3 |
下面简单介绍下使用STM32CubeIDE集成的串口终端软件基于UART做打印输出。平常我们基于UART做printf时往往还得在PC端装个串口终端软件,如果使用CubeIDE就可以省去这一步了,无须额外安装类似工具软件了,它已经给我们集成了相关部件在里面。' i" |& v# | u* { o8 Y2 T0 v 当我们完成编译,进入调试状态后,可以参照下图所示步骤进行配置。 ' F) l/ e2 i ~; K0 S " v9 \! Q9 k4 V3 t+ a, o
2 c6 p* k' i; C9 i4 _ j 当然,相应的重定向代码还是要自行添加的,这点跟使用其它IDE是一样的。 以CubeIDE为例,在main()前面添加下面代码: /* USER CODE BEGIN PM */% a0 W8 J' w/ ?6 T3 b1 v #ifdef __GNUC__ /* With GCC, small printf(option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */ #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 */ * a4 u, f% `( [8 \ D/ h+ D 然后在用户代码区添加下面代码: /* USER CODE BEGIN 4 */ /* @brief Retargets the C library printffunction to the USART.*/ PUTCHAR_PROTOTYPE+ V7 l/ h4 B% r8 G! d. t/ q {! G! o$ z$ f8 ] /* Place your implementation of fputc here */ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);* m& J V' y" E8 Y return ch; }2 H4 p, Z) W# r) o8 l /* USER CODE END 4 */6 ^7 I1 v- o# @$ V$ C# D8 j 关于CubeIDE环境下的几个调试小工具就介绍到这里。大家根据自己的喜好等灵活选用。当然,STM32CubeIDE功能很丰富、很强大,更多功能有待你去探究挖掘。 最后,分享一个关于STM32CubeIDE培训视频资料的站点,在的设计资源区,如下图所示:
有兴趣的可以去看看,观看时建议选择超清效果来看,否则有些内容可能看不清。如果有人不知道哪里可以下载免费的STM32CubeIDE,点击左下方的“原文阅读”获取链接信息,它支持多个OS,你选择所需要的版本,比方windows版的。
0 ~# c% ^( s: J9 h2 D! }* n |
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
STM32CubeIDE 2.2.0新版本发布
CubeMX生成CubeIDE工程代码乱码
STM32CubeIDE实时时钟(RTC)经验分享
实战经验 | ClassB功能安全认证代码与应用代码分区的实现要点
【STM32U3 评测】人体行为识别
【STM32U3 评测】串口控制步进电机与LabVIEW数据采集
微信公众号
手机版