gcc-arm+make+openocd+vscode单片机开发环境搭建

单片机arm开发环境搭建

一、安装包下载与安装

1.gcc-arm

1.下载

arm-gnu-none-eabi

找到对应平台下的arm工具链进行下载,支持Windows、Linux、Mac OS系统。

2.安装

arm工具链的安装极其简单,这里不再赘述。安装完成后将gcc-arm目录下的文件夹加入到环境变量中。

gcc-arm-none-eabi-10_2021.10\bin

gcc-arm-none-eabi-10_2021.10\arm-none-eabi\bin

2.make

使用cygwin来进行下载make。

下载和安装参考以下博客:
windows环境下gcc的使用(一):安装cygwin

注意: 只安装make即可,不需要安装博客中提到的那些内容。

安装完成后将以下目录加入到系统环境变量:

cygwin64\bin

cygwin64\sbin

3.openocd

1.下载

Download pre-built OpenOCD for Windows

2.安装

openocd下载下来是一个以.7z结尾的压缩文件,7z压缩文件的解压请下载7-Zip工具。

解压后还需要将openocd的以下目录加入到系统环境变量:

OpenOCD-20231002-0.12.0\bin

4.vscode

下载和安装请参考博客VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了

二、VSCode的配置

1.插件安装

1.必要的插件

2.推荐插件

2.配置

注意在 vscode 中打开文件夹后需要在当前文件夹下自行创建一个 .vscode 文件夹(或者执行以下任意操作 vscode 将自动创建 .vscode 文件夹)。

1.c_cpp_properties.json

使用快捷键 ctrl+shift+p 输入c/c++ui 进入 C/C++:Edit Configurations(UI)。

需要做以下配置:

注意: 编译器路径应该是绝对路径!!!(是arm-gcc的路径)

配置完成后vscode将在.vscode文件夹下创建 c_cpp_properties.json 文件。

2.tasks.json

1.点击终端下的配置任务。

2.选择 使用模板创建 tasks.json 。

3.选择 MSBuild ,将在 .vscode 文件夹下创建 tasks.json 文件。

4.修改以上文件内容为:

javascript 复制代码
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make",
            "args": [
                "-C",
                "./Debug", // 目录
                "-j12"
            ],
            "group": "build",
        },
        {
            "label": "clean",
            "type": "shell",
            "command": "make",
            "args": [
                "-C",
                "./Debug",
                "clean"
            ],
            "group": "build",
        },
        {
            "label": "download",
            "type": "shell",
            "command": "openocd",
            "args": [
                "-f",
                "./Debug/stlink.cfg",
                "-f",
                "./Debug/stm32f1x.cfg",
                "-c",
                "program Debug/gcc-test.elf verify reset exit"
            ],
            "group": "build",
        }
    ]
}

打开 终端 -> 运行任务... 就可以看到刚刚配置的命令了。


3.launch.json

1.创建 launch.json 文件。


2.修改 launch.json 文件。

javascript 复制代码
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "cwd": "${workspaceRoot}",
            "executable": "./Debug/gcc-test.elf",
            "name": "Debug Microcontroller",
            "request": "launch",
            "type": "cortex-debug",
            //"showDevDebugOutput": false,
            "servertype": "openocd", 
            // .svd 文件可以在 keil 文件夹 Local\Arm\Packs\Keil\单片机_DFP\版本号\SVD 文件夹下找
            "svdFile": "./Debug/STM32F103xx.svd",
            "configFiles": [
            // 单片机.cfg 文件在 share\openocd\scripts\target
            // 仿真器.cfg 文件在 share\openocd\scripts\interface
                "./Debug/stlink.cfg",
                "./Debug/stm32f1x.cfg"
            ]
        }
    ]
}

4.vscode没有代码智能提示和错误波浪线

参考:vscode 没有代码智能提示和错误波浪线

1.进入设置界面(快捷键 ctrl+, ),在搜索栏输入 prevent ,将 Edit > Suggest:Snippets Prevent Quick Suggestings 的选项框 取消选项

2.错误波浪线

使用快捷键 ctrl+shift+P 搜索 errorsquiggles ,选中 启用波浪线

三、Makefile文件

我参考 STM32cube MX 自动生成的 Makefile 进行修改得到以下 Makefile :

shell 复制代码
# ------------------------------------------------
# Makefile
# REFER : STM32Cube MX automatically generated Makefile file
#
# ChangeLog :
#   2024-08-11 - first version
# ------------------------------------------------

#目标文件名
TARGET = gcc-test


######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization
OPT = -Og


#######################################
# paths
#######################################
# Build path
BUILD_DIR = build
OUTPUT_DIR = .


# C源文件
C_SOURCES +=  $(wildcard \
../APP/*.c \
../CORE/*.c \
../STM32_Lib/conf/*.c \
../STM32_Lib/src/*.c \
) 

# ASM 源文件
ASM_SOURCES =  \
../CORE/startup_stm32f10x_hd.s


#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
# either it can be added to the PATH environment variable.
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
 
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m3

# fpu
# NONE for Cortex-M0/M0+/M3

# float-abi


# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

# macros for gcc
# AS defines
AS_DEFS = 

# 宏定义
C_DEFS =  \
-DUSE_STDPERIPH_DRIVER \
-DSTM32F10X_HD


# AS includes
AS_INCLUDES = 

# C 头文件目录
C_INCLUDES =  \
-I../CORE \
-I../STM32_Lib/conf \
-I../STM32_Lib/inc


# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -std=c99

CFLAGS += $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -std=c99

ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif


# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"


# 链接脚本
LDSCRIPT = ../Link/STM32F103ZETx_FLASH.ld

# libraries
LIBS = -lc -lm -lnosys 
LIBDIR = 
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(OUTPUT_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

# default action: build all
all: $(OUTPUT_DIR)/$(TARGET).elf $(OUTPUT_DIR)/$(TARGET).hex $(OUTPUT_DIR)/$(TARGET).bin


#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
	$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
	$(AS) -c $(CFLAGS) $< -o $@

$(OUTPUT_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
	$(SZ) $@

$(OUTPUT_DIR)/%.hex: $(OUTPUT_DIR)/%.elf | $(BUILD_DIR)
	$(HEX) $< $@
	
$(OUTPUT_DIR)/%.bin: $(OUTPUT_DIR)/%.elf | $(BUILD_DIR)
	$(BIN) $< $@	

#######################################
# create build directory
	
$(BUILD_DIR):
	mkdir $@		

#######################################
# clean up
#######################################
clean:
	-rm -fR $(BUILD_DIR)
	-rm -fR $(OUTPUT_DIR)/*.bin $(OUTPUT_DIR)/*.hex $(OUTPUT_DIR)/*.elf $(OUTPUT_DIR)/*.map
  
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)

# *** EOF ***
相关推荐
三佛科技-1873661339742 分钟前
FT8370A/B/C/CD/CP高性能次边同步整流芯片典型电路及管脚定义
stm32·单片机·嵌入式硬件
D.....l43 分钟前
STM32学习(MCU控制)(WiFi and MQTT)
stm32·单片机·学习
国科安芯1 小时前
光电传感器领域国产MCU芯片抗辐照技术考量
网络·人工智能·单片机·嵌入式硬件·安全
C7211BA1 小时前
Visual Studio Code (VS Code) 官方下载渠道
ide·vscode·编辑器
zhangfeng11332 小时前
win7 VSCode 1.70设置R语言的版本,电脑上有两个版本
ide·vscode·r语言
学习和思考2 小时前
为什么我的vscode有的时候可以跳转,有的时候不能跳转
arm开发·ide·驱动开发·vscode·学习·1024程序员节
新手村领路人2 小时前
vscode ssh远程连接 ubuntu虚拟机
ide·vscode·ssh
小-黯2 小时前
VSCode + XMake搭建OpenGL开发环境
vscode·opengl·xmake
二进制coder2 小时前
BMC RTC:服务器硬件管理的“时间心脏”与系统协同核心
服务器·单片机·实时音视频
FanXing_zl3 小时前
整数MCU实现FOC控制:深度解析与优化实践
单片机·嵌入式硬件·mcu·浮点运算