STM32-GPIO

GPIO是指通用输入/输出端口。通俗地说,就是芯片引脚,可以通过它们输出高电平或者低电平,也可以通过它们读入引脚的电平状态——是高电平还是低电平。

比如STM32F103ZET6芯片共有112个I/O端口,共7组:GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,每组端口分为0~15,共16个不同的引脚。可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。比如可能设置GPIOA.6作为一般的输入、输出引脚,或者用于串口。

GPIO(General Purpose Input Output)通用输入输出口

• 可配置为8种输入输出模式

• 引脚电平:0V~3.3V,部分引脚可容忍5V

•  输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等

•  输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

与GPIO相关的寄存器主要有以下几种:

(1)配置寄存器:配置GPIO的模式及状态,如输入/输出模式、复用功能及输出的最大速度等以及端口配置低寄存器(GPIOx_CRL)、端口配置高寄存器(GPIO_CRH);

(2)数据寄存器:保存了GPIO的输入电平或将要输出的电平,如端口输入数据寄存器(GPIOx_IDR)、端口输出数据寄存器(GPIOx_ODR);

(3)位控制寄存器:设置某引脚的数据为1或0,如端口位设置/清除寄存器(GPIOx_BSRR)、端口位清除寄存器(GPIOx_BRR);

(4)锁定寄存器:设置某锁定引脚后,就不能修改其配置,如端口配置锁定寄存器(GPIOx_LCKR)(其中,x=A~E)。

工作模式

解释

浮空输入

(GPIO_Mode_IN_FLOATING)

 这是GPIO引脚的默认工作模式。在这种模式下,引脚内部没有连接上拉或下拉电阻,因此当外部电路没有驱动该引脚时,引脚的电平是不确定的。这种模式适用于外部电路能够可靠地驱动输入引脚的情况。

上拉输入

(GPIO_Mode_IPU)

在这种模式下,GPIO引脚内部连接一个上拉电阻,将引脚与电源电压相连。这样,当外部电路没有驱动该引脚时,引脚的电平将被上拉至高电平。这种模式适用于外部电路使用开漏输出来驱动输入引脚的情况。

下拉输入

(GPIO_Mode_IPD)

在这种模式下,GPIO引脚内部连接一个下拉电阻,将引脚与地相连。这样,当外部电路没有驱动该引脚时,引脚的电平将被下拉至低电平。这种模式适用于需要确保输入引脚处于已知状态的情况。

模拟输入

(GPIO_Mode_AIN)

在这种模式下,GPIO引脚被配置为模拟输入,可以连接到微控制器内部的模拟数字转换器(ADC)上。这种模式适用于需要测量外部模拟信号的情况。

推挽输出

(GPIO_Mode_Out_PP)

在这种模式下,GPIO引脚被配置为推挽输出。当输出高电平时,引脚内部的上拉晶体管导通,将引脚与电源电压相连;当输出低电平时,引脚内部的下拉晶体管导通,将引脚与地相连。这种模式适用于需要直接驱动外部负载的情况。高低电平均有驱动能力

开漏输出

(GPIO_Mode_Out_OD)

在这种模式下,GPIO引脚被配置为开漏输出。当输出低电平时,引脚内部的下拉晶体管导通,将引脚与地相连;当输出高电平时,下拉晶体管截止,引脚处于高阻态。由于开漏输出无法主动将输出引脚拉高,因此通常需要在外部连接一个上拉电阻。对低电平的驱动能力较强

复用推挽输出

(GPIO_Mode_AF_PP)

在这种模式下,GPIO引脚被配置为复用推挽输出。与普通推挽输出类似,但是该引脚不再作为普通GPIO使用,而是连接到微控制器内部的某个外设上。这种模式适用于需要使用微控制器内部外设(如 UART 或 SPI)的情况。

复用开漏输出

(GPIO_Mode_AF_OD)

在这种模式下,GPIO引脚被配置为复用开漏输出。与普通开漏输出类似,但是该引脚不再作为普通GPIO使用,而是连接到微控制器内部的某个外设上。这种模式适用于需要使用微控制器内部外设(如 I2C 或 CAN),且外设要求使用开漏输出驱动总线的情况。

复用功能和重定义功能是两个不同的概念。

复用功能指的是一个GPIO引脚可以被配置为多种不同的功能。例如,一个引脚可以被配置为普通的数字输入/输出,也可以被配置为串行通信接口(如UART或SPI)的一部分。复用功能允许开发人员灵活地选择引脚来实现所需的功能。

重定义功能指的是改变某些外设的默认引脚映射。例如,某些微控制器上的 UART1 接口默认映射到 PA9 和 PA10 引脚上。但是,如果这些引脚已经被用于其他目的,开发人员可以通过重定义功能将 UART1 接口映射到其他引脚上,如 PB6 和 PB7。

总之,复用功能允许开发人员为单个引脚选择多种不同的功能,而重定义功能允许开发人员更改外设的默认引脚映射。

函数

功能

GPIO_DeInit

将GPIOx外设的所有寄存器恢复为默认值

GPIO_AFIODeInit

将GPIOx外设的复用功能(重映射与EXTI设置)恢复为默认值

GPIO_StructInit

将GPIO_InitTypeDef结构体的各个成员设置为默认值

GPIO_Init

按照GPIO_InitStruct结构体的变量所配置的参数来初始化GPIOx

GPIO_ReadInputDataBit

读取GPIOx端口指定引脚的输入,返回输入端口引脚值

GPIO_ReadInputData

读取GPIOx端口的输入,返回输入端口值

GPIO_ReadOutputDataBit

读取GPIOx端口指定的引脚的输出,返回输出端口引脚值

GPIO_ReadOutputData

读取GPIOx端口的输出,返回输出端口值

GPIO_SetBits

设置GPIOx的数据端口引脚位

GPIO_ResetBits

清除GPIOx的数据端口引脚位

GPIO_WriteBit

设置或清除GPIOx的数据端口引脚位

GPIO_Write

向GPIOx的数据端口写入数据

GPIO_PinLockConfig

锁定GPIOx端口指定引脚的配置寄存器

GPIO_EventOutputConfig

选择GPIOx端口指定引脚用作事件输出

GPIO_EventOutputCmd

使能或失能事件输出

GPIO_PinRemapConfig

改变指定管脚的映射,即重定义某些外设的默认引脚映射

允许将外设从一个引脚重映射到另一个引脚

GPIO_EXTILineConfig

选择GPIOx端口指定引脚用作中断线路

GPIO配置过程

(1)打开相应的I/O组时钟源(上电时,所有设备的时钟源都是关闭的,为开发者免去了不知道关闭哪些设备的问题);

(2)设置为相应的模式与设置时钟速度;

(3)设置GPIO对应的设备初始状态。

注意事项

(1)配置RCC之前,建议先调用RCC_DeInit()函数复位RCC设置,否则可能会在调试过程中遇到预期不到的初始化问题。

(2)APB1总线最高频率是36MHz,请注意RCC_PCLK1Config()函数所传递的参数。

(3)GPIO配置为输出方向时,其最大翻转频率的设置语句是不可缺少的。

(4)两个LED为共阴接法,表示使用STM32的GPIO口输出电流来驱动LED。鉴于STM32的GPIO具备不俗的驱动能力,这样做完全是可以的。但仍然建议在允许的情况下尽量使用共阳接法,使用外部电源驱动,这样可以减轻主控芯片的负担。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值