欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GPIO通用输入输出

程序员文章站 2022-06-09 08:56:08
...

GPIO通用输入输出

一、GPIO的功能概述

  • 用途:GPIO是通用输入输出(General Purpose I/O)的简称,主要用于工业现场需要用到数字量输入/输出的场合。

  • 例如:

    输出功能:继电器、LED、蜂鸣器

    输入功能:传感器状态、高低电平等信息的读取

    复用功能:片内外设对外的接口

    时序模拟:模拟SPI、I2C和UART等常用接口的时序

  • 基本特性

    1. 多种工作工作模式:输入、输出、复用、模拟
    2. 灵活的复用功能
    3. 5V的电压容限(除ADC的其他都是)
    4. 外部中断功能
  • 两个基本概念(端口和引脚)

    • 端口(PORT)
    1. 独立的外设子模块,包含多个引脚,通过多个硬件寄存器控制引脚

    2. GPIO模块由端口GPIOA、GPIOB、GPIOC等多个独立的子模块构成

    3. 例如:端口GPIOA包含了PA0~PA15这16个引脚,通过10个硬件寄存器控制引脚工作

    • 引脚(PIN)
    1. 对应微控制器的一个管脚,归属于端口,由端口寄存器的对应为控制
    2. PA0对应STM32的某一脚,属于端口GPIOA,输出电平由端口GPIOA的输出数据寄存器GPIO_ODR的第0位决定。

总结: 一个端口默认包含16个引脚,但不同型号的STM32微控制器所包含的端口数量及各端口包含的引脚数量各不相同,具体信息可以查询芯片的数据手册。

二、GPIO模块的电路结构

  • 电路结构
    GPIO通用输入输出
  • 工作模式分类
    GPIO通用输入输出

三种输入模式:浮空输入、上拉输入、下拉输入

GPIO通用输入输出

两种输出模式:开漏输出模式和推挽输出

GPIO通用输入输出

  1. 推完输出

GPIO通用输入输出

  1. 开漏输出

GPIO通用输入输出

  1. 模拟模式

GPIO通用输入输出
GPIO通用输入输出

  1. 复用模式

GPIO通用输入输出

三、GPIO模块的寄存器介绍

  • 端口寄存器

GPIO通用输入输出

  1. 模式寄存器(GPIOx_MODER)

GPIO通用输入输出

  1. 输出类型寄存器(GPIOx_OTYPER)

GPIO通用输入输出

  1. 输出速度寄存器(GPIOx_OSPEEDR)

GPIO通用输入输出

  1. 上/下拉寄存器(GPIOx_PUPDR)

GPIO通用输入输出

  1. 输入数据寄存器(GPIOx_IDR)

GPIO通用输入输出

  1. 输出数据寄存器(GPIOx_ODR)

GPIO通用输入输出

  1. 置位/复位寄存器(GPIOx_BSSRR)

GPIO通用输入输出

四、指针访问寄存器

GPIO通用输入输出
GPIO通用输入输出
GPIO通用输入输出
GPIO通用输入输出

五、利用结构体指针访问寄存器组

  • 多个寄存器的定义(结构体)
struct GPIO
{
    volatile unsigned int MODER
    ···
}

volatile (__IO):防止编译器优化

unsigned int(uint32_t)数据类型

typedefl类型定义

UL:指无符号长整型

  • 为了方便于用户使用,ST公司将STM32微控制器片内说有外设寄存器都采用结构体定义,以.h文件的形式提供给用户;
  • 用户在使用时,只需要包含该头文件,就可以通过外设的结构体指针访问外设相关寄存器;
  • 不同型号微控制器的头文件各不相同。以STM32F411系列微控制器为例,对应的.h文件为stm32f411xe.h;

六、GPIO外设的数据类型

  • 分为三个

GPIO通用输入输出

  1. 引脚初始化数据类型

GPIO通用输入输出

  • Pin的取值范围

GPIO通用输入输出

  • 成员变量Mode的取值范围
  • 成员变量Pull的取值范围
  • 成员变量Speed的取值范围
  • 成员变量Alternate的取值范围
  1. 引脚电平状态数据类型(枚举类型)
typedef enum
{
    GPIO_PIN_RESET = 0,		//引脚低电平状态
    GPIO_PIN_SET			//引脚高电平状态
}GPIO_PinState;
  1. 端口数据类型:指向端口寄存器组的结构体指针
  • GPIOA、GPIOB、GPIOC、GPIOD···
  • 不同STM32,端口数量不同
  • 端口数据类型的定义是在以芯片型号命名的.h文件中。

七、GPIO外设接口函数

  • 分类

GPIO通用输入输出

  1. 引脚初始化函数:HAL_GPIO_Init

GPIO通用输入输出

  1. 引脚复位函数:HAL_GPIO_Delnit

GPIO通用输入输出

  1. 读取引脚函数:HAL_GPIO_ReadPin

GPIO通用输入输出
GPIO通用输入输出

  1. 写入引脚函数:HAL_GPIO_WritePin

GPIO通用输入输出
GPIO通用输入输出

  1. 翻转引脚函数:HAL_GPIO_TogglePin

GPIO通用输入输出GPIO通用输入输出

  1. 锁定引脚函数:HAL_GPIO_LockPin

GPIO通用输入输出