GD32F407入坑指南 第二章

前言

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值