提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、开发环境搭建
-
- [1. 安装交叉编译工具链](#1. 安装交叉编译工具链)
- [2. 安装 CMake 构建系统](#2. 安装 CMake 构建系统)
- [3. 安装 OpenOCD 烧录调试工具](#3. 安装 OpenOCD 烧录调试工具)
- [4. 安装串口工具(可选)](#4. 安装串口工具(可选))
- [二、获取 GD32 SDK](#二、获取 GD32 SDK)
- [三、CMake 工程配置](#三、CMake 工程配置)
-
- [1. 创建 CMakeLists.txt](#1. 创建 CMakeLists.txt)
- [2. 配置头文件路径](#2. 配置头文件路径)
- [3. 收集源文件](#3. 收集源文件)
- [4. 编译宏定义](#4. 编译宏定义)
- 四、编译工程
- 五、烧录固件
-
- [1. OpenOCD 配置](#1. OpenOCD 配置)
- [2. 一键烧录脚本](#2. 一键烧录脚本)
- 六、调试功能
-
- [1. GDB 在线调试](#1. GDB 在线调试)
- [2. 串口调试(USART0)](#2. 串口调试(USART0))
- 七、工程目录整理
-
- [1. 目录结构优化](#1. 目录结构优化)
- [2. 头文件统一管理](#2. 头文件统一管理)
- [3. CMake 路径更新](#3. CMake 路径更新)
- [八、内置 Demo 功能](#八、内置 Demo 功能)
-
- [1. 跑马灯 Demo](#1. 跑马灯 Demo)
- [2. 精确延时实现](#2. 精确延时实现)
- [3. 串口调试输出](#3. 串口调试输出)
- [九、SDK 内置功能概览](#九、SDK 内置功能概览)
-
- [1. 标准外设驱动](#1. 标准外设驱动)
- [2. 中间件](#2. 中间件)
- 总结
前言
本文详细记录了基于 CMake 的 GD32F470ZGT6 工程模板的完整搭建过程,涵盖环境搭建、SDK 配置、CMake 工程创建、编译烧录、调试功能以及工程目录整理等全流程。
提示:以下是本篇文章正文内容,下面案例可供参考
一、开发环境搭建
1. 安装交叉编译工具链
GD32F470ZGT6 是 ARM Cortex-M4 内核芯片,需要使用 arm-none-eabi 交叉编译工具链。
bash
sudo apt update
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
验证安装:
bash
arm-none-eabi-gcc --version
2. 安装 CMake 构建系统
bash
sudo apt install cmake
cmake --version
3. 安装 OpenOCD 烧录调试工具
bash
sudo apt install openocd
openocd --version
4. 安装串口工具(可选)
bash
sudo apt install picocom minicom
二、获取 GD32 SDK
从兆易创新官网下载 GD32F4xx_Firmware_Library_V3.3.3.zip,解压后将核心目录复制到工程:
sdk/
├── firmware/
│ ├── CMSIS/ # ARM CMSIS 核心文件
│ ├── GD32F4xx_standard_peripheral/ # 标准外设驱动
│ └── GD32F4xx_usb_library/ # USB 协议栈
└── utilities/ # 工具文件
三、CMake 工程配置
1. 创建 CMakeLists.txt
在项目根目录创建 CMakeLists.txt:
cmake
cmake_minimum_required(VERSION 3.16)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR ARM)
# 交叉编译工具链
set(TOOLCHAIN_PREFIX "arm-none-eabi" CACHE STRING "Toolchain prefix")
set(CMAKE_C_COMPILER "${TOOLCHAIN_PREFIX}-gcc")
set(CMAKE_ASM_COMPILER "${TOOLCHAIN_PREFIX}-gcc")
# Cortex-M4 + 硬件 FPU 编译参数
set(TARGET_ARCH_FLAGS "-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16")
set(CMAKE_C_FLAGS "${TARGET_ARCH_FLAGS} -fdata-sections -ffunction-sections -Wall")
set(CMAKE_EXE_LINKER_FLAGS "${TARGET_ARCH_FLAGS} -specs=nano.specs -specs=nosys.specs -Wl,--gc-sections")
project(gd32f470-template C ASM)
2. 配置头文件路径
cmake
include_directories(
${SDK_ROOT}/firmware/CMSIS
${SDK_ROOT}/firmware/CMSIS/GD/GD32F4xx/Include
${SDK_ROOT}/firmware/GD32F4xx_standard_peripheral/Include
${PROJ_ROOT}/include
${PROJ_ROOT}/app
${PROJ_ROOT}/system
)
3. 收集源文件
cmake
file(GLOB PERIPHERAL_SOURCES "${SDK_ROOT}/firmware/GD32F4xx_standard_peripheral/Source/gd32f4xx_*.c")
file(GLOB APP_SOURCES ${PROJ_ROOT}/app/*.c)
add_executable(${CMAKE_PROJECT_NAME}.elf ${PERIPHERAL_SOURCES} ${SYSTEM_SOURCES} ${STARTUP_SOURCES} ${APP_SOURCES})
4. 编译宏定义
cmake
target_compile_definitions(${CMAKE_PROJECT_NAME}.elf PRIVATE
GD32F470
HXTAL_VALUE=25000000
)
四、编译工程
bash
mkdir build && cd build
cmake ..
make -j4
编译后生成的文件:
| 文件 | 用途 |
|---|---|
| gd32f470-template.elf | ELF 可执行文件(GDB 调试) |
| gd32f470-template.hex | Intel HEX 格式(烧录用) |
| gd32f470-template.bin | 二进制镜像 |
| gd32f470-template.map | 链接映射文件 |
五、烧录固件
1. OpenOCD 配置
创建 flash/gd32f470.cfg:
set WORKAREASIZE 0x10000
source [find target/stm32f4x.cfg]
GD32F4xx 与 STM32F4xx 引脚和 Flash 兼容,可直接使用 stm32f4x 配置。
2. 一键烧录脚本
创建 flash/flash.sh:
bash
#!/bin/bash
sudo openocd -f interface/cmsis-dap.cfg -f flash/gd32f470.cfg \
-c "program build/gd32f470-template.elf verify reset exit"
执行烧录:
bash
./flash/flash.sh
六、调试功能
1. GDB 在线调试
bash
./debug/gdb.sh
自动启动 OpenOCD 并连接 GDB,断点停在 main() 函数。
2. 串口调试(USART0)
| 参数 | 值 |
|---|---|
| 串口 | USART0 (PA9/TX, PA10/RX) |
| 波特率 | 115200 |
| 数据位 | 8 |
| 停止位 | 1 |
打开串口终端:
bash
./debug/serial.sh
七、工程目录整理
1. 目录结构优化
将原始的 src/ 目录重命名为项目名 myprog/,符合大厂工程规范:
myprog/
├── app/ # 应用层代码 (.c 源文件)
├── include/ # 头文件统一目录 (.h 文件)
├── startup/ # 启动文件
└── system/ # 系统级文件
2. 头文件统一管理
所有 .h 头文件统一放入 myprog/include/ 目录,包括:
main.h- 主程序头文件debug.h- 串口调试头文件gd32f4xx_libopt.h- 固件库功能裁剪配置
3. CMake 路径更新
同步更新 CMakeLists.txt 中的路径引用:
cmake
set(PROJ_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/myprog")
include_directories(${PROJ_ROOT}/include)
八、内置 Demo 功能
1. 跑马灯 Demo
4 个 LED 依次点亮,每秒切换一个:
| LED | 引脚 | 端口 |
|---|---|---|
| LED1 | PE3 | GPIOE |
| LED2 | PD7 | GPIOD |
| LED3 | PG3 | GPIOG |
| LED4 | PA5 | GPIOA |
2. 精确延时实现
使用 SysTick 硬件定时器实现精确毫秒延时:
c
static volatile uint32_t g_tick_count = 0;
void SysTick_Handler(void) {
g_tick_count++; // 每 1ms 中断一次
}
void delay_ms(uint32_t ms) {
uint32_t tick_start = g_tick_count;
while((g_tick_count - tick_start) < ms) {
__NOP();
}
}
3. 串口调试输出
启动后通过 USART0 输出:
==============================
GD32F470ZGT6 Running Light Demo
System Clock: 200 MHz
==============================
LED1 ON | Loop: 0
LED2 ON | Loop: 0
...
九、SDK 内置功能概览
1. 标准外设驱动
| 模块 | 描述 |
|---|---|
| GPIO | 通用输入输出端口 |
| USART/UART | 串口通信 |
| SPI | SPI 总线接口 |
| I2C | I2C 总线接口 |
| ADC | 模数转换器 (12-bit) |
| TIMER | 通用定时器 |
| CAN | 控制器局域网总线 |
| USBFS/USBHS | USB 控制器 |
| ENET | 以太网控制器 |
| RTC | 实时时钟 |
2. 中间件
| 模块 | 描述 |
|---|---|
| USB Device Stack | CDC/HID/MSC/DFU/IAP/Audio |
| USB Host Stack | HID/MSC |
| FatFS | FAT 文件系统 |
总结
以上就是 GD32F470ZGT6 CMake 模板工程的完整搭建流程,从环境搭建、SDK 配置、CMake 工程创建到编译烧录和目录整理,覆盖了嵌入式开发的各个环节。工程已具备:
- 完整的 CMake 交叉编译配置
- OpenOCD + CMSIS-DAP 一键烧录方案
- GDB 在线调试支持
- 串口调试模块 (USART0)
- 跑马灯 Demo (SysTick 精确延时)
- 规范的工程目录结构 (myprog/app, myprog/include)
基于此模板可快速扩展其他外设驱动和应用功能。