MCU的GPIO 八种模式

对于MCU来说,GPIO总共有8种模式:

  1. 浮空输入模式
  2. 上拉输入模式
  3. 下拉输入模式
  4. 模拟输入模式
  5. 推挽输出模式
  6. 开漏输出模式
  7. 复用推挽输出模式
  8. 复用开漏输出模式

一、STM32 普通 GPIO 内部逻辑图

1、保护二极管

IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。

当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。也叫钳位二极管

2、P-MOS 管和 N-MOS 管

由P-MOS管和N-MOS管组成的单元电路使得GPIO具有"推挽输出"和"开漏输出"的模式。

3、TTL 肖特基触发器

信号经过触发器后,模拟信号转化为 0 和 1 的数字信号。但是,当 GPIO 引脚作为 ADC 采集电压的输入通道时,用其"模拟输入"功能,此时信号不再经过触发器进行TTL电平转换。(可以理解为一个比较器,大于某个值是1,小于某个值是0)

查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有"FT"一列,这代表着这个GPIO口时兼容3.3V和5V的;

如果没有标注"FT",就代表着不兼容5V。比如STM32F103VET6的GPIOE口那一组全部兼容5V,其他组是部分兼容5V。

二、模式

1、浮空输入模式

当GPIO引脚配置为浮空输入模式时,外部电平信号通过IO引脚传输到施密特触发器(即图中TTL肖特基触发器)并最终进入输入数据寄存器,MCU通过读取输入数据寄存器获取外部电平信号。

现象体现:

复制代码
IO引脚浮空时,读取输入电平信号可能为0,也可能为1
IO引脚接高电平时,读取输入电平信号为1
IO引脚接低电平时,读取输入电平信号为0

2、上拉输入模式

当GPIO引脚配置为上拉输入模式时,上拉电阻开关闭合,当IO引脚未接电平信号时,VDD(高电平信号)通过上拉电阻经过施密特触发器存入输入数据寄存器,因此未接电平信号时读取该IO引脚输入数据寄存器值为1。

现象体现:

复制代码
IO引脚浮空时,读取输入电平信号为1
IO引脚接高电平时,读取输入电平信号为1
IO引脚接低电平时,读取输入电平信号为0

3、下拉输入模式

当GPIO引脚配置为下拉输入模式时,下拉电阻开关闭合,当IO引脚未接电平信号时,VSS(低电平信号)通过下拉电阻经过施密特触发器存入输入数据寄存器,因此未接电平信号时读取该IO引脚输入数据寄存器值为0。

现象体现:

复制代码
IO引脚浮空时,读取输入电平信号为0
IO引脚接高电平时,读取输入电平信号为1
IO引脚接低电平时,读取输入电平信号为0

4、模拟输入模式

当GPIO引脚配置为模拟输入模式时,IO引脚信号直接通过模拟输入端进入片上外设模块,IO口外部电压信号为模拟量,非电平形式。通常配置ADC时GPIO引脚初始化配置为模拟输入模式。

5、推挽输出模式

当GPIO引脚配置为推挽输出模式时,推挽电路(push-pull)就是两个不同极性晶体管间连接的输出电路。推挽电路采用两个参数相同的MOSFET管,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。当设置输出的值为为高电平时,P-MOS导通,N-MOS截止,此时I/O端口的电平就由P-MOS管决定为高电平;当设置输出的值为低电平的时候,P-MOS管处于截止状态,N-MOS管处于导通状态,此时I/O端口的电平就由N-MOS管决定为低电平,同时IO口输出的电平可以通过输入电路读取,此时I/O端口的电平一定是输出的电平

现象体现:

复制代码
	当IO引脚配置输出高电平信号时,读该引脚信号一直为高电平信号1,此时可以通过直接读取该引脚输入数据寄存器获取输出电平信号
	当IO引脚配置输出低电平时,输出信号一直为低电平信号0,此时可以通过直接读取该引脚输入数据寄存器获取输出电平信号

6、开漏输出模式

当GPIO引脚配置为开漏输出模式时,通过设置 位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于截止状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于导通状态,此时I/O端口的电平就是低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平,可通过直接读取该引脚确定输出电平信号GPIO_ReadInputDataBit()

现象体现:

复制代码
当IO引脚配置输出高电平且接上拉电阻时,读该引脚信号一直为高电平信号1,如下图:
复制代码
当IO引脚配置输出高电平且接下拉电阻或不接电平信号时,读该引脚信号一直为低电平信号0,如下图:

IO引脚配置输出低电平时,无论上拉还是下拉,输出信号一直为低电平信号,如下图:

7、复用推挽输出模式

具有推挽模式的特点,但输出源通常由其他外设控制

8、复用开漏输出模式

具有开漏模式的特点,但输出源通常由其他外设控制。

相关推荐
我是海飞25 分钟前
杰理 AC792N WebSocket 客户端例程使用测试教程
c语言·python·单片机·websocket·网络协议·嵌入式·杰理
CQ_YM36 分钟前
51单片机(2)
单片机·嵌入式硬件·51单片机
不脱发的程序猿1 小时前
CAN总线如何区分和识别帧类型
单片机·嵌入式硬件·嵌入式·can
chao1898441 小时前
基于STM32与W5500的Modbus TCP协议实现指南
stm32·嵌入式硬件·tcp/ip
代码游侠1 小时前
应用——基于51单片机的按键控制蜂鸣器
stm32·单片机·嵌入式硬件
Moonquakes5402 小时前
嵌入式基础学习笔记(51)
笔记·单片机·学习
小鱼23332 小时前
STM32中的中断机制与应用
c语言·stm32·单片机·嵌入式硬件·mcu
爱潜水的小L2 小时前
自学嵌入式day44,51单片机
单片机·嵌入式硬件
v先v关v住v获v取2 小时前
ZY8600-25-50型掩护式液压支架设计支撑6张cad+设计说明书
科技·单片机·51单片机
宵时待雨2 小时前
STM32笔记归纳1:STM32的基本信息与引脚分布
笔记·stm32·嵌入式硬件