STM32F103C8T6--深入GPIO
STM32 的 GPIO(General-Purpose Input/Output)即通用输入输出端口,是微控制器与外部世界交互的基础接口。通过 GPIO,可实现数字信号的读取(如按键输入)、输出(如 LED 控制),或配置为特殊功能(如 I2C、SPI 通信)。
GPIO 并非单一引脚,而是由 “引脚 + 配套电路 + 寄存器” 组成的最小功能模块。其硬件结构决定了它能实现输入和输出两种核心功能。
GPIO基本结构
I/O端口基本结构
8种输入输出模式
typedef enum
{ GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
保护电路
最右侧保护电路,当I/O pin输入电压高于上方VDD,保护二极管导通,把电流引入电源网络,低于下方VSS时,虽然二极管向上,但是波动电压实际是引入VSS进入GND。
对于5V容忍引脚,上分VDD从3.3V变为5V。下方FT为5V容忍标记。
输出电路
推挽输出(Push-Pull):输出控制P-MOS导通,VDD输出3.3V,输出控制N-MOS导通,接地0V
开漏输出(Open-Drain):只能控制N-MOS的导通,N-MOS关闭则断路,仅能拉低电平,需要外接上拉电阻才能输出高电平,或者当做地端使用。
复用开漏输出(Alternate Function Open-Drain):片上外设控制。
复用推挽输出(Alternate Function Push-Pull):片上外设控制。
输入电路
施密特触发器(Schmitt trigger):用于处理波动,只要大于施密特上限就转为高电平判定,只要低于施密特下限才转换为低电平判定,中间状态不改变判定。
模拟输入(Analog Input Mode):在这种模式下,引脚用于接收模拟信号(例如传感器输出的电压值),不经过施密特触发器。
浮空输入(Floating):无上下拉,用于读取外部不确定电平。
下拉输入(Pull-down):默认为低电平(低电平VSS的开关接通,即下拉电阻接通,默认就是VSS),当外部信号触发时读取高电平。
上拉输入(Pull-up):默认为高电平,当按键按下并接地时读取低电平。