使用VSCode插件EIDE开发单片机项目非常方便,再配合PyOCD可以进行烧写、调试和RTT打印功能。当前的RTT输出功能要么使用JLink+Segger RTT Viewer的方式,要么使用其他第三方替代方案比如H7-Tool,这两种方案效果都很好,但是价格比较贵;另一个解决方式是使用开源的DAPLink仿真器+RTT打印功能,比如这里的 RTTView ,但是效果不是很好用。但是新发布的PyOCD-0.33.0 支持了RTT命令,因此可以使用DAPLink+PyOCD方式实现RTT输出打印功能。 下面介绍STM32配合DAPLink仿真器进行RTT打印输出功能,这样可以替代JLink+Segger RTT Viewer的功能,EIDE简单使用可以查看文章: 使用VSCode插件EIDE(Embedded IDE)开发ARM单片机项目-GD32单片机 下面以STM32F103C8单片机为例进行介绍。

1、示例代码

  • 首先使用EIDE新建一个LED灯项目;
  • 然后将 segger rtt print 功能添加到工程下;
  • 添加后项目目录包含如下: image-20220201110155500
  • 在main中添加rtt打印测试代码,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* ************************************************
*
* STM32 blink demo
*
* CPU: STM32F103C8
* PIN: PA1
*
* ************************************************
*/

#include "stm32f10x.h"

#include "SEGGER_RTT.h"

#define LED_PERIPH RCC_APB2Periph_GPIOC
#define LED_PORT GPIOC
#define LED_PIN GPIO_Pin_13

void delay(int x)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < 1000; j++)
__NOP();
}
}

int main()
{
GPIO_InitTypeDef gpioDef;
RCC_APB2PeriphClockCmd(LED_PERIPH, ENABLE);
gpioDef.GPIO_Mode = GPIO_Mode_Out_PP;
gpioDef.GPIO_Pin = LED_PIN;
gpioDef.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED_PORT, &gpioDef);

SEGGER_RTT_printf(0, "\x1B[2;31m"
"rtt debug info.\r\n");

uint32_t cnt = 0;

while (1)
{
GPIO_WriteBit(LED_PORT, LED_PIN, (BitAction)!GPIO_ReadInputDataBit(LED_PORT, LED_PIN));
delay(5000);

SEGGER_RTT_printf(0, "\x1B[2;33m"
"%d: rtt debug: blink.\r\n",cnt++);
}
}

上面代码中,引用 “SEGGER_RTT.h” 头文件后就可以使用 SEGGER_RTT_printf 进行输出了,其中 “\x1B[2;31m” 是设置RTT终端的颜色为红色。

  • 将上述程序烧写到stm32f103开发板后,就可以使用RTT终端打印功能了。
2、使用PyOCD RTT打印
  • 安装PyOCD
1
pip install -U pyocd
  • 安装CMSIS-Packs

这里使用的是STM32F103C8的板子,因此安装STM32F1包

1
pyocd pack install stm32f1
  • 使用RTT
    • 先将DAPLink连接到STM32开发板
    • 在终端执行如下命令查看连接信息:
    1
    pyocd list
    • 再执行如下命令即可查看RTT输出:
    1
    pyocd rtt -t stm32f103c8
    image-20220201115647430
    • 按“Ctrl+C”结束程序