1.由于在资料下载页面的软件过于老旧,所以无法在gd32build里面直接创建risk的的项目工程,所以我们选择去兆易创新官网下载最新的软件包
兆易创新中文下载页:https://www.gd32mcu.com/cn/download

下载箭头所指的三个压缩包

解压并安装ide,在ide左上角点击File->New->Projiect,选择芯片型号:GD32vw553HMQ7

2.利用串口与pico进行通信,按下按键切换RGB灯的状态
对于新接触到的新框架,新库文件,我们可以通过查看其api(.h文件)快速实现编程,如:
对模板文件进行轻微修改
#include "gd32vw553h_eval.h"
#include "systick.h"
#include "uart.h"
void gd_eval_led_init ()
{
rcu_periph_clock_enable(LED1_GPIO_CLK);
gpio_mode_set(LED1_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,LED1_PIN);
gpio_output_options_set(LED1_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ,LED1_PIN);
GPIO_BC(LED1_GPIO_PORT) =LED1_PIN;
}
void gd_eval_led_on()
{
GPIO_BOP(LED1_GPIO_PORT) = LED1_PIN;
}
void gd_eval_led_off()
{
GPIO_BC(LED1_GPIO_PORT) = LED1_PIN;
}
void gd_eval_led_toggle()
{
GPIO_TG(LED1_GPIO_PORT) = LED1_PIN;
}
void key_gpio_init ()
{
rcu_periph_clock_enable(KEY1_GPIO_CLK);
gpio_mode_set(KEY1_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE,KEY1_PIN);
}
uint32_t key_gpio_debouncing ()
{
if(gpio_input_bit_get(KEY1_GPIO_PORT, KEY1_PIN)!=SET)
{
delay_1ms(1);
if(gpio_input_bit_get(KEY1_GPIO_PORT, KEY1_PIN) == RESET)
{
// 阻塞等待按键松开
while(gpio_input_bit_get(KEY1_GPIO_PORT, KEY1_PIN) == RESET);
delay_1ms(1); // 松手消抖
return 1; // 只有完整按下+松开才返回1
}
}
return 0;
}
void key_logic()
{
if(key_gpio_debouncing ()==1)
{
gd_eval_led_toggle();
RGB_Change();
}
}
对main函数稍微修改
#include "gd32vw55x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "gd32vw553h_eval.h"
#include "uart.h"
int main(void)
{
systick_config();
gd_eval_led_init();
uart1_init();
gd_eval_led_on();
while(1) {
key_logic();
}
}
创建uart.c文件
#include "gd32vw55x.h"
#include "systick.h"
#include "uart.h"
#include "string.h"
void uart1_init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_UART1);
usart_deinit(UART1);
usart_disable(UART1);
// TX PA4 复用推挽输出,无上下拉
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, UART1_TX_PIN);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, UART1_TX_PIN);
// RX PA5 复用带上拉输入
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, UART1_RX_PIN);
gpio_af_set(GPIOA, GPIO_AF_0, UART1_TX_PIN);
gpio_af_set(GPIOA, GPIO_AF_0, UART1_RX_PIN);
usart_baudrate_set(UART1, UART1_BAUDRATE);
usart_word_length_set(UART1, UART1_WORD_LENGTH);
usart_stop_bit_set(UART1, UART1_STOP_BITS);
usart_parity_config(UART1, UART1_PARITY_MODE);
usart_transmit_config(UART1, USART_TRANSMIT_ENABLE);
usart_receive_config(UART1, USART_RECEIVE_ENABLE);
usart_enable(UART1);
}
void uart1_send(uint8_t *data, uint32_t len)
{
for(uint32_t i = 0; i < len; i++)
{
while(RESET == usart_flag_get(UART1, USART_FLAG_TBE));
usart_data_transmit(UART1, data[i]);
while(RESET == usart_flag_get(UART1, USART_FLAG_TC));
delay_1ms(1);
}
}
void uart1_test(void)
{
uint8_t buf[] = "ABCDEF";
uart1_send(buf, sizeof(buf)-1);
}
static const uint8_t* rgb[]=
{
"RGB0",
"RGB1",
"RGB2",
"RGB3",
"RGB4",
"RGB5",
"RGB6",
};
static UART_RGB rgb_num=PRESET0;
void RGB_Change(void)
{
uint32_t rgb_len=strlen((const char*)rgb[rgb_num]);
uart1_send((uint8_t*)rgb[rgb_num],rgb_len);
rgb_num++;
if(rgb_num==PRESET6+1)rgb_num=PRESET0;
}
至此,完成gd32端代码的窜写,boot1上拉进入下载模式,下载完成后将boot1位置复原
接下看看最终效果:
当按键按下,void RGB_Change(void)函数更新串口值。

开源社区 


