GPIO外设的数据类型

一.GPIO 工作模式:
引脚初始化:数据类型(结构体类型,5个成员变量)GPIO_InitTypeDef;
unit32_t pin //引脚
unit32_t Mode//工作模式
unit32_t Pull//上拉下电阻
unit32_t Speed//速度
unit32_t Alternate 外设连接至所选择的引脚,该参数可以是Alternate_function_selection的值之一
宏常量定义及其含义:
GPIO_MODE_INPUT:浮空输入模式
GPIO_MODE_OUTPUT_PP: 推挽输出模式
GPIO_MODE_OUTPUT_OD:开漏输出模式
GPIO_MODE_AF_PP:复用功能下推挽模式
GPIO_MODE_AF_OD:复用功能下开漏模式
GPIO_MODE_ANALOG:模拟模式
上下拉电阻:成员变量Pull的取值范围
宏常量定义 及含义:
GPIO_NOPULL 无上拉或下拉电阻激活
GPIO_PULLUP 上拉电阻激活
GPIO_PULLDOWN下拉电阻激活
引脚速度:成员变量Speed 取值范围
宏常量定义 及含义:
GPIO_SPEED_FREQ_LOW :输出2MHz
GPIO_SPEED_FREQ_MEDIUM :输出12.5MHz-50MHz
GPIO_SPEED_FREQ_HIGH :输出25MHz-100MHz
GPIO_SPEED_FREQ_VERY_HIGH :输出50MHz-200MHz
引脚复用: 成员变量Alternate取值范围
1.Alternate 表示引脚的复用功能
2.不同型号的微控制器片内 集成的外设不同,因此该成员变量的取值范围由芯片型号决定
3.以F4为例,通过查阅stm32f4xx_hal_gpio_ex.h文件可以了解Alternate 的取值范围
4.一般该成员变量通过Cubemx软件分配,不需用户手动配置
二、引脚电平状态
引脚电平状态数据类型:枚举类型 typedef enum GPIO_PinState 提高了程序的可读性,并通过限定变量的取值范围来确保变量的合法性。
GPIO_PIN_RESET = 0; 低电平状态
GPIO_PIN_SET 高电平状态
三、端口定义
端口数据类型:指向端口寄存器组的图结构体指针
GPIOA 选择端口A
GPIOB 选择端口B
.
.
GPIOH 选择端口H
1.不同型号的STM32微控制器端口数量各不相同
2.端口数据类型的定义是以芯片型号命名的.h文件中,如stm32f411xe.h
使用Hal库引脚初始化步骤
1.定义变量 利用GPIO_InitTypeDef 定义一个结构体变量
2.设置模式 按照引脚工作模式,依次对成员变量赋值如pin,mode,pull等
3.调用函数 调用初始化函数将配置参数写入对应寄存器,Hal_GPIO_Init

GPIO外设的接口函数

概述:
分为三类:
初始化函数:HAL_GPIO_Init :完成引脚的初始化 HAL_GPIO_DeInit :复位引脚到初始状态
控制函数:HAL_GPIO_ReadPin:读取引脚电平状态 HAL_GPIO_WritePin:设置引脚电平状态HAL_GPIO_TogglePin:翻转引脚电平状态
配置函数: HAL_GPIO_LockPin:锁定引脚的配置
1.接口函数:void HAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)
功能:引脚初始化
入口参数1:GPIOx 引脚端口号:取值GPIOA-K
入口参数2:GPIO_Init:只想引脚初始化类型GPIO_InitTypeDef的结构体指针,该结构体包含指定引脚的配置参数
无返回值
可由CubeMX生成

2.引脚复位函数:void HAL_GPIO_DeInit (GPIO_TypeDef*GPIOx,uint32_t GPIO_Pin)
功能:复位引脚到初始状态
入口参数1:引脚端口号 GPIOA~K
入口参数2:GPIO_Pin:引脚号,取值范围是GPIO_PIN_0~GPIO_PIN_15 无返回值 需用户调用 3.读取引脚函数:GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx, uint16_t GPIO_Pin) 功能:读取引脚电平状态
入口参数1:引脚端口号 GPIOA~K
入口参数2:GPIO_Pin:引脚号,取值范围是GPIO_PIN_0~GPIO_PIN_15
返回值:GPIO_PinState:表示引脚电平状态的枚举类型变量,当取值为:GPIO_PIN_SET 表示读到高电平,GPIO_RESET 表示读到低电平
函数需要用户调用
4.写入引脚函数:void HAL_GPIO_WritePin(GPIO_TypeDef*GPIOx, uint16_t GPIO_Pin,GPIO_PinState PinState)
功能:设置引脚电平状态高/低
入口参数1:引脚端口号 GPIOA~K
入口参数2:GPIO_Pin:引脚号,取值范围是GPIO_PIN_0~GPIO_PIN_15
入口参数3:GPIO_PinState 表示引脚电平状态的枚举类型变量,当取值为GPIO_PIN_SET:表示输出高电平,GPIO_PIN_RESET 输出高电平
无返回值
函数需用户调用
5.翻转引脚函数:void HAL_GPIO_TogglePin(GPIO_TypeDef*GPIOx, uint16_t GPIO_Pin) 功能:翻转引脚状态 入口参数1:引脚端口号 GPIOA~K 入口参数2:GPIO_Pin:引脚号,取值范围是GPIO_PIN_0~GPIO_PIN_15 无返回值 函数需用户调用 6.锁定引脚函数:HAL_GPIO_LockPin(GPIO_TypeDef*GPIOx, uint16_t GPIO_Pin) 功能:锁定引脚的配置 入口参数1:引脚端口号 GPIOA~K 入口参数2:GPIO_Pin:引脚号,取值范围是GPIO_PIN_0~GPIO_PIN_15 返回值:Hal_StatusTypeDef:表示操作结果的枚举类型变量,当取值为HAL_OK 表示引脚锁定成功,HAL_ERROR表示引脚锁定失败 函数需要用户调用 HAL库借鉴面向对象的设计思想 对象:分为数据和方法两个部分组成,将外设分为数据类型和接口函数 基于库函数开发的特点:屏蔽底层硬件,只需要了解库函数的相关接口函数功能并按照要求传入参数,利用返回值完成操作即可。提高开发效率,难度较小,周期较短,后期维护升级及硬件平台的移植等工作量较小。 由于考虑了程序的稳健性,扩充性和可移植性,代码脚位繁琐和臃肿,执行效率较低。

HAL库中GPIO模块的使用步骤

1.使能时钟,使能引脚所属端口的系统总线时钟(AHB):调用函数_HAL_RCC_GPIO_CLK_ENABLE
2.设置参数,利用引脚初始化类型GPIO_InItTypeDef定义结构体变量,根据需求配置成员变量:Pin.mode,Pull,Speed ,Alternate
3.配置引脚 ,调用初始化函数HAL_GPIO_Init 完成引脚配置,将配置参数写入对应的硬件寄存器
4.使用对应控制函数完成引脚的控制,函数HAL_GPIO_ReadPin 读取引脚状态,HAL_GPIO_WritePin设置引脚电平

任务实践:

新建CubeMX文件夹,再根据外设模块建立子文件夹。
流程:目标选择-,引脚分配,外设配置,时钟配置,工程配置,程序编写