找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

937

积分

0

好友

120

主题
发表于 4 小时前 | 查看: 2| 回复: 0

本文详细介绍如何在 Ubuntu 22.04 操作系统中,使用 VSCodeGCC交叉编译器OpenOCD 搭建一套完整的STM32单片机集成开发环境,实现代码编辑、编译、烧录与可视化调试的全流程。

一、开发环境概述

目标环境为 Ubuntu 22.04,核心工具链包括:使用 GCC (arm-none-eabi-gcc) 进行交叉编译,通过 OpenOCD 连接ST-Link硬件,并利用 VSCode 及其插件提供高效的代码编辑与图形化调试界面。

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 1

二、安装必要依赖

打开终端,执行以下命令安装所有必需的软件包:

sudo apt update
# 安装ARM GCC交叉编译器(用于编译STM32程序)
sudo apt install -y gcc-arm-none-eabi
# 安装GDB调试器(支持多架构,OpenOCD通过它与芯片通信)
sudo apt install -y gdb-multiarch
# 安装OpenOCD(连接开发板硬件的桥梁)
sudo apt install -y openocd
# 安装make cmake构建工具
sudo apt install -y make cmake
# 安装串口工具,用于查看程序输出(可选)
# sudo apt install -y minicom

主要工具清单

  • 交叉编译工具链: arm-none-eabi-gcc (ARM官方工具链)
  • 调试与烧录工具: OpenOCD (适配ST-Link V1/V2/V2-1)
  • 开发IDE: VSCode + 扩展插件

重要权限配置
Ubuntu默认限制普通用户直接访问USB调试器,需为当前用户添加设备访问权限,以解决“无法访问ST-Link/串口设备”的问题。

# 为当前用户追加串口/USB设备访问权限
sudo usermod -a -G dialout,plugdev $USER

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 2
注意:执行此命令后,必须注销并重新登录(或重启系统)才能使新的组权限生效。

验证权限添加成功
执行以下命令,查看输出中是否包含 dialoutplugdev

groups $USER
# 输出示例:ubuntu : ubuntu sudo dialout plugdev

检查ST-Link驱动
连接开发板后,在终端中输入以下命令,应能看到ST-Link设备信息。

lsusb

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 3

三、VSCode安装与工程配置

VSCode版本:Version: 1.107.1

  1. 安装VSCode:从微软官网下载安装,或通过Snap安装:sudo snap install --classic code
  2. 安装必要扩展:打开VSCode,进入扩展市场,搜索并安装以下插件:
    • C/C++ (Microsoft):提供代码智能感知、跳转、错误检查。
    • Cortex-Debug:提供针对Cortex-M芯片的专用调试界面(查看寄存器、变量、外设等)。

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 4

3.1 生成VSCode工程

使用构建工具(如scons)生成适用于VSCode的工程文件。例如,使用scons命令:

# 生成 VSCode 工程
scons --target=vsc
# 亦可生成 Makefile 工程,本文以此为例
scons --target=makefile

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 5
VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 6

3.2 工程配置

3.2.1 配置构建任务 (.vscode/tasks.json)

Ctrl+Shift+P → 输入 Tasks: Configure Task → 选择 Create tasks.json file from template → 选择 Others
VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 7
将文件内容替换为以下配置,用于定义编译和清理任务:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build stm32",
            "type": "shell",
            "command": "make -j4",  // 针对 Makefile 工程
            // 若为 CMake 工程,可替换为:"command": "cmake --build build -j4"
            "args": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "panel": "shared"
            },
            "problemMatcher": "$gcc"
        },
        {
            "label": "clean stm32",
            "type": "shell",
            "command": "make clean",
            "args": [],
            "group": "build",
            "presentation": {
                "echo": true,
                "reveal": "always",
                "panel": "shared"
            },
            "problemMatcher": "$gcc"
        }
    ]
}
3.2.2 配置调试环境 (.vscode/launch.json)

点击VSCode左侧的“运行和调试”图标,然后点击创建 launch.json 文件,或按F5后选择C++ (GDB/LLDB)
VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 8
VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 9
配置内容如下,实现通过OpenOCD和ST-Link进行调试:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "STM32 Debug (OpenOCD)",
            "type": "cortex-debug",  // 依赖于 Cortex-Debug 插件
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "executable": "${workspaceFolder}/build/STM32F407ZET6.elf",  // 替换为你的 ELF 文件路径
            "device": "STM32F407ZG",  // 芯片型号
            "interface": "swd",       // 调试接口(SWD)
            "servertype": "openocd",  // 调试服务器:OpenOCD
            "configFiles": [
                "interface/stlink.cfg",  // ST-Link 配置
                "target/stm32f4x.cfg"    // STM32F4 系列配置
            ],
            "openocdPath": "/usr/bin/openocd",  // OpenOCD 安装路径
            "preLaunchTask": "build stm32",    // 调试前自动执行编译任务
            "runToMain": true,                 // 启动后自动运行到 main 函数
            "svdFile": "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/svd/STM32F407.svd",  // 用于查看寄存器(可选)
            "showDevDebugOutput": "none",
            "gdbPath": "/usr/bin/gdb-multiarch"  // 指定 GDB 路径
        }
    ]
}

关键参数适配

  • executable:替换为工程编译生成的 .elf 文件实际路径。
  • device:根据实际使用的STM32芯片型号修改。
  • configFiles:根据芯片系列选择对应配置文件(如STM32F1系列用target/stm32f1x.cfg)。
3.2.3 配置代码补全与头文件索引 (.vscode/c_cpp_properties.json)

Ctrl+Shift+P → 输入 C/C++: Edit Configurations (JSON)
VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 10
修改配置文件,确保代码智能感知能正确找到所有头文件和定义,这对于前端框架/工程化项目中的复杂依赖管理同样重要。

{
    "configurations": [
        {
            "name": "Ubuntu-STM32F407",
            "defines": [
                "HAVE_CCONFIG_H",
                "RT_USING_LIBC",
                "RT_USING_NEWLIB",
                "STM32F407xx",
                "USE_HAL_DRIVER",
                "_POSIX_C_SOURCE=1",
                "__RTTHREAD__"
            ],
            "intelliSenseMode": "gcc-arm",
            "compilerPath": "/usr/bin/arm-none-eabi-gcc",
            "cStandard": "c99",
            "cppStandard": "c++11",
            "includePath": [
                "applications",
                "rt-thread/components/libc/compilers/common/include",
                "rt-thread/components/libc/compilers/newlib",
                "rt-thread/libcpu/arm/common",
                "rt-thread/libcpu/arm/cortex-m4",
                "rt-thread/components/drivers/include",
                "board",
                "board/CubeMX_Config/Inc",
                "board/ports",
                "libraries/HAL_Drivers",
                "libraries/HAL_Drivers/config",
                "libraries/HAL_Drivers/CMSIS/Include",
                "rt-thread/components/finsh",
                ".",
                "rt-thread/include",
                "libraries/STM32F4xx_HAL/STM32F4xx_HAL_Driver/Inc",
                "libraries/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Include",
                "rt-thread/components/libc/posix/ipc",
                "rt-thread/components/libc/posix/io/stdio",
                "rt-thread/components/libc/posix/io/poll"
            ]
        }
    ],
    "version": 4
}

注意:配置修改后需重启VSCode,或按 Ctrl+Shift+P 执行 C/C++: Reset IntelliSense Database 使配置生效。

3.3 环境验证与调试

3.3.1 硬件连接
  • 将STM32开发板通过ST-Link调试器连接到Ubuntu主机的USB口。
  • 再次执行 lsusb 命令,应能识别到 STMicroelectronics ST-LINK/V2 或类似设备信息。
3.3.2 编译与调试
  1. 编译工程:按 Ctrl+Shift+B 执行默认构建任务,或在终端执行 make,将在指定目录生成 .elf 文件。
  2. 启动调试:按 F5,VSCode将自动执行以下操作:
    • 启动OpenOCD服务,连接ST-Link与目标芯片。
    • 将编译好的 .elf 文件烧录至STM32的Flash。
    • 程序指针停在 main 函数入口(因配置了 "runToMain": true)。
  3. 调试操作
    • 打断点:点击代码行号左侧区域。
    • 单步执行F10 (逐过程),F11 (逐语句)。
    • 查看状态:在左侧“运行和调试”面板中查看“变量”、“监视”、“调用堆栈”以及“Cortex-Debug”提供的“外设寄存器”等信息。

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 11
VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 12

命令行烧录(可选)
也可直接使用OpenOCD命令进行烧录,这对于运维/DevOps流程中的自动化脚本集成非常有用。

openocd -f /usr/share/openocd/scripts/interface/stlink.cfg \
        -f /usr/share/openocd/scripts/target/stm32f4x.cfg \
        -c "program build/STM32F407ZET6.elf verify reset exit"
# 注意:`build/STM32F407ZET6.elf` 需替换为实际的ELF文件路径

VSCode开发环境搭建教程:在Ubuntu上配置STM32单片机开发与调试 - 图片 - 13

代码格式化建议
为保持代码风格统一,可安装 Clang-Format 扩展,并在项目根目录配置 .clang-format 文件。

参考资料




上一篇:大语言模型评测全解析:从困惑度到GPT-4评估方法详解
下一篇:Python列表从入门到精通:创建、访问、操作与生成式完整指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 18:57 , Processed in 0.175620 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表