GPIO通用输入输出

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通用输入输出_第1张图片
  • 工作模式分类
    GPIO通用输入输出_第2张图片

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

GPIO通用输入输出_第3张图片

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

GPIO通用输入输出_第4张图片

  1. 推完输出

GPIO通用输入输出_第5张图片

  1. 开漏输出

GPIO通用输入输出_第6张图片

  1. 模拟模式

GPIO通用输入输出_第7张图片
GPIO通用输入输出_第8张图片

  1. 复用模式

GPIO通用输入输出_第9张图片

三、GPIO模块的寄存器介绍

  • 端口寄存器

GPIO通用输入输出_第10张图片

  1. 模式寄存器(GPIOx_MODER)

GPIO通用输入输出_第11张图片

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

GPIO通用输入输出_第12张图片

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

GPIO通用输入输出_第13张图片

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

GPIO通用输入输出_第14张图片

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

GPIO通用输入输出_第15张图片

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

GPIO通用输入输出_第16张图片

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

GPIO通用输入输出_第17张图片

四、指针访问寄存器

GPIO通用输入输出_第18张图片
GPIO通用输入输出_第19张图片
GPIO通用输入输出_第20张图片
GPIO通用输入输出_第21张图片

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

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

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

unsigned int(uint32_t)数据类型

typedefl类型定义

UL:指无符号长整型

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

六、GPIO外设的数据类型

  • 分为三个

GPIO通用输入输出_第22张图片

  1. 引脚初始化数据类型

GPIO通用输入输出_第23张图片

  • Pin的取值范围

GPIO通用输入输出_第24张图片

  • 成员变量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通用输入输出_第25张图片

  1. 引脚初始化函数:HAL_GPIO_Init

GPIO通用输入输出_第26张图片

  1. 引脚复位函数:HAL_GPIO_Delnit

GPIO通用输入输出_第27张图片

  1. 读取引脚函数:HAL_GPIO_ReadPin

GPIO通用输入输出_第28张图片
GPIO通用输入输出_第29张图片

  1. 写入引脚函数:HAL_GPIO_WritePin

GPIO通用输入输出_第30张图片
GPIO通用输入输出_第31张图片

  1. 翻转引脚函数:HAL_GPIO_TogglePin

GPIO通用输入输出_第32张图片GPIO通用输入输出_第33张图片

  1. 锁定引脚函数:HAL_GPIO_LockPin

GPIO通用输入输出_第34张图片

你可能感兴趣的:(Cubemax配置)