1. 搭建GD32F103最小系统板并点亮LED
任务目标
使用GD32F103C8T6芯片搭建可独立运行的最小系统板,编写并烧录程序点亮板载LED,以此验证开发环境、烧录链路与基本GPIO输出操作是否正常。
硬件准备与接线
- GD32F103C8T6核心板(或自行焊接最小系统:芯片 + 8MHz晶振 + 两个22pF负载电容 + 10kΩ上拉复位电阻 + 3.3V供电 + 0.1μF去耦电容)
- LED串联330Ω电阻,阳极接PB0,阴极接GND
- ST-Link/V2调试器(SWD接口:SWDIO、SWCLK、GND、3.3V)
- USB转TTL串口模块(仅烧录时使用可选,推荐ST-Link直接烧录)
软件环境
- Keil MDK-ARM 5.30+ 或 支持ARMCC/AC6的版本
- GD32F10x固件库(从GigaDevice官网下载,或使用寄存器直接操作——本案例采用寄存器方式,无需固件库)
- ST-Link驱动及烧录工具(Keil内配置即可)
核心代码实现
以下代码直接操作寄存器完成GPIOB时钟使能、PB0配置为推挽输出并循环翻转电平,实现LED闪烁。代码不依赖任何固件库,仅需芯片头文件定义寄存器地址。
// main.c — GD32F103C8T6 最小系统LED闪烁
#include "gd32f10x.h" // 芯片寄存器地址定义
void delay_volatile(void) {
volatile uint32_t i;
for (i = 0; i < 500000; i++); // 软件延时,约0.2s@72MHz
}
int main(void) {
// 1. 使能GPIOB时钟(APB2总线,位3对应GPIOBEN)
RCC->APB2ENR |= (1 << 3);
// 2. 配置PB0为推挽输出,最大速度50MHz
// CRL寄存器控制PIN0~7,每PIN占4位:MODE=11(50MHz),CNF=00(推挽)
GPIOB->CRL &= ~(0xF << 0); // 先清空PB0配置位
GPIOB->CRL |= (0x3 << 0); // MODE=11, CNF=00 → 通用推挽输出
while (1) {
GPIOB->ODR ^= (1 << 0); // 翻转PB0电平
delay_volatile();
}
}
编译与烧录步骤
- 在Keil中新建工程,芯片选择
GD32F103C8(若列表无此型号,需安装GD32设备支持包)。 - 将上述代码保存为
main.c并加入工程。 - 工程配置中勾选
Use MicroLIB(减小代码体积),并设置烧录器为ST-Link Debugger,在Settings中确认能识别到SWD设备。 - 编译工程,确认0 Error。点击
Download烧录程序。
验证方法与通过标准
- 烧录成功后,按下核心板复位键(或重新上电),观察LED状态。
- 通过条件:LED以约2.5Hz频率持续闪烁(亮0.2s灭0.2s)。若LED常亮或常灭,检查PB0接线极性、LED是否损坏、代码中CRL配置是否正确。
- 若下载时提示
No target connected,检查ST-Link与SWD四线连接是否牢固,核心板是否已供电。
常见问题排查
- 芯片无法识别:确认BOOT0引脚接GND(正常运行模式),BOOT1悬空即可。
- LED不亮但程序已烧录:用万用表测量PB0引脚电压,正常应在0V与3.3V间跳变。若无跳变,检查CRL寄存器配置是否被后续代码意外修改。
- 软件延时时间不准:本案例未配置系统时钟,芯片默认使用内部8MHz RC振荡器,延时约0.2s。若需精确延时,需在main开头配置PLL锁相环将主频提升至72MHz。
本案例验证通过后,即证明最小系统硬件设计正确、开发环境可用、GPIO输出通路正常,可作为后续FOC控制项目的基础平台。