【Mac】vscode 配置 GD32E230CXXX 开发环境

总览

1.安装并配置HomeBrew;ARM GCC;make;OpenOCD

2.安装 Vscode 插件:C/C++ (由 Microsoft 提供)、Cortex-Debug (由 marusroomId 提供) 用于烧录和单步调试、

CMake Tools (由 Microsoft 提供) 方便以后管理项目。

3.配置兆易创新官方的 Firmware_Library 开发工具

一、安装并配置HomeBrew;ARM GCC;make;OpenOCD

1.看我的另外一篇博客

https://blog.csdn.net/qq_43768851/article/details/161630134?spm=1001.2014.3001.5502

二、安装vscode插件

1.C/C++ (由 Microsoft 提供)

略。

2.Cortex-Debug (由 marus25 提供)

3.CMake Tools (由 Microsoft 提供)

略。

三、配置兆易创新官方的 Firmware_Library 开发工具

1.直接下载 url

https://www.gd32mcu.com/download/agree/box_id/12/document_id/216/path_type/1

进去之后点 ACCEPT 即可开始下载。

2.下载好,并解压

四、配置工程

1.创建目录

在vscode中创建这样结构的一个目录(我们的项目目录)

这些子目录的名字必须正确,它们里面没有内容,包括 Makefile 文件。

2.获取文件 gd32e230x8_flash.ld

在官方库中搜索文件:gd32e230x8_flash.ld

将这个文件拷贝到 Startup 目录下一份。

3.获取文件 startup_gd32e23x.S(注意,大写S)

在官方库中搜索文件:startup_gd32e23x.S

将这个文件拷贝到 Startup 目录下一份。

4.获取目录 GD32E23x_standard_peripheral、CMSIS

在官方库中搜索:GD32E23x_standard_peripheral 还有 CMSIS

将这两个目录,整个拷贝到 Driver/ 目录下一份。

都拷贝入 Driver 目录下:

五、创建文件

1.在 User 目录下创建 gd32e23x_libopt.h

内容:

cpp 复制代码
#ifndef __GD32E23X_LIBOPT_H
#define __GD32E23X_LIBOPT_H

/* 
 * 这里是 GD32E23x 库的配置选项
 * 如果不需要特殊配置,保持为空即可
 */

#endif /* __GD32E23X_LIBOPT_H */

2.在 User 目录下创建 main.c

内容:

cpp 复制代码
#include "gd32e23x.h"
#include "gd32e23x_rcu.h"
#include "gd32e23x_gpio.h"

// 定义一个简单的延迟宏:数值越大,延迟越久
// 根据之前的验证,200,000 次循环大约是 0.5 秒
#define DELAY_500MS  200000
#define DELAY_1S     400000

void SystemInit(void) {
    // 保持默认时钟
}

int main(void) {
    // 1. 使能 GPIOC 时钟
    rcu_periph_clock_enable(RCU_GPIOC); 
    
    // 2. 配置 PC13 为输出 (适配 E23x 新版 API)
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);

    while(1) {
        // --- 第一阶段:快速闪烁 3 次 ---
        for(int i = 0; i < 3; i++) {
            // 点亮
            gpio_bit_write(GPIOC, GPIO_PIN_13, RESET); 
            for(volatile int j = 0; j < DELAY_500MS; j++);
            
            // 熄灭
            gpio_bit_write(GPIOC, GPIO_PIN_13, SET);   
            for(volatile int j = 0; j < DELAY_500MS; j++);
        }

        // --- 第二阶段:停顿 1 秒 ---
        // 确保灯是熄灭状态
        gpio_bit_write(GPIOC, GPIO_PIN_13, SET); 
        for(volatile int j = 0; j < DELAY_1S; j++);
    }
}

3.写入 Makefile

写入内容:

bash 复制代码
# --- 项目配置 ---
TARGET = Build/project
CPU = cortex-m23
CC = arm-none-eabi-gcc
OBJCOPY = arm-none-eabi-objcopy
SIZE = arm-none-eabi-size

# --- 路径配置 ---
USER_DIR = User
DRIVER_DIR = Driver/GD32E23x_standard_peripheral
CMSIS_DIR = Driver/CMSIS
STARTUP_DIR = Startup

# --- 包含路径 (Include) ---
C_INCLUDES = \
    -I$(USER_DIR) \
    -I$(DRIVER_DIR)/Include \
    -I$(CMSIS_DIR)/GD/GD32E23x/Include \
    -I$(CMSIS_DIR)

# --- 编译选项 ---
CFLAGS = -mcpu=$(CPU) -mthumb -O0 -g -Wall \
    --specs=nano.specs \
    $(C_INCLUDES) \
    -ffunction-sections -fdata-sections

# --- 链接选项 ---
LDSCRIPT = $(STARTUP_DIR)/gd32e230x8_flash.ld
LDFLAGS = -T$(LDSCRIPT) -mcpu=$(CPU) -mthumb \
    -Wl,--gc-sections --specs=nano.specs -lc -lm

# --- 源代码文件 ---
# 1. 用户代码
SRCS = $(wildcard $(USER_DIR)/*.c)

# 2. 启动文件
SRCS += $(STARTUP_DIR)/startup_gd32e23x.S

# 3. 【关键修正】:只编译真正用到的驱动文件,跳过有 Bug 的 ADC 等其他文件
SRCS += $(DRIVER_DIR)/Source/gd32e23x_rcu.c
SRCS += $(DRIVER_DIR)/Source/gd32e23x_gpio.c

# 4. CMSIS 核心系统文件
# SRCS += $(wildcard $(CMSIS_DIR)/GD/GD32E23x/Source/*.c)

# 编译生成的文件名
OBJS = $(SRCS:.c=.o)
OBJS := $(OBJS:.S=.o)

# --- 编译规则 ---

all: $(TARGET).bin $(TARGET).elf

$(TARGET).elf: $(OBJS)
	$(CC) $(OBJS) $(LDFLAGS) -o $@
	$(SIZE) $@

$(TARGET).bin: $(TARGET).elf
	$(OBJCOPY) -O binary $< $@

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

%.o: %.S
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -rf Build/*

.PHONY: all clean

4.修改官方库

我不知道为什么,官方库里好像有bug。

打开文件:

Driver/GD32E23x_standard_peripheral/Source/gd32e23x_gpio.c

像我这样注释掉 deinit 函数中的一些内容,否则编译报错:

然后正常编译,在终端写入:

bash 复制代码
make

编译成功:

生成了一个 project.bin 文件,在 Build 目录下:

然后想办法烧录进入 GD32 就可以了。

我使用的烧录方法是:PowerWrite 烧录器烧录。

在烧录之前,记得将跳线帽插在 BOOT 和 1 上。

关于这点,官方的解释:

https://wiki.lckfb.com/zh-hans/gd32e230c8t6/

最终结果,给开发板上电后,能够看到蓝灯快速闪烁3次,然后持续亮1秒,再闪烁3次,再持续亮1秒...如此循环。

最终结果,给开发板上电后,能够看到蓝灯快速闪烁3次,然后持续亮1秒,再闪烁3次,再持续亮1秒...如此循环。

最终结果,给开发板上电后,能够看到蓝灯快速闪烁3次,然后持续亮1秒,再闪烁3次,再持续亮1秒...如此循环。

相关推荐
荣--2 天前
在 strip 二进制 + 基址随机化的栈里做崩溃去重 —— 三阶段算法与一行 Crash Flag
嵌入式·崩溃分析·栈指纹·去重算法
释然小师弟2 天前
Android开发十年:反思与回顾
android·后端·嵌入式
FreakStudio2 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
元Y亨H5 天前
MacBook Air 开发神器:IDEA 与 PyCharm 极简安装及环境配置
macos
yuanyxh6 天前
macOS 应用 - 纯对话生成
前端·macos·ai编程
bush47 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
AI创界者7 天前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
摇滚侠7 天前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea
国产化创客8 天前
ESP32 CameraWebServer 原生摄像头项目全解析
物联网·开源·嵌入式·实时音视频·智能硬件
霸道流氓气质8 天前
Trae IDE 新手入门指南
ide