用vscode+gcc搭建stm32开发环境

必备工具的安装下载

  • vscode,官网直接下载安装,下载地址

  • gcc-arm-none-eabi,交叉编译工具链,下载地址。安装(解压)完成后,将gcc添加到环境变量,然后可以在cmd中输入arm-none-eabi-gcc -v查看路径是否正确。
    例如我的路径D:\gcc-arm-none-eabi-8-2018-q4-major-win32\bin,可以看到以下内容:
    用vscode+gcc搭建stm32开发环境_第1张图片

  • OpenOCD,一个开源的调试软件,下载地址
    下载下来的是一个压缩包,解压以后,需要配置环境变量
    例如D:\OpenOCD-20200503-0.10.0\bin,然后在cmd中输入openocd -v,应该输出以下内容:
    用vscode+gcc搭建stm32开发环境_第2张图片

  • Git for Windows,提供git和minw64指令终端,下载地址

  • LLVM :用于代码补全,下载地址,安装好之后,将路径添加到环境变量里。例如D:\LLVM\bin

  • STM32CubeMx,用于生成Makefile文件,避免自己写Makefile,下载地址

编译环境搭建

  • 用STM32CubeMx新建一个工程,STM32Cubemx的使用不多介绍。需要注意的是,最后生成代码的时候,IDE要选择Makefile
    用vscode+gcc搭建stm32开发环境_第3张图片

  • 用VScode打开刚才新建的工程文件,你会看到如下目录:用vscode+gcc搭建stm32开发环境_第4张图片
    .vscode文件夹需要我们自己新建,Inc和Src是用户可修改的代码,Drivers是库文件,build是编译后生成的文件夹。

  • 需要给VScode装下面的插件:

    • ARM, 用于格式化ARM汇编代码
    • C/C++
    • Cortex_Debug,简化Debug配置
  • 将bash配置为vscode的终端
    文件 -> 首选项 -> 设置打开setting.json文件,添加一下两句:

"terminal.integrated.shell.windows": "D:\\Git\\bin\\bash.exe",
"terminal.external.windowsExec": "D:\\Git\\bin\\bash.exe",

保存以后,按Ctrl + ~就可以看到bash已经成为vscode的终端了用vscode+gcc搭建stm32开发环境_第5张图片

  • 在工程文件夹下,新建.vscode文件夹,该目录建一个c_cpp_properties.json文件,用于对C/C++语言的语法提示等的配置,其中include路径和宏定义可以参照makefile添加。配置如下
{
    "configurations": [
        {
            "name": "Win32",
            "browse": {
                "path": [
                    "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
                    "${workspaceFolder}/Drivers/CMSIS/include",
                    "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
                    "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Src",
                    "${workspaceFolder}/Inc",
                    "${workspaceFolder}/Src",
                    "${workspaceFolder}/",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/arm-none-eabi/thumb/v7-m",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/backward",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/sys",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include",
                    "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include-fixed"
                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
                "${workspaceFolder}/Drivers/CMSIS/include",
                "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
                "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Src",
                "${workspaceFolder}/Inc",
                "${workspaceFolder}/Src",
                "${workspaceFolder}/",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/arm-none-eabi/thumb/v7-m",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/backward",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/sys",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include",
                "D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include-fixed"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE",
                "USE_HAL_DRIVER", //这个是使用hal,可以改为标准库
                "STM32F103xE"     //芯片的宏
            ],
            "compilerPath": "D:\\LLVM\\bin\\clang-format.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

在终端下输入make指令,就可以开始编译了,如下是编译成功的输出用vscode+gcc搭建stm32开发环境_第6张图片
而所有的.o文件也会在build文件夹下边用vscode+gcc搭建stm32开发环境_第7张图片

下边进行调试环境的配置(这些配置网上整理来的,我也没试过,回家没带st-link =.=)
配置launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    "version": "0.2.0",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            "executable": "./build/usart.elf", //需要换成xxx.elf
            "name": "Cortex Debug",
            "request": "launch",
            "type": "cortex-debug",
            "runToMain": true, //是否执行到main函数
            "preLaunchTask": "Build Target", //先运行Build任务,因为cortex-debug不会帮我们编译,所以要加上这句
            "svdFile": "C:/Users/Thee/.vscode/extensions/marus25.cortex-debug-dp-stm32f1-1.0.0/data/STM32F103xx.svd",
            "servertype": "openocd",
            "configFiles": [
                "./Debugger/cmsis-dap.cfg",
                "./Debugger/stm32f1x.cfg"
            ]
        }
    ]
}

task.json,用于cortex的任务配置,一键下载,调试。我还没试过就不写了

你可能感兴趣的:(用vscode+gcc搭建stm32开发环境)