一、GPIO简介
- GPIO(General Purpose Input Output)通用输入输出口
- 可配置为8种输入输出模式
- 引脚电平:0V~3.3V,部分引脚可容忍5V(在STM32F103C8T6引脚定义中,带FT的,可以容忍5V)
- 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
二、GPIO基本结构
在STM32中,所有GPIO均接在APB2外设总线上,其中寄存器直接与指定引脚相连,配置好读写模式后可以直接读取或写入指定引脚的高低电平;驱动器则是起到增大信号驱动能力的作用。
三、GPIO模式
GPIO共具有以下八种输入输出模式:
- IO引脚处直接接两个保护二极管与VDD和VSS相连,高于VDD和低于VSS的电压信号会触发保护电路,避免过高或过低的信号对STM32系统的干扰。
- 输入模式分为上拉输入、下拉输入和浮空输入,其通过增加上、下拉电阻来设置IO引脚的默认输入电平,该电阻阻值较大,上/下拉作用较弱,以实现尽量减少对输入信号干扰的作用。没有配置电阻时即浮空输入,信号容易受到外界扰动,此时必须保证IO引脚为连续变化的输入源。
- 输出控制电路通过P-MOS和N-MOS是否连接或断开,将输出模式分为推挽、开漏和关闭输出模式。
- 推挽输出模式下,P-MOS和N-MOS均连接,高电平将通过P-MOS向IO引脚输出VDD,低电平将通过N-MOS向IO引脚输出VSS,此时高低电平均具有较强输出能力。
- 开漏输出模式下,P-MOS始终处于断开,仅有低电平可以通过N-MOS向IO引脚输出VSS,此时仅有低电平具有输出能力。开漏模式通常应用在通信协议(例如I2C协议)的驱动方式,可以在多机模式下避免多机通信相互干扰。
- 关闭模式下,P-MOS和N-MOS均无效,引脚电平由外部电路控制(该模式我还没遇到过应用场景)。
- 复用开漏、推挽输出模式下,输出信号又片上外设而非数据输出寄存器控制。