萤火工场 GD32VW553-IOT
分享作者:hamer
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-04-07 11:36:43
0
前言
最近太忙,收到开发板有些意外。突然想起来前段时间确实有商城的工作人员联系我了。没想到真的申请到了。马不停蹄开始开箱学习;
开源口碑分享内容

资料获取

这里应该包含两部分资料,一部分是开发板设计者,也就是萤火工场的关于开发板的资料;一部分是开发板搭载的MCU的技术手册和开发套件;

其中开发板相关的资料可以直接在商城下载主要包含两个文件:一个是开发板用户手册,一个是开发板的原理图:

MCU的技术手册和开发套件需要去兆易创新官方网站下载: 兆易创新的资料比较多,在以后的开发学习中可以慢慢看。

我们这里只需要下载MCU用户手册、开发工具、SDK(软件开发套件):

用户手册:

软件开发烧录工具

标准固件库和wifi蓝牙固件库

认识开发板

外观

如图所示,开发板还是很小巧的。宽度跟拇指差不多。在拿到开发板准备分享之前也在B站查过相关的资料。有个UP主说箭头的地方是烧录芯片。

大概他没有好好研究原理图,从原理图看这里明明是一个NC(不焊接)的FLASH。接下来看下原理图:

原理图

NC的FLASH:

从图中也有标注是NC的,而且是FLASH。

供电:

这个供电不太理解,为什么用这种6PIN的TypeC。 只能供电,也不能烧录程序。有了解的小伙伴可以讨论一下;


BOOT 模式选择电路

这部分电路设计固件的烧录是必须要搞清楚的,看其他的分享大家都忽略了这部分,而且按照统一的接线方式接线烧录。

这里我分享一下我的理解:

根据上边的原理图,BOOT模式(引导模式)是通过BOOT0和BOOT1来决定的;这里默认忽略了其他的因素。具体可以参考兆易创新的用户手册1.4 关于引导模式的说明:

从上边的引导模式表中不难发现,引导模式就是选择引导地址和引导区域;除了跟BOOT0和BOOT1有关还受到寄存器EFBOOTLK的影响。

当寄存器EFBOOTLK的值是0的情况下才仅依赖BOOT0和BOOT1。这个寄存器的默认值就是0;

因此要确定引导模式只需要确定BOOT0和BOOT1的值,那么BOOT0和BOOT1的值是怎么确定的呢?还是官方的用户手册。

如上表所示,BOOT0的值在SWBOOT0寄存器位值为0的情况下仅受PC8的影响;

因此如果想让BOOT0的值是1就将PC8接VCC,这个开发板中就是跳线帽接PC8和BOOT0;

同样的道理如果想让BOOT1的值是0就让PB1接GND;

这样就可以在复位后通过串口下载程序。

但是这里我有个疑问。。。。。。。。

从原理图看BOOT0的上拉电阻是没有NC的,相当于浮空。 上电测试了电压也不是稳定的3.3V; 有知道的小伙伴可以讲解一下。


环境搭建

需要用到的两个软件都是在兆易创新的官网下载的。解压后就可以直接使用。免安装的。

固件烧录工具

集成开发环境

功能测试暨点灯

创建工程

按照下边的流程一步一步进行创建测试工程;

生成工程,并编译:


源码讲解

主程序:

拿到一个源码后首先需要看main.c 文件,这个文件中包含两个函数:

void led_spark(void)        // LED灯闪烁程序

int main(void)                // 主程序

其中主程序中进行了系统和外设初始化:

  • 系统初始化,配置系统滴答,在使用延时函数前必须调用:systick_config();
  • 设置中断优先级分组(问的deepseek):eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);
  • 初始化按键,LED,串口:
    • gd_eval_led_init(LED1);        LED1: 使用PA4
    • gd_eval_led_init(LED2);        LED2: 使用PA5
    • gd_eval_led_init(LED3);        LED3: 使用PA6
    • gd_eval_com_init(EVAL_COM0);    串口使用串口0,PB15->TX; PA8->RX
    • gd_eval_key_init(KEY_TAMPER_WAKEUP, KEY_MODE_GPIO);
  • 打印信息并且进入死循环检测按键:
    • printf("\r\nCK_SYS is %d\r\n", rcu_clock_freq_get(CK_SYS));
    • printf("\r\nCK_AHB is %d\r\n", rcu_clock_freq_get(CK_AHB));
    • printf("\r\nCK_APB1 is %d\r\n", rcu_clock_freq_get(CK_APB1));
    • printf("\r\nCK_APB2 is %d\r\n", rcu_clock_freq_get(CK_APB2));
  • 进入死循环检测按键:
 while(1) {
     if(RESET == gd_eval_key_state_get(KEY_TAMPER_WAKEUP)) {
         delay_1ms(50);
         if(SET == gd_eval_key_state_get(KEY_TAMPER_WAKEUP)) {
             gd_eval_led_toggle(LED1);
         }
     }
 }

烧录接线

通过上边的源码分析我们按照下边的方式接线:

下载电路: PA8接串口转TTL工具的TX; PB15接串口转TTL工具的RX;

LED电路:三个LED 阳极分别接PA4,PA5,PA6. 阴极接地;


功能演示、

串口打印信息:

LED灯:
































全部评论
暂无评论
0/144