GD32VW553-IOT V2开发板 【实现呼吸灯】
分享作者:wx17581050569696
作者昵称:十日之谜
评测品牌:萤火工场
评测型号:GD32VW553-IOT-V2
发布时间:2025-10-09 11:23:11
1
前言
基于兆易创新(GigaDevice)GD32VW553——一款 RISC-V 内核的 32 位无线双模MCU的开源硬件板GD32VW553-IOT-V2。
开源口碑分享内容

       一、硬件展示:

       该开发板采用了全新的开源指令集架构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 延迟,控制呼吸速度

       }

   }

}


全部评论
暂无评论
0/144