GPIO通用输入输出
程序员文章站
2022-06-09 08:56:08
...
GPIO通用输入输出
一、GPIO的功能概述
-
用途:GPIO是通用输入输出(General Purpose I/O)的简称,主要用于工业现场需要用到数字量输入/输出的场合。
-
例如:
输出功能:继电器、LED、蜂鸣器
输入功能:传感器状态、高低电平等信息的读取
复用功能:片内外设对外的接口
时序模拟:模拟SPI、I2C和UART等常用接口的时序
-
基本特性
- 多种工作工作模式:输入、输出、复用、模拟
- 灵活的复用功能
- 5V的电压容限(除ADC的其他都是)
- 外部中断功能
-
两个基本概念(端口和引脚)
- 端口(PORT)
-
独立的外设子模块,包含多个引脚,通过多个硬件寄存器控制引脚
-
GPIO模块由端口GPIOA、GPIOB、GPIOC等多个独立的子模块构成
-
例如:端口GPIOA包含了PA0~PA15这16个引脚,通过10个硬件寄存器控制引脚工作
- 引脚(PIN)
- 对应微控制器的一个管脚,归属于端口,由端口寄存器的对应为控制
- PA0对应STM32的某一脚,属于端口GPIOA,输出电平由端口GPIOA的输出数据寄存器GPIO_ODR的第0位决定。
总结: 一个端口默认包含16个引脚,但不同型号的STM32微控制器所包含的端口数量及各端口包含的引脚数量各不相同,具体信息可以查询芯片的数据手册。
二、GPIO模块的电路结构
- 电路结构
- 工作模式分类
三种输入模式:浮空输入、上拉输入、下拉输入
两种输出模式:开漏输出模式和推挽输出
- 推完输出
- 开漏输出
- 模拟模式
- 复用模式
三、GPIO模块的寄存器介绍
- 端口寄存器
- 模式寄存器(GPIOx_MODER)
- 输出类型寄存器(GPIOx_OTYPER)
- 输出速度寄存器(GPIOx_OSPEEDR)
- 上/下拉寄存器(GPIOx_PUPDR)
- 输入数据寄存器(GPIOx_IDR)
- 输出数据寄存器(GPIOx_ODR)
- 置位/复位寄存器(GPIOx_BSSRR)
四、指针访问寄存器
五、利用结构体指针访问寄存器组
- 多个寄存器的定义(结构体)
struct GPIO
{
volatile unsigned int MODER
···
}
volatile (__IO):防止编译器优化
unsigned int(uint32_t)数据类型
typedefl类型定义
UL:指无符号长整型
- 为了方便于用户使用,ST公司将STM32微控制器片内说有外设寄存器都采用结构体定义,以.h文件的形式提供给用户;
- 用户在使用时,只需要包含该头文件,就可以通过外设的结构体指针访问外设相关寄存器;
- 不同型号微控制器的头文件各不相同。以STM32F411系列微控制器为例,对应的.h文件为stm32f411xe.h;
六、GPIO外设的数据类型
- 分为三个
- 引脚初始化数据类型
- Pin的取值范围
- 成员变量Mode的取值范围
- 成员变量Pull的取值范围
- 成员变量Speed的取值范围
- 成员变量Alternate的取值范围
- 引脚电平状态数据类型(枚举类型)
typedef enum
{
GPIO_PIN_RESET = 0, //引脚低电平状态
GPIO_PIN_SET //引脚高电平状态
}GPIO_PinState;
- 端口数据类型:指向端口寄存器组的结构体指针
- GPIOA、GPIOB、GPIOC、GPIOD···
- 不同STM32,端口数量不同
- 端口数据类型的定义是在以芯片型号命名的.h文件中。
七、GPIO外设接口函数
- 分类
- 引脚初始化函数:HAL_GPIO_Init
- 引脚复位函数:HAL_GPIO_Delnit
- 读取引脚函数:HAL_GPIO_ReadPin
- 写入引脚函数:HAL_GPIO_WritePin
- 翻转引脚函数:HAL_GPIO_TogglePin
- 锁定引脚函数:HAL_GPIO_LockPin