一、GD32VW553 微控制器简介
GD32VW553xx 是一款高度集成的 2.4GHz Wi-Fi 和 BLE 系统级芯片(SoC),GD32VW553xx 设备采用运行频率为 160MHz 的 RISC-V 32 位处理器内核,以实现最高效率。它提供高达 4096KB 的片上闪存和 320KB(288KB + 32KB 共享)的 SRAM 内存。丰富的增强型 I/O 和外设通过两条 APB 总线连接。这些设备提供 12 位 ADC、多达四个通用 16 位定时器、一个基本定时器、一个 PWM 高级定时器,以及标准和高级通信接口:一个 SPI、两个 I2C、一个 USART、两个 UART 和一个无线(BLE / Wi-Fi)。还包括加密加速单元(CAU)、哈希加速单元(HAU)、公钥加密加速单元(PKCAU)和四线 SPI 接口(QSPI)等其他外设。该设备的工作电源为 1.8 至 3.6 伏,6 级器件的工作温度范围为 -40 至 +85 摄氏度,7 级器件的工作温度范围为 -40 至 +105 摄氏度。多种节能模式提供了灵活性,可在唤醒延迟和功耗之间实现最大程度的优化,这对于低功耗应用来说尤为重要。
上述特性使 GD32VW553xx 系列器件适用于广泛的应用领域,尤其是在工业控制、智能家居控制系统、用户界面、电源监控和报警系统、消费类和手持设备、游戏和 GPS、电动自行车、物联网等方面。
二、开发工具介绍
(一)SEGGER Embedded Studio IDE 概述
SEGGER Embedded Studio 是一款功能强大且结构紧凑的集成开发环境(IDE),为开发者提供了全面的开发工具集。它具备强大的项目构建与管理系统,能够高效组织和管理项目文件;灵活的源代码编辑器支持多种编程语言,具备智能代码提示、语法检查等功能,方便开发者编写代码;此外,软件支持包方便了下载和安装相关依赖。其内置调试器与 J-Link 配合使用时,性能优异且稳定性强。对于基于 GD32VW553 微控制器的开发,该 IDE 能完美支持代码编写、编译和调试工作。值得一提的是,兆易创新与 SEGGER 合作,向所有使用 GD32V 系列 RISC-V 微控制器(包括 GD32VW553)的用户免费提供商用的多平台 SEGGER Embedded Studio,极大地降低了开发成本,提升了开发效率。
(二)软件版本信息
当前 RISC-V 版本为 V7.32a(2023-11-29) ,针对不同操作系统提供了多种安装包,如 Windows 64 位、Windows ARM 64 位、Linux 64 位、Linux ARM 64 位、macOS 64 位(适用于 Apple Silicon 和 Intel Silicon)等,开发者可根据自身系统选择合适的版本进行下载安装。
三、开发环境搭建
一)RISC-V 版本安装
RISC-V 版本的软件安装过程十分简便,开发者只需按照安装向导提示,一路点击 “下一步” 即可完成安装,且无需破解,降低了使用门槛。
(二)GD32VW553 插件安装
在GD32官网下载名为 “GD32VW55x AddOn V1.2.0.7z” 的 7-Zip 压缩文件,解压后该压缩包内包含多个文件,如软件许可协议文档 “SOFTWARE LICENSE AGREEMENT SLA-GD0006-version1.1.pdf”、应用程序 “JAR.GD22MV55X_ADDON.1.2.0.exe” 以及 SEGGER Embedded Studio 相关文件 “GD32VW55x-1.01.emPackage” 等。解压后,直接点击安装GD32VW55x-1.01.emPackage程序即可完成插件安装。
四、编译操作指南
hex文件生成与编译
F7编译
五、关键函数解析
(一)系统滴答定时器配置函数
systick_config()函数用于配置系统滴答定时器,为程序中的延时功能提供基础。其实现代码如下:
void systick_config(void)
{
SysTimer_SetControlValue(SysTimer_MTIMECTL_CMPCLREN_Msk);
SysTimer_SetCompareValue(SystemCoreClock/4000);
__ECLIC_SetTrigIRQ(CLIC_INT_TMR, ECLIC_POSTIVE_EDGE_TRIGGER);
eclic_irq_enable(CLIC_INT_TMR, 0, 0);
}
该函数通过SysTimer_SetControlValue函数清除比较寄存器清零使能位,设置系统定时器的控制值;利用SysTimer_SetCompareValue函数将比较值设置为系统核心时钟除以 4000,这一设置为后续delay_1ms函数实现精确延时奠定了基础;通过__ECLIC_SetTrigIRQ函数将中断触发方式设置为上升沿触发,并使用eclic_irq_enable函数使能定时器中断,从而确保系统滴答定时器能按预期工作。
(二)GPIO 时钟使能函数
rcu_periph_clock_enable();函数用于使能 GPIO 端口的时钟,其定义如下:
void rcu_periph_clock_enable(rcu_periph_enum periph)
{
RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph));
}
在控制连接于 GPIO 端口的 LED 时,开启该端口时钟是必不可少的前置步骤。通过此函数,向对应寄存器写入特定值,即可使能 GPIO端口时钟。
(三)GPIO 模式配置函数
gpio_mode_set函数用于配置 GPIO 模式,具体代码如下:
void gpio_mode_set(uint32_t gpio_periph, uint32_t mode, uint32_t pull_up_down, uint32_t pin)
{
uint16_t i;
uint32_t ctl, pupd;
ctl = GPIO_CTL(gpio_periph);
pupd = GPIO_PUD(gpio_periph);
for(i = 0U; i < 16U; i++){
if((1U << i) & pin){
// 清除指定引脚模式位
ctl &= ~GPIO_MODE_MASK(i);
// 设置指定引脚模式位
ctl |= GPIO_MODE_SET(i, mode);
// 清除指定引脚上下拉电阻位
pupd &= ~GPIO_PUPD_MASK(i);
// 设置指定引脚上下拉电阻位
pupd |= GPIO_PUPD_SET(i, pull_up_down);
}
}
GPIO_CTL(gpio_periph) = ctl;
GPIO_PUD(gpio_periph) = pupd;
}
该函数接收 GPIO 端口、引脚模式、上下拉电阻配置以及要配置的引脚等参数。通过循环遍历引脚,对 GPIO 控制寄存器和上下拉寄存器进行位操作,实现对指定引脚模式和上下拉状态的精确配置。在本 LED 控制程序中,将相关引脚配置为输出模式,以满足控制 LED 亮灭的需求。
(四)GPIO 引脚电平控制函数
gpio_bit_reset函数用于将指定引脚电平拉低,定义如下:
void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin)
{
GPIO_BC(gpio_periph) = (uint32_t)pin;
}
与之对应的gpio_bit_set函数用于将引脚电平拉高,代码为:
void gpio_bit_set(uint32_t gpio_periph, uint32_t pin)
{
GPIO_BOP(gpio_periph) = (uint32_t)pin;
}
在 LED 控制程序的主循环中,正是通过这两个函数的配合,实现了 LED1 和 LED2 的交替闪烁
六、主程序代码分析
#include"gd32vw55x.h"
#include"gd32vw553h_eval.h"
#include"systick.h"
#include <stdio.h>
/*!
\brief main function
\param[in]none
\param[out]none
\retval none
*/
int main(void)
{
systick_config();
// 使能LED时钟
rcu_periph_clock_enable(RCU_GPIOB);
// 配置LED GPIO端口
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15 | GPIO_PIN_13);
gpio_bit_reset(GPIOB, GPIO_PIN_12 | GPIO_PIN_13);
while(1){
// 点亮LED1,熄灭LED3
gpio_bit_set(GPIOB, GPIO_PIN_12);
gpio_bit_reset(GPIOB, GPIO_PIN_13);
delay_1ms(100);
// 点亮LED2,熄灭LED1
gpio_bit_set(GPIOB, GPIO_PIN_13);
gpio_bit_reset(GPIOB, GPIO_PIN_12);
delay_1ms(100);
}
}
在main函数中,首先调用systick_config()函数配置系统滴答定时器;使能 GPIOB 端口时钟,配置相关引脚为输出模式且无上拉或下拉电阻,并将 LED 引脚初始化为低电平。在无限循环中,通过gpio_bit_set和gpio_bit_reset函数控制 LED1 和 LED2 交替闪烁,每次状态切换后通过delay_1ms(100)函数延时 100 毫秒,实现了两个 LED 灯的稳定交替闪烁效果。
七、程序下载
芯片内嵌的引导装载程序位于系统存储器中,用来对片上闪存的主存进行重新编程。该引导装
载程序可通过以下串行接口之一工作:USART0(PB15 和 PA8), UART1(PA4 和 PA5),
UART2(PA6和PA7)。
Boot 设置
下载与连接