首页 > 其他分享 >库函数点灯

库函数点灯

时间:2022-12-28 10:58:33浏览次数:57  
标签:输出 点灯 引脚 配置 GPIO gpio 时钟 库函数

库函数点灯

一、配置流程

  • 开启 GPIO 的端口时钟
  • 配置 GPIO 的模式
  • 配置 GPIO 的输出

我们以 LED2(PD7)为例进行配置

在使用库函数之前,我们需要了解到,GD32官方帮我们做好了这一套库函数,很详细,很全面。我们使用的时候只需要到对应的函数中去查找即可。

1. 开启 GPIO 的端口时钟

GD32 的所有外设资源时钟默认都是关闭的,在配置外设之前需要先开启对应的时钟。

既然要开启时钟,那我们就要去关于时钟的库函数里去查找,打开 gd32f4xx_rcu.h 头文件,里面有很详细的关于时钟的函数声明,到里面去查找我们需要的库函数即可,查找一般可根据函数名去定义它的功能。我们要去开启 GPIOD 时钟,就需要去使用开启时钟的函数,经过查找发现 void rcu_periph_clock_enable(rcu_periph_enum periph); 这个函数正是我们需要的,这个函数有一个参数,里面是一个枚举变量,我们打开这个枚举变量,可以看到里面定义了很多时钟,有 GPIO 时钟,DMA 时钟,定时器时钟等,如图所示。这里只截取一部分。

由此可知,这个函数的一个参数就是要使能时钟,我们要使用的时钟是 GPIOD,可以看到对应的时钟定义就是 RCU_GPIOD。开启 GPIOD 时钟转换为代码为:rcu_periph_clock_enable(RCU_GPIOD);

2. 配置 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. 配置的模式
  3. 上下拉选择
  4. 配置的引脚

通过查找,要配置 PD7 为输出功能,浮空模式,只需要传入对应的参数即可。转换为代码为 gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);

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. 输出的类型
  3. GPIO的速度
  4. 配置的引脚

通过查找,要配置 PD7 为推挽输出,速度为50MHZ,只需要传入对应的参数即可。转换为代码为 gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);

二、配置 LED 输出高电平

如何让 PD7 输出高电平呢?通过查阅库函数,这里为大家总结了几种操作的方式。

1. gpio_bit_set

这个函数是位设置函数,可以直接设置任意一个管脚输出高电平。

函数原型为:void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);

有两个参数,第一个参数就是要配置的端口,第二个参数就是要设置的引脚。

配置PD7引脚转化代码为:gpio_bit_set(GPIOD,GPIO_PIN_7);

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,SET);

配置PD7引脚输出低电平转化代码为:gpio_bit_write(GPIOD,GPIO_PIN_7,RESET);

3. gpio_port_write

这个函数是往整个端口写值,可以间接设置任意一个管脚输出高电平或者是低电平,但是这样操作其中一位是不太好的,其它的引脚状态可能会被改变。

函数原型位:void gpio_port_write(uint32_t gpio_periph, uint16_t data);

有两个参数,第一个参数就是要配置的端口;第二个参数是要向端口置入的16位二进制数。

配置PD7引脚输出高电平转化代码为:gpio_port_write(GPIOD,0x80); // 0x80=0000 0000 1000 0000

配置PD7引脚输出低电平转化代码为:gpio_port_write(GPIOD,0x00);

为什么在给寄存器(端口)进行配置时,常常是进行位操作而不直接赋值呢?

因为我们在对寄存器进行配置时也不一定对其所有的位都需要配置,比如我们对32位的ARM单片机的某个寄存器进行位配置时,我们往往是对32位中的某几位进行配置,其他的位我们并不需要配置,我们希望它保持原来的初始状态(保持初始状态的好处是:当我们在下一次需要对它进行配置时,我们就不用去判断这些位的初始状态是什么)。

我们如果对其进行直接赋值,我们还需要考虑其他不需要配置位的初始值到底是0还是1后才能对该寄存器赋值,但是如果我们利用位操作,那么我们完全不需要考虑那些不用配置的位,只需要考虑需要配置的位是0还是1。这样使得寄存器的位配置更加简单高效。

=========================

转载: U羊U

标签:输出,点灯,引脚,配置,GPIO,gpio,时钟,库函数
From: https://www.cnblogs.com/lxd-koi/p/16999712.html

相关文章

  • 寄存器与库函数介绍
    一、寄存器1、认识存储器存储器使用类型可分为只读存储器(ROM)和随机存储器(RAM)。存储器是许多存储单元的集合,主要是用来存储程序和各种数据信息的部件。2、存储器映射......
  • C库函数
    C标准库链接:https://www.runoob.com/cprogramming/c-standard-library-stdio-h.html15、intmain(intargc,char*argv[],char*envp[])的用法其实:intmain(intar......
  • CubeMX+FreeRTOS点灯
    一、CubeMX配置 1、选择时钟源,选择TIM1,网上推荐freertos使用除systick以外的timebase,网上找到的原因是防止高于systick优先级的服务调用HAL_Delay(),导致服务无法返回。......
  • stm32f407探索者开发板(四)——点亮跑马灯(库函数)
    文章目录​​一、删除不必要的文件​​​​二、添加HARDWARE文件夹​​​​三、代码编写​​​​3.1led.h​​​​3.2led,c​​​​3.3mian.c​​​​四、学习心得​​​......
  • Paddle 点灯人 之 Paddle介绍
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 开源之夏 | 【结项报告】毕昇Fortran编译器内联动态库函数str_copy
    作者王哲葳项目简介项目名称毕昇Fortran编译器内联动态库函数str_copy项目描述毕昇Fortran编译器是一款基于classicflang的高性能Fortran编译器,支持Fortran编程语言的编译......
  • zlib 压缩解压缩库函数
    1.下载地址http://www.zlib.net/2.使用方法zpipe里面有个例程,示范了压缩和解压缩的功能 3.  例程讲解主要有2个函数,压缩函数例程 和解压缩函数例程......
  • STM32标准库函数记录
    GPIO示例初始化GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //LED0-->PB.5端口配置GPIO_InitStructure.GPIO_Mode=GPIO_Mo......
  • 设计点灯游戏前的总结
    设计点灯游戏前的总结因c语言程序设计实践课,恰好选择了对点灯游戏的实现,则我们先来归纳如何去求点灯游戏的方案。零——前置芝士点灯游戏简介一层大楼共有\(n×n\)个......
  • 转载:stm32——GPIO的定义、模式、初始化结构体变量、常用库函数与编程套路
    一、GPIO定义GPIO(GENERALPURPOSEI/OPORTS)意思为通用输入/输出端口,可以为CPU提供数字输入输出功能。通俗地说,就是一些引脚,CPU可以通过它们输出高低电平或者通过它们读入......