小熊派gd32f303学习之旅(2)—新建工程点亮第一个LED灯

小熊派gd32f303学习之旅(2)—新建工程点亮第一个LED灯

一、下载标准固件库

首先们要下载GD32的标准固件库:http://www.gd32mcu.com/cn/download/7?kw=GD32F3
找到【GD32F30x Firmware Library】将其下载下来,
在这里插入图片描述
将其解压即可。

二、新建工程

新建一个工程目录,将固件库中的【Firmware】和【Template】文件夹复制过来,方别放到主目录和子目录下,路径如下所示
在这里插入图片描述
在这里插入图片描述

然后将【Template】重命名为【01_LED】,并将其中的两个文件夹删去,并新建MDK-ARM文件夹:
在这里插入图片描述

打开Keil-MDK,新建工程,选择【MDK-ARM】存放工程文件
在这里插入图片描述
选择GD32F303RG,点击OK
在这里插入图片描述
然后将工程目录及main.c修改为如下所示:
在这里插入图片描述
接下来添加全局宏定义和头文件包含:
在这里插入图片描述

接下来编译,有一个报错,那是因为我们刚才把led_led_spark()删除了
在这里插入图片描述
打开gd32f30x_it.c,将其注释掉:
在这里插入图片描述
再次编译,成功
在这里插入图片描述

三、编写代码,点亮LED

查看小熊派的原理图可以看到,LED由PB0控制
在这里插入图片描述

main.c代码修改为如下所示:

#include "gd32f30x.h"
#include "systick.h"

int main(void)
{
    
    
	/* 配置系统时钟 */
	systick_config();
	/* 使能LED所使用的GPIOB时钟 */
    rcu_periph_clock_enable(RCU_GPIOB);


    /* 配置LED使用的引脚为推挽输出 */ 
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
    /* reset LED GPIO pin */
    gpio_bit_reset(GPIOB, GPIO_PIN_0);

    while(1)
	{
    
    
        /* turn on LED */
        gpio_bit_set(GPIOB, GPIO_PIN_0); 
        delay_1ms(1000);

        /* turn off LED */
        gpio_bit_reset(GPIOB, GPIO_PIN_0);
        delay_1ms(1000);

    }
}


编译:
在这里插入图片描述
接入开发板,设置仿真器:
在这里插入图片描述
然后下载到开发板,可以看到,LED在闪烁:
在这里插入图片描述

四、代码优化

在主目录下新建一个Hardware目录,用来存放硬件驱动代码,然后在该目录下新建include目录和led.c文件,在include目录下新建led.h文件,并将给目录添加到头文件路径中
在这里插入图片描述
然后再工程结构中添加Hardware,并将led.c添加进来
在这里插入图片描述
然后编写led.h为如下所示

#ifndef __LED_H
#define __LED_H

/* 宏定义LED的控制方式 */
#define LED(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_0):gpio_bit_reset(GPIOB, GPIO_PIN_0))

/* LED硬件初始化 */
void led_init(void);

#endif

编写led.c如下所示

/* LED的硬件初始化代码 */
#include "gd32f30x.h"

/* LED硬件初始化 */
void led_init(void)
{
    
    
	/* 使能LED所使用的GPIOB时钟 */
    rcu_periph_clock_enable(RCU_GPIOB);

    /* 配置LED使用的引脚为推挽输出 */ 
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
    /* reset LED GPIO pin */
    gpio_bit_reset(GPIOB, GPIO_PIN_0);
}

修改main.c为如下所示

#include "gd32f30x.h"
#include "systick.h"
#include "led.h"

int main(void)
{
    
    
	/* 配置系统时钟 */
	systick_config();
	/* 初始化LED */
	led_init();

    while(1)
	{
    
    
        /* turn on LED */
        LED(1);
        delay_1ms(1000);

        /* turn off LED */
        LED(0);
        delay_1ms(1000);

    }
}

五、附录

完整代码我存放在码云,可以查看:https://gitee.com/william_william/BearPi-GD32F303RGT6.git
上一篇:小熊派gd32f303学习之旅(1)— BearPi介绍和开发环境的搭建
下一篇:小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/108543828