一、硬件展示:
该开发板采用了全新的开源指令集架构RISC-V处理器内核,主频可达160MHz。集成了高达4MB Flash及320KB SRAM,另有32KB可配置指令高速缓存(I-Cache),大幅提升了CPU处理效率,支持2.4GHz Wi-Fi 6及BLE5.2无线连接标准;
——GD32VW553-IOT-V2全新的设计针对旧款的开发痛点进行了系统性优化:
1.Type-C 口升级:集成串口功能,配了CH340芯片,可以直接插Type-C下载,提升开发便捷性;
2.新增开关:增设用户可自定义按键及指示灯,拓展交互控制与状态显示功能;
3.板面布局优化:背面增加引脚丝印,正面仅保留关键器件丝印,布局清晰及信息聚焦;
4.FLASH 焊接位:移至背面,减少焊接风险,增加开源二次开发的灵活性;
5.BOOT 开关优化:升级为拔码式设计,简化操作逻辑,提升切换效率;
6.稳固性增强:板厚增至 1mm,提升了整体结构强度与抗变形能力。
——产品细节,如下图:
1.需自备type-C数据线,不建议使用充电宝自带的线,自测存在非数据线的产品,建议直接用买手机送的充电器的type-C数据线或者直接购买;
2.烧录时需将SW拨码到ON一边,否则软件会弹窗,如下图,复位时需拨回数字一边。
——硬件规格(参考:V2萤火工场·GD32VW553-IOT开源硬件规格书.pdf)
1.系统资源:
2.接口定义:
3.板卡布局:
4.系统框图:
二、原理图(参考:V2原理图.pdf)
——灯:[D1:电源灯;D5:自定义灯]:
——按键:[K1:复位按键;K2:自定义按键]
——BOOT:【参考数据手册:GD32VW553xx Datasheet_Rev1.2.pdf】
三:环境搭建:参考 https://www.iceasy.com/review/1967510701380722690
——开发模板:GD32VW55x_Demo_Suites_V1.4.0;
——开发软件:VSCODE
——烧录软件:GD32AllInOneProgrammer
安装过程就不细说了,照着这篇测评配置,这里主要列出版本更新(1.104.1版)要注意的地方:
——安装使用工具和构建器的位置:
四、驱动代码
由于呼吸灯需要使用定时器实现,所以参考数据手册:GD32VW553xx Datasheet_Rev1.2.pdf进行配置,这里使用PB2的TIMER1_CH3;
实现效果:D5从熄灭状态缓慢到明亮状态,再缓慢熄灭,不停循环;
#include "gd32vw55x.h"
#include "systick.h"
#include <stdio.h>
#include "gd32vw553h_eval.h"
void timer_config(void);
void timer_config(void)
{
rcu_periph_clock_enable(RCU_TIMER1); // 使能 TIMER1 时钟
// 基本定时器配置
timer_deinit(TIMER1);
timer_parameter_struct timer_initpara;
timer_struct_para_init(&timer_initpara);
timer_initpara.prescaler = 108 - 1; // 分频系数(108MHz / 108 = 1MHz)
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 1000 - 1; // PWM 周期 = 1000 个计数(1KHz PWM)
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_init(TIMER1, &timer_initpara);
// PWM 输出配置(CH0)
timer_oc_parameter_struct timer_ocinitpara;
timer_channel_output_struct_para_init(&timer_ocinitpara);
timer_ocinitpara.outputstate = TIMER_CCX_ENABLE; // 使能输出
timer_ocinitpara.outputnstate = TIMER_CCXN_DISABLE;
timer_ocinitpara.ocpolarity = TIMER_OC_POLARITY_HIGH; // 高电平有效
timer_ocinitpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH;
timer_ocinitpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW;
timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
timer_channel_output_config(TIMER1, TIMER_CH_3, &timer_ocinitpara);
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_3, 0); // 初始占空比 = 0
timer_channel_output_mode_config(TIMER1, TIMER_CH_3, TIMER_OC_MODE_PWM0); // PWM 模式
timer_channel_output_shadow_config(TIMER1, TIMER_CH_3, TIMER_OC_SHADOW_DISABLE);
timer_auto_reload_shadow_enable(TIMER1); // 使能自动重载
timer_enable(TIMER1); // 启动 TIMER1
}
int main(void)
{
systick_config();
timer_config();
/* enable the LED clock */
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2); // PA6 复用功能
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_2); // 推挽输出,50MHz
gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_2);
while(1) {
for (uint16_t duty = 0; duty < 1000; duty++) {
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_3, duty);
delay_1ms(1); // 1ms 延迟,控制呼吸速度
}
// 亮度逐渐减小(占空比从 100% 到 0%)
for (uint16_t duty = 1000; duty > 0; duty--) {
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_3, duty);
delay_1ms(1); // 1ms 延迟,控制呼吸速度
}
}
}

