我们在上一章节完成寄存器点灯,但是寄存器在代码阅读方面比较困难,可能过了几天就不知道代码中为什么写1<<13
是什么意思了。因此在实际应用的过程中,更推荐使用库函数的开发方式,对代码的维护更加方便。
配置流程
一般我们使用GPIO的端口,都需要有以下几个步骤。
- 开启GPIO的端口时钟
- 配置GPIO的模式
- 配置GPIO的输出
从LED介绍那一章节我们了解到LED1接的是单片机的PC13。我们要使能LED就需要配置GPIOC端口。下面我们就以LED1接的PC13进行介绍。
在使用库函数之前,我们需要了解到,GD32官方帮我们做好了这一套库函数,很详细,很全面。我们使用的时候只需要到对应的函数中去查找即可。
开启GPIO的端口时钟
GD32的所有外设资源时钟默认都是关闭的,在配置外设之前需要先开启对应的时钟。
既然要开启时钟,那我们就要去关于时钟的库函数里去查找,打开gd32vw55x_rcu.h
头文件,里面有很详细的关于时钟的函数的声明,到里面去查找我们需要的即可。查找一般可根据函数名去定义它的功能。我们要去开启GPIOC时钟,就需要去使用开启时钟的函数,经过查找发现
/* enable the peripherals clock */
void rcu_periph_clock_enable(rcu_periph_enum periph);
2
这个函数正是我们需要的,这个函数有一个参数,里面是一个枚举变量,我们打开这个枚举变量,可以看到里面定义了很多时钟,有GPIO时钟,DMA时钟,定时器时钟等,如图所示。这里只截取一部分。
由此可知,这个函数的一个参数就是要使能的时钟,我们要使用的时钟是GPIOC,可以看到对应的时钟定义就是RCU_GPIOC。开启GPIOC时钟转换为代码就是
rcu_periph_clock_enable(RCU_GPIOC);
配置GPIO模式
GPIO的模式配置可分为两步,第一步就是通过调用库函数将GPIO配置为输入功能,输出功能,复用功能还是模拟功能。第二步就是通过调用库函数配置GPIO的上下拉模式或者浮空。
要点亮LED灯,只需要往PC13引脚输出一个高电平,可见我们是配置为输出模式,又因为一般输出模式我们都配置为浮空模式,输入模式我们才需要考虑上拉还是下拉,根据默认电平状态进行判断。所以需要配置GPIO为输出模式,浮空模式。
这配置的是关于GPIO的操作,要到 gd32vw55x_gpio.h
去查找对应的函数。经过查找,发现
void gpio_mode_set(uint32_t gpio_periph, uint32_t mode, uint32_t pull_up_down, uint32_t pin);
这个函数满足我们的功能,它有四个参数:
- 第一个参数
gpio_periph
是配置的端口,选择如图所示。
- 第二个参数
mode
是配置的模式,选择如图所示。
- 第三个参数
pull_up_down
是上下拉选择,选择如图所示。
- 第四个参数
pin
是要配置的引脚,选择如图所示。
由上图可知,要配置PC13为输出模式,浮空模式,只需要传入对应的参数即可。转换为代码为
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
配置GPIO的输出
配置GPIO的输出也分为两步,第一步配置输出模式是推挽输出还是开漏输出,第二步配置GPIO输出的速度。这配置的也是关于GPIO的操作,要到 gd32vw55x_gpio.h
去查找对应的函数。经过查找,发现
void gpio_output_options_set(uint32_t gpio_periph, uint8_t otype, uint32_t speed, uint32_t pin);
这个函数满足我们的功能。它有四个参数:
- 第一个参数
gpio_periph
是配置的端口,选择如图所示。
- 第二个参数
otype
是输出的类型,选择如图所示。
- 第三个参数
speed
是GPIO的速度,选择如图所示。
- 第四个参数
pin
是要配置的引脚,选择如图所示。
由上图可知,要配置PC13为推挽输出,速度为25MHZ,只需要传入对应的参数即可。转换为代码为
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, GPIO_PIN_13);
到此,有关GPIO的配置就完成了。
配置LED输出高电平
配置好GPIO之后,我们就可以进行点灯了。其实也就是让GPIO引脚输出高低电平,到我们的开发板上就是让PC13输出高电平。
如何让PC13输出高电平呢?通过查阅库函数,这里为大家总结了几种操作的方式。
gpio_bit_set
这个函数是位设置函数
,可以直接设置任意一个管脚输出高电平。
函数原型为:
void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);
有两个参数,第一个参数gpio_periph
就是要配置的端口,第二个参数pin
就是要设置的引脚。根据之前的讲解,配置PC13引脚为高电平,转化成代码就是
gpio_bit_set(GPIOC,GPIO_PIN_13);
gpio_bit_write
这个函数是往某一位写入一个值,可以直接设置任意一个管脚输出高电平或者低电平。
函数原型为:
void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value);
有三个参数,第一个参数gpio_periph
就是要配置的端口,第二个参数pin
就是要设置的引脚,第三个参数bit_value
就是要设置的值。
//配置PC13引脚输出高电平转化代码为
gpio_bit_write(GPIOC, GPIO_PIN_13, 1);
//配置PC13引脚输出低电平转化代码为
gpio_bit_write(GPIOC, GPIO_PIN_13, 0);
2
3
4
5
gpio_port_write
这个函数是往整个端口写值,可以间接设置任意一个管脚输出高电平或者是低电平,但是这样操作其中一位是不太好的,其它的引脚状态可能会被改变。关于这一部分大家自行研究。
实验现象
关于这一章节的代码,可以在开发板资料/03 - 软件资料/代码例程/里面的002库函数点灯
。
下载中心跳转📦
资料下载中心:点击跳转🚀
烧写我们的代码之后,可以看到开发板的LED1这个灯将被点亮。如图所示。