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

一、安装包下载与安装

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.修改以上文件内容为:

{
    // 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 文件。

{
    // 使用 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 :

# ------------------------------------------------
# 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 ***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值