vscode+stm32+st-link

vscode+stm32+st-link

1.vscode 安装

这里就跳过
进入拓展商店安装以下插件

    Better C++ Syntax       用于分析C/C++语法
    C/C++                   用于支持C/C++语法,以及go to Define相关操作
    C/C++ Extension Pack 
    C/C++ Snippets
    Makefile Tools

    Cortex-Debug
    Cortex-Debug: Device Support Pack - STM32F1
    debug-tracker-vscode
    RTOS Views
    STM32 VS Code Extension

2.下载编译链接包

点击这里下载

建议下载.exe运行包,下载后直接运行安装

3.配置链接包环境变量

添加安装路径下的bin目录到用户path变量下
img

运行cmd,输入arm-none-eabi-gcc -v,如果出现版本信息则说明配置成功
img

4.配置makefile tool

打开vscode设置,搜 makefile.makePath 填入 make 未修改前如果安装了mingw64默认设置是mingw32-make
如果没安装mingw64,安装参考这里
参考第3.1小结

5.使用cubmax生成工程

配置流程可以自己搜索,在ProjectManager里面,可配置makefile 或者 cmake

配置为cmake工程
img
配置为makefile工程
img

6.st-link包下载

下载st-link包链接
下载zip包后解压,将bin目录及目录下文件放在合适路径,添加bin目录路径到环境变量中

在vscode左侧
img
运行和调试新建launch.json文件
img
配置如下
img

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "cwd": "${workspaceFolder}",
            "executable": "${workspaceFolder}/build/Debug/STM32F103C8Tx.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "stlink",
            "device": "STM32F103C8Tx", //芯片型号
            "serverpath": "C:/Users/86138/stlink/bin/stlink.exe", //st-link路径
            "preLaunchTask": "build" //编译任务
        }
    ]
}

7.vscode编译

打开工程前,建议先安装IntelliCode插件,用于智能提示

7.1 makefile 编译工程

打开工程后,在终端输入make,即可编译,如果编译出现Assemble message错误建议将.s文件设置为只读
接下来应该能编译了,编译界面结果如下图

下图为makefile工程编译图
img

7.2 使用cmake编译工程

编译前先安装STM32CubeCLT

下载STM32CubeCLT链接
安装后将ST\STM32CubeCLT_1.16.0\CMake\bin添加到环境变量中

在使用cmake编译stm32工程时,需先用STM32 VS Code Extension导入工程生成CMakeList.txt
img
注意!! 导入生成的CMakeCache.txt如果安装过Cmake并添加过bin路径可能会产生编译工具路径错误
img

---------------------------------------------------------------------------------------------

番外

1.stm32生成的cmake工程编译局限

stm32生成的cmake工程由于使用的是INTERFACE方式链接到根目录下的CMakeLists.txt,所以在修改project(stm32cubemx)工程时由于cubmax工程库使用target_include_directoriestarget_sources所以添加编译的源文件和头文件搜索路径需要手动一行一行添加。优点是每一个源文件添加和头文件搜索路径都清晰。但在使用第三方模块时就会很麻烦比如:lvgl,freertos,rt-thread...在使用这些模块时,不可能往32工程库内添加,这个过程太繁琐且移植兼容性差。

2.使用模块CMakeLists.txt添加模块

在模块一级根目录下创建CMakeLists.txt文件(下面以lvgl为例)
文件内容示例如下


# 设置简易包含头文件
set(LV_CONF_INCLUDE_SIMPLE ON)

#设置不适用widgets demo
set(LV_USE_DEMO_WIDGETS OFF)

#查找lvgl目录下所有.c文件和.h文件(并设置为全局资源)
file(GLOB_RECURSE lvgl_source ${CMAKE_SOURCE_DIR}/App/lvgl/*.c ${CMAKE_SOURCE_DIR}/App/lvgl/*.h)

#添加lvgl库为静态链接库
add_library(lvgl STATIC ${lvgl_source})

#为lvgl构建添加链接目录
target_link_directories(lvgl PUBLIC ${CMAKE_SOURCE_DIR}/App/lvgl)

#添加lvgl模块下添加主模块和其他第三方模块头文件链接路径(如果要使用到其他模块的功能函数)
target_include_directories(lvgl PUBLIC 
    ../../Core/Inc
)

用这种方式添加lvgl模块可能会出现的错误为该模块下头文件包含路径错误,cmake报头文件找不到,不过只需要需改几个头文件就行(使用../来查找)

3.补充链接权限知识

PRIVATE: 当你的目标需要库,但不希望其他链接到你的目标的库或可执行文件继承这个库时,选择PRIVATE。它反映了一个明确的意图:这个库只是为当前目标服务的。

PUBLIC: 当你的目标和其他链接到你的目标的库或可执行文件都需要这个库时,选择PUBLIC。这意味着这个库是公共的依赖项,其他目标也可能需要它。

INTERFACE: 当你的目标本身不需要链接库,但其他链接到你的目标的库或可执行文件需要它时,选择INTERFACE。这通常用于头文件的库或者当你只想传递链接依赖而不实际链接它们时。

具体内容参考知乎博主传送门

posted @ 2024-08-29 14:41  代代代码  阅读(17)  评论(0编辑  收藏  举报