VSCode+CubeMX开发STM32笔记-使用串口和SWD调试接口输出日志

MCU  ·  2025-05-19

使用VSCode+CubeMx开发STM32,这里介绍分别使用串口以及SWD调试接口输出日志功能;

1.建立工程

1.1 创建项目文件

从已有的仓库中创建一个工程:

git clone https://github.com/makerinchina-iot/vscode_stm32cubemx_hello.git log

使用VSCode打开工程后,需要更改如下名字:

  • 文件夹根目录下CMakeLists.txt 文件中修改工程名字为log:
set(CMAKE_PROJECT_NAME log)
  • stm32cubemx配置文件更改为 log.ioc ,并更改以下文件名:
...
    ProjectManager.ProjectFileName=log.ioc
    ProjectManager.ProjectName=log
...
1.2 引脚配置

使用STM32CubeMx打开ioc配置文件,然后配置对应的串口引脚;

2. 编写代码

2.1 基本的串口输出

(1)首先在main中添加串口测试代码,测试串口正常输出:

        const uint8_t test_out[] = "Hello, makerinchina!";
        HAL_UART_Transmit(&huart2, test_out, sizeof(test_out), HAL_MAX_DELAY);

(2)输出重定向,使用printf打印输出:

  • 在main中添加如下代码:
#include <stdio.h>

int _write(int fd, char *ptr, int len)
{
    UNUSED(fd);
    HAL_UART_Transmit(&huart2, (uint8_t *)ptr, len, 0xFFFF);
    return len;
}
  • 之后就可以使用 printf 函数打印输出到串口了;

    image-20250519213231938.png

2.2 使用SeggerRTT通过SWD调试接口输出

(1)首先下载Jlink软件安装(SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace),然后从安装目录复制segger rtt代码到工程目录,安装目录如下:

...\JLink\Samples\RTT\SEGGER_RTT_V810h.zip\RTT

新建libs\segger_rtt目录,然后复制源码如下:

image-20250519214321877.png

(2)将代码添加到cmake编译系统,修改CmakeLists.txt文件如下:

file(GLOB_RECURSE segger_rtt_src "libs/segger_rtt/*.c")

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
   # Add user sources here

   ${segger_rtt_src}
)

# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
   # Add user defined include paths
 
   libs/segger_rtt
)

这样在main中即可使用segger rtt打印:

#include "SEGGER_RTT.h"

SEGGER_RTT_Init();

SEGGER_RTT_printf(0, "Hello, makerinchina!\r\n");

可以看到正常打印:

image-20250519214646742.png

2.3 使用日志库

这里使用rxi/log.c: A simple logging library implemented in C99

(1)将上述库复制到 libs/log 目录中,并添加相关移植文件:

image-20250519215029539.png

这里通过 log_add_callback 接口添加串口和rtt两种输出,因此添加了log2rtt和log2serial移植文件;

(2)在CmakeLists.txt文件中添加文件到编译系统:

file(GLOB_RECURSE log_src "libs/log/*.c")
file(GLOB_RECURSE segger_rtt_src "libs/segger_rtt/*.c")

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user sources here
    ${log_src}
    ${segger_rtt_src}
)

# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user defined include paths
    libs/log
    libs/segger_rtt
)

(3)log打印:

#include "log.h"    

    log_init(LOG_TRACE, false);

    log_debug("debug msg print from rtt ^_^ ");
    log_info("this is the info msg");
    log_warn("warnning message shoud be attention");
    log_fatal("some fatal err occured ☹");
    log_trace("clearly trace msg info");
    log_error("some errors occured, oops.");
    log_debug("...\r\n");
    log_debug("中文信息输出显示");
  • 串口输入打印

    image-20250519220457509.png

  • RTT打印

    image-20250519220504861.png

下一篇:没有了
评论
MonkeyPi. All Rights Reserved.

ICP粤ICP备19095914号-2