参考链接

【Ubuntu下搭建stm32开发环境】Ubuntu18.04+vscode1.8.5+openocd+stlinkv2

Linux下使用VSCode,GCC,OpenOCD实现STM32一键编译烧录调试(CMake篇)

Ubuntu下安装stlink-v2驱动

VSCode插件安装

  • STM32 VS Code Extension

安装java

#安装java环境
sudo apt-get install default-jre

安装CMAKE

#安装cmake
#下载cmake
wget https://cmake.org/files/v3.28/cmake-3.28.5.tar.gz
#解压
sudo tar zxvf cmake-3.28.5.tar.gz
sudo cp -r cmake-3.28.5 /usr/local/
cd /usr/local/cmake-3.28.5/
#编译安装
sudo ./bootstrap
sudo make
sudo make install
#建立软链接
sudo ln -s /usr/local/cmake-3.28.5/ /usr/bin/
#验证安装
cmake --version

安装STM32套件(CubeMX mcufinder cubeclt)

安装GDB

#安装依赖
sudo apt-get install lib32ncurses5 lib32tinfo5 libc6-i386 texinfo libgmp-dev bison
#lib32ncurses5和lib32tinfo5这两个可能没有了,需要到老网站上去下
https://mirrors.aliyun.com/oldubuntu-releases/ubuntu/pool/main/n/ncurses/?spm=a2c6h.25603864.0.0.df882952Xf05Gn

#下载
wget https://ftp.gnu.org/gnu/gdb/gdb-11.2.tar.xz
#解压
sudo tar xvf gdb-11.2.tar.xz
sudo cp -r gdb-11.2 /usr/local
cd /usr/local/
#配置安装
sudo ./configure
sudo make
sudo make install

安装OpenOCD

#安装依赖
sudo apt-get install build-essential pkg-config autoconf automake libtool libusb-dev libusb-1.0-0-dev libhidapi-dev
sudo apt-get install libtool libsysfs-dev
#下载
git clone git://git.code.sf.net/p/openocd/code openocd
cd openocd/
sudo ./bootstrap
sudo cp -r openocd/ /usr/local
cd /usr/local/openocd
#安装依赖(为安装JLINK做准备)
sudo apt install automake autoconf libtool pkg-config
cd src/jtag/drivers/libjaylink
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install
 
#配置安装(使能JLINK,STLINK默认支持)
sudo ./configure --enable-maintainer-mode --enable-parport --disable-parport-ppdev --enable-jlink
sudo make
sudo make install
#验证安装
openocd --version

安装STLINK驱动

#安装依赖
sudo apt-get install git make cmake libusb-1.0-0-dev
sudo apt-get install gcc build-essential
#下载
git clone https://github.com/stlink-org/stlink
cd stlink

#编译安装
cmake
make
make install

安装JLINK

#安装依赖
sudo apt-get install libreadline6-dev
#下载
wget https://www.segger.com/downloads/jlink/JLink_Linux_x86_64.deb
#安装
sudo dpkg -i Link_Linux_x86_64.deb
#验证
cd /opt/SEGGER/JLink
./JLinkExe

工程测试

使用STM32CubeMX创建一个工程,并导出工程为CMake类型

使用vsode插件导入Cmake工程

2026-02-01T12:51:26.png

编辑工程的launch.json

{
    "cwd": "${workspaceRoot}",
    "executable": "${workspaceFolder}/build/Debug/ElectronBot-IAP.elf.elf",
    "configFiles": [
        // "interface/stlink-v2.cfg",
        "interface/jlink.cfg",
        "target/stm32f4x.cfg"
    ],
    "name": "Debug with OpenOCD",
    "request": "launch",
    "type": "cortex-debug",
    "servertype": "openocd",
    "searchDir": [],
    "runToEntryPoint": "main",
    "showDevDebugOutput": "raw",
            
}

2026-02-01T12:51:39.png

编辑工程的task.json

{
    "type": "shell",
    "label": "flash with J-link",
    "command": "openocd",
    "args": [
        "-f",
        "interface/jlink.cfg", 
        "-f",
        "target/stm32f4x.cfg", 
        "-c",
        // "program build/F401CCU6_demo.elf verify reset exit"
        "program build/Debug/${workspaceRootFolderName}.elf.elf verify reset", //将工程根目录名称作为可执行文件名称
        "-c",
        "reset run",
        // "-c",
        // "shutdown",
        "-c",
        "exit"
    ], /*command+args相当于主命令+子命令,也就是openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program build/F401CCU6_demo.elf verify reset exit"的效果*/
    "problemMatcher": [
        "$gcc"
    ],
    "group": "build",
    "dependsOn": [ //每次执行这个任务,会先build任务,这便是所谓的依赖。
        "build"
    ]
},
{
    "type": "shell",
    "label": "CubeProg: Flash project (SWD)",
    "command": "STM32_Programmer_CLI",
    "args": [
        "--connect",
        "port=swd",
        "--download",
        "${command:cmake.launchTargetPath}",
        "-hardRst",
        "-rst",
        "--start"
    ],
    "options": {
        "cwd": "${workspaceFolder}"
    },
    "problemMatcher": []
},

2026-02-01T12:51:49.png

调试工程

2026-02-01T12:51:55.png

下载工程

2026-02-01T12:52:02.png

2026-02-01T12:52:07.png