stm32 GPIO介绍
目录
GPIO 基本结构
STM32 的每个 GPIO 引脚内部都有一套复杂的电路结构,保证其在各种使用场景下的可靠性和稳定性。以下是 GPIO 引脚内部电路的关键组成部分:
1. **保护二极管**:二极管具有单向导电性,当它正向偏置时导通,反向偏置时截止。上方的二极管接的是vdd 3.3v 下方二极管连接vss 0v
(1)如果输入电压比3.3v还要高,那么上方的二极管就会导通,输入电压电流就会直接流入vdd 而不是单片机内部,从而达到保护单片机内部的作用,
(2)如果输入电压比0v还要低(电压是相对于vss的电压所以有负电压的)这是下方二极管就会导通,电流就会从vss向io口方向流动,而不会从内部电路汲取电流。输入电压在0~3.3v数值范围内,属于正常电压,两端二极管均不会导通,这就是保护二极管的作用(详情见下图)
2. **P-MOS 管和 N-MOS 管**:这些 MOS 管构成了 GPIO 的“推挽输出”和“开漏输出”模式的基础。推挽输出和开漏输出模式分别适用于不同的应用场景,在下文中会详细分析。
3. **施密特触发器**:此触发器用于将输入的模拟信号转换为数字信号(0 和 1)。可以设定高低电平的判断阈值因为实际电信号可能会产生波动
STM32 GPIO 工作模式
STM32 的 GPIO 支持多种输入和输出模式,以适应不同的应用需求。以下是 GPIO 的主要工作模式:
输入模式
1. **浮空输入模式 (GPIO_Mode_IN_FLOATING)** //不常用
在浮空输入模式下,GPIO 引脚的电平状态完全取决于外部输入。如果引脚悬空(无信号输入),则读取的电平是不可预知的,就像是物体处于太空,极易受到外部干扰。
2. **上拉输入模式 (GPIO_Mode_IPU)**
上拉输入模式在引脚悬空时会自动将电平拉高到高电平,同时在有输入信号时能够正确反映信号电平。这时候低电平0有效
3. **下拉输入模式 (GPIO_Mode_IPD)**
下拉输入模式与上拉输入模式相反,在引脚悬空时会将电平拉低到低电平。这时候高电平1有效
4. **模拟输入模式 (GPIO_Mode_AIN)**
在模拟输入模式下,GPIO 引脚直接接收模拟信号,并将其输入到片内的 ADC 等外设模块,不经过数字化处理。
输出模式
1. **开漏输出模式 (GPIO_Mode_Out_OD)**
在开漏输出模式下,通过控制 N-MOS 管实现信号输出。高电平由外部上拉电阻决定,低电平由 N-MOS 管导通决定。
2. **推挽输出模式 (GPIO_Mode_Out_PP)**
推挽输出模式通过同时控制 P-MOS 管和 N-MOS 管实现高低电平的输出。此模式下,引脚既可以输出高电平,也可以输出低电平,适合直接驱动数字电路。
3. **开漏复用输出模式 (GPIO_Mode_AF_OD)**
开漏复用输出模式类似于开漏输出模式,不同之处在于输出信号由片内外设模块的复用功能控制,而不是直接由 CPU 控制。
4. **推挽复用输出模式 (GPIO_Mode_AF_PP)**
推挽复用输出模式与推挽输出模式类似,输出信号由片内外设模块的复用功能控制,用于更复杂的外设连接。
## 推挽结构与开漏结构的区别
### 推挽结构
推挽结构通常由两个参数相同的 MOS 管组成,一个受高电平信号控制,另一个受低电平信号控制。推挽电路的特点是可以有效地输出强高电平和强低电平,提高负载能力和开关速度,适合连接数字器件和驱动大电流负载。
### 开漏结构
开漏结构只能输出强低电平,高电平需要通过外部上拉电阻实现。该结构通常用于驱动大电流负载或实现总线的线与逻辑(如 I2C 总线),其输出端相当于三极管的集电极。
## 总结
STM32 的 GPIO 具有丰富的工作模式和灵活的配置选项,能够适应各种复杂的嵌入式系统需求。通过正确选择输入和输出模式,可以大大提高系统的可靠性和性能。在实际应用中,理解推挽和开漏的区别以及 GPIO 内部电路的工作原理,对于设计和调试硬件电路至关重要。