GD32VW553-IOT点亮led
分享作者:user201906255627
评测品牌:萤火工场
评测型号:GD32VW553-IOT
发布时间:2025-05-29 16:43:32
0
前言
初次体验GD32VW553-IOT环境
开源口碑分享内容

一、硬件介绍:

      萤火工场新发布的GD32VW553-IOT的外观具有十分轻量化的设计,采用的是兆易创新在23年底发布的GD32VW553HMQ7芯片,芯片采用RISC-V内核的32位微处理器。板载PCB天线和IPEX天线座实现了Wifi,蓝牙信号收发;SY8201 DC-DC芯片为板载系统提供稳定的电源;1.27mm间距的排针的BOOT跳线实现了BOOT0和BOOT1电平选择;按键和BOOT0配合使用实现固件更新功能;Flash接口可根据需要扩展合适容量的数据存储器。

二、软件环境:

       在兆易创新的资料下载网页上下载GD32 Embedded Builder 作为编写代码的开发环境;GD32 All-In-One Programmer 将编译好的固件下载到开发板上。

三、GD32 Embedded Builder环境

打开GD32 Embedded Builder后在帮助下拉菜单下打开安装新软件添加 https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/R0.20.0/2022-12/

(图中所示为华文环境)

四、固件下载:

     先完成BOOT硬件跳线配置,再打开GD32 All-In-One Programmer ,PA6,PA7接入USB转换UART-TTL工具,按下复位按键KEY,按下软件上“connect”,当连接完成后完成后续下载操作。

在开发环境下生成的代码:


#include "gd32vw55x.h"

#include "systick.h"

#include <stdio.h>

#include "main.h"

#include "gd32vw553h_eval.h"


/*!

\brief toggle the led every 500ms

\param[in] none

\param[out] none

\retval none

*/

void led_spark(void)

{

static __IO uint32_t timingdelaylocal = 0U;


if(timingdelaylocal) {


if(timingdelaylocal < 500U) {

gd_eval_led_on(LED2);

gd_eval_led_on(LED3);

} else {

gd_eval_led_off(LED2);

gd_eval_led_off(LED3);

}


timingdelaylocal--;

} else {

timingdelaylocal = 1000U;

}

}


/*!

\brief main function

\param[in] none

\param[out] none

\retval none

*/

int main(void)

{

#ifdef __FIRMWARE_VERSION_DEFINE

uint32_t fw_ver = 0;

#endif /* __FIRMWARE_VERSION_DEFINE */


/* configure systick */

systick_config();

eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);

/* initilize the LEDs, USART and key */

gd_eval_led_init(LED1);

gd_eval_led_init(LED2);

gd_eval_led_init(LED3);

gd_eval_com_init(EVAL_COM0);

gd_eval_key_init(KEY_TAMPER_WAKEUP, KEY_MODE_GPIO);


#ifdef __FIRMWARE_VERSION_DEFINE

fw_ver = gd32vw55x_firmware_version_get();

/* print firmware version */

printf("\r\nGD32VW55X series firmware version: V%d.%d.%d", (uint8_t)(fw_ver >> 24), (uint8_t)(fw_ver >> 16), (uint8_t)(fw_ver >> 8));

#endif /* __FIRMWARE_VERSION_DEFINE */


/* print out the clock frequency of system, AHB, APB1 and APB2 */

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);

}

gd_eval_led_toggle(LED2);

delay_1ms(50);

}

}

gd_eval_led_toggle(LED3);

delay_1ms(50);

}

led在gd32vw553_eval定义如下


static uint32_t GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT,

LED3_GPIO_PORT};

static uint32_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN};


static rcu_periph_enum COM_CLK[COMn] = {EVAL_COM0_CLK};

static uint32_t COM_TX_PIN[COMn] = {EVAL_COM0_TX_PIN};

static uint32_t COM_RX_PIN[COMn] = {EVAL_COM0_RX_PIN};


static rcu_periph_enum GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK,

LED3_GPIO_CLK};


static uint32_t KEY_PORT[KEYn] = {TAMPER_WAKEUP_KEY_GPIO_PORT};

static uint32_t KEY_PIN[KEYn] = {TAMPER_WAKEUP_KEY_PIN};

static rcu_periph_enum KEY_CLK[KEYn] = {TAMPER_WAKEUP_KEY_GPIO_CLK};

static exti_line_enum KEY_EXTI_LINE[KEYn] = {TAMPER_WAKEUP_KEY_EXTI_LINE};

static uint8_t KEY_PORT_SOURCE[KEYn] = {TAMPER_WAKEUP_KEY_EXTI_PORT_SOURCE};

static uint8_t KEY_PIN_SOURCE[KEYn] = {TAMPER_WAKEUP_KEY_EXTI_PIN_SOURCE};

static IRQn_Type KEY_IRQn[KEYn] = {TAMPER_WAKEUP_KEY_EXTI_IRQn};

led操作函数如下:


void gd_eval_led_toggle(led_typedef_enum lednum)

{

GPIO_TG(GPIO_PORT[lednum]) = GPIO_PIN[lednum];

}

点亮LED


void gd_eval_led_on(led_typedef_enum lednum)

{

GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum];

}

息灭LED


void gd_eval_led_off(led_typedef_enum lednum)

{

GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];

}

按键初始

void gd_eval_key_init(key_typedef_enum key_num, keymode_typedef_enum key_mode)

{

/* enable the key clock */

rcu_periph_clock_enable(KEY_CLK[key_num]);

rcu_periph_clock_enable(RCU_SYSCFG);


/* configure button pin as input */

gpio_mode_set(KEY_PORT[key_num], GPIO_MODE_INPUT, GPIO_PUPD_NONE, KEY_PIN[key_num]);


if(key_mode == KEY_MODE_EXTI){

/* enable and set key EXTI interrupt to the lowest priority */

eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);

eclic_irq_enable(KEY_IRQn[key_num],1, 1);


/* connect key EXTI line to key GPIO pin */

syscfg_exti_line_config(KEY_PORT_SOURCE[key_num], KEY_PIN_SOURCE[key_num]);


/* configure key EXTI line */

exti_init(KEY_EXTI_LINE[key_num], EXTI_INTERRUPT, EXTI_TRIG_FALLING);

exti_interrupt_flag_clear(KEY_EXTI_LINE[key_num]);

}

}

按键获取

uint8_t gd_eval_key_state_get(key_typedef_enum button)

{

return gpio_input_bit_get(KEY_PORT[button], KEY_PIN[button]);

}

串口初始:


void gd_eval_com_init(uint32_t com)

{

/* enable GPIO clock */

uint32_t COM_ID = 0U;

if(EVAL_COM0 == com)

{

COM_ID = 0U;

}


rcu_periph_clock_enable(EVAL_COM0_TX_GPIO_CLK);

rcu_periph_clock_enable(EVAL_COM0_RX_GPIO_CLK);


/* enable USART clock */

rcu_periph_clock_enable(COM_CLK[COM_ID]);


/* connect port to USARTx_Tx */

gpio_af_set(EVAL_COM0_TX_GPIO_PORT, EVAL_COM0_TX_AF, COM_TX_PIN[COM_ID]);


/* connect port to USARTx_Rx */

gpio_af_set(EVAL_COM0_RX_GPIO_PORT, EVAL_COM0_RX_AF, COM_RX_PIN[COM_ID]);


/* configure USART Tx as alternate function push-pull */

gpio_mode_set(EVAL_COM0_TX_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, COM_TX_PIN[COM_ID]);

gpio_output_options_set(EVAL_COM0_TX_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, COM_TX_PIN[COM_ID]);


/* configure USART Rx as alternate function push-pull */

gpio_mode_set(EVAL_COM0_RX_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, COM_RX_PIN[COM_ID]);

gpio_output_options_set(EVAL_COM0_RX_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, COM_RX_PIN[COM_ID]);


/* USART configure */

usart_deinit(com);

usart_baudrate_set(com, 115200U);

usart_receive_config(com, USART_RECEIVE_ENABLE);

usart_transmit_config(com, USART_TRANSMIT_ENABLE);

usart_enable(com);

}

全部评论
暂无评论
0/144