问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

VSCode+GCC搭建STM32开发环境的几种方案

创作时间:
作者:
@小白创作中心

VSCode+GCC搭建STM32开发环境的几种方案

引用
CSDN
1.
https://blog.csdn.net/bitslink/article/details/137089255

在嵌入式开发领域,VSCode凭借其强大的插件生态系统和高度可定制性,已经成为许多开发者首选的代码编辑器。本文将详细介绍如何在VSCode中使用GCC搭建STM32开发环境,包括使用Make、CMake以及Embedded IDE等工具,帮助开发者快速上手STM32开发。

GCC编译套件

STM32使用了ARM的Cortex-M内核,因此需要使用ARM官方提供的GCC编译套件。可以从ARM官网下载MCU编译套件:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads,选择arm-none-eabi版本进行下载。下载完成后,将编译套件解压到本地目录,并将bin文件夹添加到系统环境变量中。安装成功后,可以通过以下指令进行测试(目前GCC版本为12.2.1):

arm-none-eabi-gcc --version

虽然安装了GCC编译套件,但仅凭此还无法编译一个简单的LED闪烁工程。这是因为任何稍具规模的工程都不可能只有一个源文件,直接使用GCC命令编译容易出错且效率低下。因此,我们需要一套构建工具,如GNU Make、qmake、namake、pmake、SCons等。

构建工具

Make

Make是最早期的构建工具之一,虽然从头编写Makefile对工程师来说有一定难度,但幸运的是,STM32CubeMX可以自动生成基础的Makefile文件。

在Windows上,可以从https://github.com/skeeto/w64devkit/releases下载Make工具。下载完成后,将bin文件夹添加到系统环境变量中。安装成功后,可以通过以下指令进行测试:

make --version

使用STM32CubeMX生成Makefile工具链工程后,可以直接切换到源码目录进行编译:

make

STM32CubeMX会生成一个基础的Makefile工程,后续只需要将应用代码添加到Makefile中即可。代码编写可以直接使用VSCode,编写完成后执行make指令进行编译。

CMake

CMake是第三代构建工具,相比Makefile使用体验更好。虽然STM32CubeMX不直接支持CMake,但可以通过编写CMake编译脚本来实现。

首先从CMake官网(https://cmake.org/download/)下载并安装CMake。安装成功后,可以在命令行中直接测试:

cmake --version

使用STM32CubeMX生成一个Makefile工程后,可以在工程目录中创建一个CMakeLists.txt文件,内容如下:

# cmake 最低版本要求
cmake_minimum_required(VERSION 3.22)
# 交叉编译配置
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# C语言与汇编语言配置
set(CMAKE_C_COMPILER "arm-none-eabi-gcc")
set(CMAKE_ASM_COMPILER "arm-none-eabi-gcc")
set(CMAKE_C_FLAGS   " -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -Og -gdwarf-2 -g")
set(CMAKE_ASM_FLAGS " -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb  -gdwarf-2")
set(CMAKE_C_COMPILER_WORKS TRUE)
# C++语言配置
set(CMAKE_CXX_COMPILER "arm-none-eabi-gcc")
set(CMAKE_CXX_FLAGS " -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -Og -gdwarf-2 -g")
set(CMAKE_CXX_COMPILER_WORKS TRUE)
# 自定义变量
set(CMAKE_OBJCOPY "arm-none-eabi-objcopy")
set(CMAKE_SIZE "arm-none-eabi-size")
# 链接配置
SET(CMAKE_EXE_LINKER_FLAGS " -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=stm32.map,-cref,-u,Reset_Handler -T ${CMAKE_SOURCE_DIR}/STM32L412KBUx_FLASH.ld")
# 编程语言版本
SET(CMAKE_CXX_STANDARD 14)
# 项目名称、编程语言
project(stm32 C CXX ASM)
# 搜索头文件目录
include_directories(
    Core/Inc 
    Drivers/STM32L4xx_HAL_Driver/Inc 
    Drivers/STM32L4xx_HAL_Driver/Inc/Legacy 
    Drivers/CMSIS/Device/ST/STM32L4xx/Include 
    Drivers/CMSIS/Include
)
# 全局宏定义
add_definitions(
    -DUSE_HAL_DRIVER 
    -DSTM32L412xx
)
# 自定义变量,编译源文件
set(
    PROJECT_SOURCES
    Core/Src/main.c 
    Core/Src/stm32l4xx_it.c 
    Core/Src/stm32l4xx_hal_msp.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_tim_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_uart_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_i2c_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_rcc_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_flash_ramfunc.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_gpio.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_dma_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_pwr_ex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_cortex.c 
    Drivers/STM32L4xx_HAL_Driver/Src/stm32l4xx_hal_exti.c 
    Core/Src/system_stm32l4xx.c  
    startup_stm32l412xx.s
)

在CMakeLists.txt所在的目录执行以下指令生成Makefile:

cmake . -G "MinGW Makefiles" -B CMakeBuild

然后切换到CMakeBuild目录执行make进行编译:

cd CMakeBuild
make

Embedded IDE

Make和CMake更多是将VSCode作为代码编辑工具,而Embedded IDE则可以将VSCode打造成一个完整的IDE,支持代码编写、编译、下载等功能。Embedded IDE是VS Code的一个插件,支持mcs51、stm8、cortex-m、riscv的C/C++开发,支持Windows、Linux和macOS操作系统。

安装Embedded IDE插件

在VSCode中搜索并安装Embedded IDE插件。

导入工程

Embedded IDE支持从MDK、IAR以及Eclipse工程导入。可以使用STM32CubeMX生成一个Eclipse工程,然后直接导入到Embedded IDE中。在STM32CubeMX中配置Eclipse工程时,需要选择相应的工具链和调试器。

导入工程后,可以直接在Embedded IDE中进行编译。编译成功后,根据硬件实际连接选择对应的下载器。

此时已经可以通过Embedded IDE进行代码开发、编译和下载。虽然目前还不支持代码调试,但可以通过另一个VSCode插件Cortex-Debug来实现调试功能。

调试

安装Cortex-Debug插件

在VSCode中搜索并安装Cortex-Debug插件。

配置调试环境

默认使用openocd链接仿真器进行调试(若没有安装需要单独安装openocd),然后选择对应仿真器(一般是stlink或者jlink)和芯片系列型号。

配置完成后就可以启动调试了,可实现与IDE一样的调试功能。如果使用JLink进行仿真调试,由于openocd对JLink支持不好,需要重新修改launch.json跨过openocd直接调用JLinkGDBServer进行仿真调试。


通过以上步骤,你就可以在VSCode中搭建一个功能完善的STM32开发环境,享受VSCode带来的高效开发体验。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号