前言
GD32系列文章均采用KEIL5(V5.35版本),芯片包及固件库版本V3.2.0,使用GD32F407VGT6芯片。
相关文档下载地址,后续更新内容也会放在这个文件路径中。
链接:https://pan.baidu.com/s/1qJEMaxVjLQHTjE1yh4df6Q
提取码:amvj
1.原理图
本章主要是验证第一章创建的工程模板是否正确,通过点灯来验证一下,本章以PC6为例。PC6拉高LED点亮,PC6拉低LED熄灭。
2.LED驱动编写
led.c
#include "led.h"
void led_init(void)
{
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_GPIOD);
rcu_periph_clock_enable(RCU_GPIOE);
/* configure led GPIO port */
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_6|GPIO_PIN_13);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP,
GPIO_OSPEED_50MHZ,GPIO_PIN_6|GPIO_PIN_13);
//GPIO_BC(GPIOC) = GPIO_PIN_6|GPIO_PIN_13;
gpio_bit_reset(GPIOC,GPIO_PIN_6|GPIO_PIN_13);
/* configure led GPIO port */
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_5);
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP,
GPIO_OSPEED_50MHZ,GPIO_PIN_4|GPIO_PIN_5);
//GPIO_BC(GPIOD) = GPIO_PIN_4|GPIO_PIN_5;
gpio_bit_reset(GPIOD,GPIO_PIN_4|GPIO_PIN_5);
/* configure led GPIO port */
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_6);
gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
//GPIO_BC(GPIOE) = GPIO_PIN_6;
gpio_bit_reset(GPIOE,GPIO_PIN_6);
}
led.h
#ifndef __LED_H
#define __LED_H
#include "gd32f4xx.h"
#define LED1_ON GPIO_BOP(GPIOC) = GPIO_PIN_6
#define LED1_OFF GPIO_BC(GPIOC) = GPIO_PIN_6
#define LED1_Toggle GPIO_TG(GPIOC) = GPIO_PIN_6
#define LED2_ON GPIO_BOP(GPIOC) = GPIO_PIN_13
#define LED2_OFF GPIO_BC(GPIOC) = GPIO_PIN_13
#define LED2_Toggle GPIO_TG(GPIOC) = GPIO_PIN_13
#define LED3_ON GPIO_BOP(GPIOE) = GPIO_PIN_6
#define LED3_OFF GPIO_BC(GPIOE) = GPIO_PIN_6
#define LED3_Toggle GPIO_TG(GPIOE) = GPIO_PIN_6
#define LED4_ON GPIO_BOP(GPIOD) = GPIO_PIN_4
#define LED4_OFF GPIO_BC(GPIOD) = GPIO_PIN_4
#define LED4_Toggle GPIO_TG(GPIOD) = GPIO_PIN_4
#define LED5_ON GPIO_BOP(GPIOD) = GPIO_PIN_5
#define LED5_OFF GPIO_BC(GPIOD) = GPIO_PIN_5
#define LED5_Toggle GPIO_TG(GPIOD) = GPIO_PIN_5
void led_init(void);
#endif
main.c
#include "gd32f4xx.h"
#include "systick.h"
#include "led.h"
int main(void)
{
systick_config();
led_init();
gpio_bit_set(GPIOC,GPIO_PIN_6);
while(1)
{
}
}
在main.c中添加led的初始化函数,将PC6端口设置为高电平。编译下载到开发板中,LED灯点亮,实验成功,同时也说明第一章的工程模板没有问题。
3.流水灯实验
简单修改前面的代码,即可实现流水灯的效果。
delay_1ms()函数是GD32官方为我们实现的1ms延时,使用SYSTick实现的,类似于STM32的HAL_Delay()函数功能。
#include "gd32f4xx.h"
#include "systick.h"
#include "led.h"
int main(void)
{
systick_config();
led_init();
while(1)
{
LED1_ON;
delay_1ms(500);
LED1_OFF;
LED2_ON;
delay_1ms(500);
LED2_OFF;
LED3_ON;
delay_1ms(500);
LED3_OFF;
LED4_ON;
delay_1ms(500);
LED4_OFF;
LED5_ON;
delay_1ms(500);
LED5_OFF;
}
}