Hu Weijun
Hu Weijun
发布于 2025-09-09 / 0 阅读
0
0

STM32F407基于库函数GPIO教程

全文阅读约1860字,阅读大概需要10分钟。

1.GPIO基本简介

GPIO口是单片机的基本模块,STM32F4微控制器的GPIO,可以提供最多112个多功能双向I/O引脚。这些I/O引脚依次分布在不同的端口中。端口号通常以大写字母命名,从A开始,依次类推。例如,GPIOA、GPIOB、GPIOC、…等。每个端口有16个I/O引脚,分别命名为0-15。STM32F407ZGT6引脚图见下图。如GPIOA端口有16个引脚,分别为PA0、PA1、PA2、PA3、…、PA14和PA15。

2.GPIO口常用库函数

初始化函数

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

主要作用为初始化GPIO的一个或者多个引脚的工作模式、输出类型、输出速度及上拉/下拉方式。

初始化包含一下两个参数:

参数1:GPIO_TypeDef*GPIOx,是操作的GPIO对象,是一个结构体指针。

参数2:GPIO_InitTypeDef*GPIO_InitStruct,GPIO初始化结构体指针,结构体类型被定义在头文件中。

该结构体定义如下:

typedef struct 
{ 
uint32_t GPIO_Pin; //指定要初始化的IO口 引脚
GPIOMode_TypeDef GPIO_Mode; //设置对应 IO 引脚的输出输入模式
GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
GPIOOType_TypeDef GPIO_OType; //设置输出类型:推挽/开漏
GPIOPuPd_TypeDef GPIO_PuPd; // 设置引脚的上拉/下拉电阻
}GPIO_InitTypeDef;

读取输入电平函数

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

其中,GPIO_ReadInputDataBit为位读取函数,作用是读取某个GPIO的输出电平。实际操作的是输出数据寄存器。读取电平函数同样包含两个参数。

参数1:GPIO操作对象,同初始化函数的参数1定义。

参数2:操作对应的引脚

GPIO_ReadOutputData为组读取函数,定义类似位读取函数,不同点在于对整组GPIO电平进行读取。

读取输出电平函数

uint8_t GPIO_ReadOnputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

设置输出电平函数

置位/复位

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

上面第一个函数的作用为设置GPIO引脚为高电平。实际操作的是置位/复位寄存器的低16位(BSRRL)。而第二个函数的作用为设置GPIO引脚为低电平。实际操作的是置位/复位寄存器的高16位(BSRRH)。

写位

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

上面的函数的作用为设置某个GPIO引脚为特定电平。实际操作的是置位/复位寄存器。其中包含三个参数,重点介绍一下第三个参数BitAction。具体为引脚状态,包括Bit_SET或Bit_RESET。

反转引脚状态函数

void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

上面函数的作用为将GPIO引脚状态反转,使用位异或操作输出数据寄存器。

复用功能设置函数

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, 
uint8_t GPIO_AF);

上面函数的作用为将GPIO的某个引脚设置为特定的复用功能。操作的是复用功能低位寄存器或复用功能高位寄存器。参数中还包含了复用的引脚,以及复用的对象,参考片上外设引脚复用宏定义。


评论