萤火工场 GD32VW553-IOT-V2 VSCode环境部署及HC-SR04超声波测距传感器实验

分享作者:wx17700903276414
评测品牌:萤火工场
评测型号:GD32VW553-IOT-V2
发布时间:2026-03-03 13:36:57
1
概要
本文主要介绍了vscode Embedded IDE开发环境,烧录和HC-SR04超声波传感器飞行时间公式,代码及功能演示
开源口碑分享内容

环境部署


1) 下载与解压

在 GigaDevice 兆易创新官网下载:  

GD32VW553系列 MCU | 兆易创新 GigaDevice | 官方网站

下载内容:

  • 烧录工具:GD32AllInOneProgrammer
  • 固件库:GD32VW55x_Demo_Suites

下载后并解压。


2) VSCode 安装扩展

在 VSCode 里安装扩展:Embedded IDE

3) 导入工程

选择导入项目:

选择第三个:Eclipse embedded gcc projects

打开以下路径下的 .cproject文件:  

\GD32VW553H_EVAL_Demo_Suites\Projects\01_GPIO_Running_LED\eclips

4) 配置工具链


设置工具链:

选择:RISC-V GCC Toolchain

5) 配置链接脚本与构建器选项


配置链接脚本路径和构建器选项:



链接脚本路径设置为:  

GD32VW55x_Firmware_Library\RISCV\env_Eclipse\GD32VW553xM.lds



6) 修改示例代码(点亮板载 LED)

接下来我们要修改示例代码里面的程序。  

根据原理图:板载 LED 位于PB2


我拿到示例程序没仔细看就直接上传了,发现灯一直不亮,还以为是上传过程有问题  

上传了两次,才反应过来 示例程序里的灯和开发板上的灯位置不一样

#include "gd32vw55x.h"
#include "systick.h"
#include <stdio.h>
#include "gd32vw553h_eval.h"
/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none


*/
int main(void)
{
    systick_config();
    /* enable the LED clock */
    rcu_periph_clock_enable(RCU_GPIOB);
    /* configure LED GPIO port */
    gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
    /* reset LED GPIO pin */
    gpio_bit_reset(GPIOB, GPIO_PIN_2);


    while(1) {
        gpio_bit_set(GPIOB, GPIO_PIN_2);
        delay_1ms(500);
        gpio_bit_reset(GPIOB, GPIO_PIN_2);
        delay_1ms(500);
    }
}

7) 编译验证

尝试编译:

如图上就是能成功编译。

8) 烧录固件

如图所示调整开发板

打开GD32AllInOneProgrammer,选择好对应的COM口,选择波特率为115200

在Download里选择文件

>注:vscode生成的文件是hex格式,选择文件时需要在窗口中切换对应的后缀格式


点击Download,等待进度条到100%,就证明刷入成功了。断开type-c把boot1恢复。就能有如下效果。


HC-SR04超声波测距传感器实验

基本介绍

HC-SR04超声波传感器通过声纳原理测定物体距离。

该传感器测量范围为2厘米至400厘米(0.8英寸至157英寸),精度达0.3厘米(0.1英寸),适用于大多数业余爱好者项目。

此模块集成了超声波发射器与接收器模块。

根据数据手册中的公式

有以下代码

cm = ((float)duration_us / 2.0f) / 29.1f;
inches = ((float)duration_us / 2.0f) / 74.0f;
printf("%.2fin, %.2fcm\n\r", inches, cm);

完整代码

#include "gd32vw55x.h"
#include "systick.h"
#include <stdio.h>
#include "gd32vw553h_eval.h"


#define ULTRASONIC_GPIO_PORT      GPIOA
#define ULTRASONIC_TRIG_PIN       GPIO_PIN_0
#define ULTRASONIC_ECHO_PIN       GPIO_PIN_1
#define ULTRASONIC_TIMEOUT_US     30000U


void com_usart_init(void);
static void ultrasonic_gpio_init(void);
static void delay_us(uint32_t us);
static uint32_t pulse_in_high_us(uint32_t timeout_us);
/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
    uint32_t duration_us;
    float cm;
    float inches;


    systick_config();
    com_usart_init();
    ultrasonic_gpio_init();
    printf("\n\rUltrasonic sensor example (TRIG: PA0, ECHO: PA1)\n\r");


    while(1) {
        gpio_bit_reset(ULTRASONIC_GPIO_PORT, ULTRASONIC_TRIG_PIN);
        delay_us(5);
        gpio_bit_set(ULTRASONIC_GPIO_PORT, ULTRASONIC_TRIG_PIN);
        delay_us(10);
        gpio_bit_reset(ULTRASONIC_GPIO_PORT, ULTRASONIC_TRIG_PIN);


        duration_us = pulse_in_high_us(ULTRASONIC_TIMEOUT_US);


        if(0U == duration_us) {
            printf("out of range\n\r");
        } else {
            cm = ((float)duration_us / 2.0f) / 29.1f;
            inches = ((float)duration_us / 2.0f) / 74.0f;
            printf("%.2fin, %.2fcm\n\r", inches, cm);
        }


        delay_1ms(250);
    }
}


static void ultrasonic_gpio_init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);


    gpio_mode_set(ULTRASONIC_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, ULTRASONIC_TRIG_PIN);
    gpio_output_options_set(ULTRASONIC_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, ULTRASONIC_TRIG_PIN);
    gpio_bit_reset(ULTRASONIC_GPIO_PORT, ULTRASONIC_TRIG_PIN);


    gpio_mode_set(ULTRASONIC_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, ULTRASONIC_ECHO_PIN);
}


static void delay_us(uint32_t us)
{
    uint32_t cycles_per_us = SystemCoreClock / 1000000U;
    uint32_t cycles = (cycles_per_us * us) / 5U;


    while(cycles--) {
        __asm volatile("nop");
    }
}


static uint32_t pulse_in_high_us(uint32_t timeout_us)
{
    uint32_t wait_us = 0U;
    uint32_t pulse_us = 0U;


    while(RESET != gpio_input_bit_get(ULTRASONIC_GPIO_PORT, ULTRASONIC_ECHO_PIN)) {
        if(wait_us++ >= timeout_us) {
            return 0U;
        }
        delay_us(1);
    }


    wait_us = 0U;
    while(SET != gpio_input_bit_get(ULTRASONIC_GPIO_PORT, ULTRASONIC_ECHO_PIN)) {
        if(wait_us++ >= timeout_us) {
            return 0U;
        }
        delay_us(1);
    }


    while(SET == gpio_input_bit_get(ULTRASONIC_GPIO_PORT, ULTRASONIC_ECHO_PIN)) {
        if(pulse_us++ >= timeout_us) {
            return 0U;
        }
        delay_us(1);
    }


    return pulse_us;
}




void com_usart_init(void)
{
    /* enable COM GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);


    /* connect port to USART TX */
    gpio_af_set(GPIOB, GPIO_AF_8, GPIO_PIN_15);
    /* connect port to USART RX */
    gpio_af_set(GPIOA, GPIO_AF_2, GPIO_PIN_8);


    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_15);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_15);


    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_8);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_8);


    /* USART configuration */
    usart_deinit(USART0);
    usart_word_length_set(USART0, USART_WL_8BIT);
    usart_stop_bit_set(USART0, USART_STB_1BIT);
    usart_parity_config(USART0, USART_PM_NONE);
    usart_baudrate_set(USART0, 115200U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);


    usart_enable(USART0);
}

实验效果

总结

  • 功能实现:实现超声波测距,触发脚为 A0(PA0),回波脚为 A1(PA1)。
  • 时序实现: 5us LOW -> 10us HIGH 触发脉冲,并测量 ECHO 高电平持续时间。
  • 距离计算:cm=(duration/2)/29.1,inches=(duration/2)/74
  • 串口输出:串口周期打印所测距离。


参考文献

GD32VW553-IOT V2开发版【三分钟快速环境搭建教程—VSCode】_口碑测评-iCEasy商城

HC-SR04中文资料_最新报价_数据手册下载_Universal Microelectronics-超声波收发器-立创商城

全部评论
暂无评论
0/144