六、库函数点亮 LED 灯
1.1.配置流程
一般我们使用 GPIO 的端口,都需要有以下几个步骤。
- 开启 GPIO 的端口时钟
- 配置 GPIO 的模式
- 配置 GPIO 的输出
从 LED 介绍那一章节我们了解到 LED1 接的是单片机的 PE3,LED2 接的是单片机的 PD7,LED3 接的是单片机的 PG3,LED4 接的是 PA5。我们要使能 LED 就需要配置 GPIOA 端口,GPIOD 端口,GPIOE 端口和 GPIOG 端口。下面我们就以 LED2 接的 PD7 进行介绍,其它也是类似的。
在使用库函数之前,我们需要了解到,GD32 官方帮我们做好了这一套库函数,很详细,很全面。我们使用的时候只需要到对应的函数中去查找即可。
1.1.1.开启 GPIO 的端口时钟
GD32 的所有外设资源时钟默认都是关闭的,在配置外设之前需要先开启对应的时钟。
既然要开启时钟,那我们就要去关于时钟的库函数里去查找,打开 gd32f4xx_rcu.h 头文件,里面有很详细的关于时钟的函数的声明,到里面去查找我们需要的即可。查找一般可根据函数名去定义它的功能。我们要去开启 GPIOD 时钟,就需要去使用开启时钟的函数,经过查找发现 void rcu_periph_clock_enable(rcu_periph_enum periph); 这个函数正是我们需要的,这个函数有一个参数,里面是一个枚举变量,我们打开这个枚举变量,可以看到里面定义了很多时钟,有 GPIO 时钟,DMA 时钟,定时器时钟等,如图 1-1-1 所示。这里只截取一部分。
由此可知,这个函数的一个参数就是要使能的时钟,我们要使用的时钟是 GPIOD,可以看到对应的时钟定义就是 RCU_GPIOD。开启 GPIOD 时钟转换为代码就是
rcu_periph_clock_enable(RCU_GPIOD);
1.1.2.配置 GPIO 模式
GPIO 的模式配置可分为两步,第一步就是通过调用库函数将 GPIO 配置为输入功能,输出功能,复用功能还是模拟功能。第二步就是通过调用库函数配置 GPIO 的上下拉模式或者浮空。
要点亮 LED 灯,只需要往 PD7 引脚输出一个高电平,可见我们是配置为输出模式,又因为一般输出模式我们都配置为浮空模式,输入模式我们才需要考虑上拉还是下拉,根据默认电平状态进行判断。所以需要配置 GPIO 为输出模式,浮空模式。
这配置的是关于 GPIO 的操作,要到 gd32f4xx_gpio.h 去查找对应的函数。经过查找,发现 void gpio_mode_set(uint32_t gpio_periph, uint32_t mode, uint32_t pull_up_down, uint32_t pin); 这个函数满足我们的功能,它有四个参数,第一个参数是配置的端口,选择如图 1-2-1 所示。第二个参数是配置的模式,选择如图 1-2-2 所示。第三个参数是上下拉选择,选择如图 1-2-3 所示。第四个参数是要配置的引脚,选择如图 1-2-4 所示。
由上图可知,要配置 PD7 为输出模式,浮空模式,只需要传入对应的参数即可。转换为代码为
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
1.1.3.配置 GPIO 的输出
配置 GPIO 的输出也分为两步,第一步配置输出模式是推挽输出还是开漏输出,第二步配置 GPIO 输出的速度。这配置的也是关于 GPIO 的操作,要到 gd32f4xx_gpio.h 去查找对应的函数。经过查找,发现 void gpio_output_options_set(uint32_t gpio_periph, uint8_t otype, uint32_t speed, uint32_t pin);这个函数满足我们的功能。它有四个参数,第一个参数是配置的端口,选择如图 1-2-1 所示。第二个参数是输出的类型,选择如图 1-3-1 所示。第三个参数是 GPIO 的速度,选择如图 1-3-2 所示。第四个参数是要配置的引脚,选择如图 1-2-4 所示。
由上图可知,要配置 PD7 为推挽输出,速度为 50MHZ,只需要传入对应的参数即可。转换为代码为
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
到此,有关 GPIO 的配置就完成了。
1.2.配置 LED 输出高电平
配置好 GPIO 之后,我们就可以进行点灯了。其实也就是让 GPIO 引脚输出高低电平,到我们的开发板上就是让 PD7 输出高电平。
如何让 PD7 输出高电平呢?通过查阅库函数,这里为大家总结了几种操作的方式。
1.2.1.gpio_bit_set
这个函数是位设置函数,可以直接设置任意一个管脚输出高电平。
函数原型为:
void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);
有两个参数,第一个参数就是要配置的端口,第二个参数就是要设置的引脚。
//配置PD7引脚转化代码为
gpio_bit_set(GPIOD,GPIO_PIN_7);
2
1.2.2.gpio_bit_write
这个函数是往某一位写入一个值,可以直接设置任意一个管脚输出高电平或者低电平。
函数原型为:
void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value);
有三个参数,第一个参数就是要配置的端口,第二个参数就是要设置的引脚,第三个参数就是要设置的值。
配置PD7引脚输出高电平转化代码为gpio_bit_write(GPIOD,GPIO_PIN_7,1);
配置PD7引脚输出低电平转化代码为gpio_bit_write(GPIOD,GPIO_PIN_7,0);
2
3
1.2.3.gpio_port_write
这个函数是往整个端口写值,可以间接设置任意一个管脚输出高电平或者是低电平,但是这样操作其中一位是不太好的,其它的引脚状态可能会被改变。关于这一部分大家自行研究。
1.3.实验现象
关于这一章节的代码,在资源包/04 软件资料/代码例程/里面的 002 库函数点灯。
烧写我们的代码之后,可以看到开发板的 LED2 这个灯将被点亮。如图 3-1-1 所示。