该开发板采用了全新的开源指令集架构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】
——开发软件:VSCODE
安装过程就不细说了,照着这篇测评配置,这里主要列出版本更新(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 延迟,控制呼吸速度
- }
- }
- }