萤火工场GD32VW553-IOT 串口中断例程烧录

分享作者:XC_YiXian
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-03-31 11:51:50
0
概要
分享一下自己的萤火工场GD32VW553-IOT开发板串口接收中断的烧录过程。
开源口碑分享内容

分享一下自己的萤火工场GD32VW553-IOT开发板串口接收中断的烧录过程。

(真是一块非常漂亮的小板子)

目录

一、硬件连接

二、软件环境搭建

三、程序代码

四、烧录过程及结果展示

五、过程中出现的问题




一、硬件连接

到手以后以为能通过type-c接口烧录,但观察原理图发现type-c接口是6pin的只有供电的作用,只好掏出USB转TTL。

根据用户手册调整好跳线帽接好USB-TTL的四根线

(注意:

       1. 手册上说三串行口均可使用,实际GD32AllInOneProgrammer测试中UART2能连接,UART1不行,USART0好像也不行

       2. 网上很多文章说TYPE-C口在下时左边是BOOT1,右边是BOOT0,可是我测得下面的引脚为GND,那么应该是左边为BOOT0,右边为BOOT1才对吧?求教)

二、软件环境搭建

软件方面使用GD32 Embedded builder编译+GD32AllInOneProgrammer烧录的形式:

下载链接:兆易创新GigaDevice-资料下载兆易创新GD32 MCU

无需安装,找个好地方解压即可。

工程创建参考:萤火工场 GD32VW553-IOT 开发板使用指南-CSDN博客 这里就直接跳过了

三、程序代码

main.c代码如下:


/*!
    \file    main.c
    \brief   USART printf

    \version 2025-01-16, V1.4.0, firmware for GD32VW55x
*/

/*
    Copyright (c) 2025, GigaDevice Semiconductor Inc.

    Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    1. Redistributions of source code must retain the above copyright notice, this
       list of conditions and the following disclaimer.
    2. Redistributions in binary form must reproduce the above copyright notice,
       this list of conditions and the following disclaimer in the documentation
       and/or other materials provided with the distribution.
    3. Neither the name of the copyright holder nor the names of its contributors
       may be used to endorse or promote products derived from this software without
       specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.
*/

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

void com_usart_init(void);


/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
    /* initialize the COM */
	systick_config();
    com_usart_init();
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    gpio_bit_reset(GPIOA,GPIO_PIN_11);
    //上面两行是我在PA11和3.3V间接了个LED来观察程序是否执行
    while(1){
    	
    }
}
//下面代码改自官方串口例程,用的是UART1
/*!
    \brief      initialize the USART configuration of the COM
    \param[in]  none
    \param[out] none
    \retval     none
*/
void com_usart_init(void)
{
    /* enable COM GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);//GPIOA时钟使能

    /* enable USART clock */
    rcu_periph_clock_enable(RCU_UART1);//UART1时钟使能

    //GPIO复用模式配置
    /* connect port to USART TX */
    gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_4);
    /* connect port to USART RX */
    gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_5);

    //配置GPIO模式和速率
    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_4);

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

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

    usart_enable(UART1);

    // 使能USART中断
    eclic_irq_enable(UART1_IRQn, 0, 0);
    // 使能串口接收中断
    usart_interrupt_enable(UART1, USART_INT_RBNE);

}


gd32vw55x_it.c中添加中断回调函数:


void UART1_IRQHandler(void)
{
	unsigned char data;
	if(RESET != usart_interrupt_flag_get(UART1, USART_INT_FLAG_RBNE))
	{
		data = usart_data_receive(UART1);
		usart_data_transmit(UART1, (uint8_t)data);
		while(RESET == usart_flag_get(UART1, USART_FLAG_TBE));//发送完成判断
	}
}

代码写好了Build All就会在你的项目目录的GD RISC-V MCU Debug文件夹下生成bin文件用来烧录。


四、烧录过程及结果展示

确保硬件按 一、硬件连接 连接好后打开GD32AllInOneProgrammer 按下图配置:

(不得不吐槽这软件在我电脑上一大坨还不能调整窗口大小)

烧录完成后的操作:

       1. 烧录后要重新将BOOT0跳线帽接回靠近TYPE-C的两个脚,复位后才会开始运行烧录进去的程序。(也可以不改跳线帽而是用一根线将PC8与地接在一起,这样也可以运行程序,烧录时再断开,这样就可以避免频繁拔插跳线帽。)

       2. 将PA7PA6的串口线接到PA5PA4上(因为我们代码设置的是UART1)。

       3. 如果PA11和3.3V之间有接LED,那么LED正常点亮说明程序正在运行。

结果展示:

       打开你自己的串口助手,设置好参数后发送一段字符就能收到单片机发回来的字符拉:

大功告成!


五、过程中出现的问题

       1. 打开UART1的发送中断使能后,可以完成烧录但是怎么也无法运行烧录好的程序。

       2. 尝试printf重定向但是不知道为什么串口助手收不到printf发送的内容,希望大佬解决一下。​





全部评论
暂无评论
0/144