总览
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秒...如此循环。