第四列带FT的为可容忍5V输入的引脚
GPIO(General Purpose Input Output)
- 可配置为8种输入输出模式
- 引脚电平:0V~3.3V,部分引脚可容忍5V
- 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
GPIO基本结构
STM32中,所有GPIO都是挂载在APB2外设总线上的。每个GPIO外设共有16个引脚,编号从0到15。
每个GPIO模块内包含了寄存器和驱动器。内核可以通过APB2总线对寄存器进行读写,以实现输出电平和读取电平。由于STM32是32位的单片机,所以STM32内部寄存器都是32位的,但是端口只有16位,所以这个寄存器只有低16位对应有端口,高16位没有用到。驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据,如果要进行电灯这样的操作,则需要驱动器来增大驱动能力
GPIO位结构
引脚处接了两个保护二极管,能对输入电压进行限幅,VDD接3.3v,VSS接0v,如果输入电压比3.3v还高,则上方二极管导通,输入电压产生的电流就会直接流入VDD而不会流入内部电路,避免过高的电压对内部电路产生伤害;如果输入电压小于VSS,即负电压,则下方二极管导通,电流直接从VSS流出去,而不会从内部电路汲取电流;如果输入电压在0~3.3v,则两个二极管都不会导通。
输入的信号经过斯密特触发器整形后的数字量可以选择写入输入数据寄存器,我们可以利用程序读取输入数据寄存器对应某一位的数据;或者选择输入至复用功能输入,这个是连接到其他需要读取端口的外设上,如串口输入引脚;也可以选择在斯密特触发器整形前将模拟量写入ADC。
位设置/清除寄存器,可以单独操作输出数据寄存器的某一位,而不影响其他位。而输出数据寄存器只能同时控制16个端口,并且这个寄存器只能整体读写。所以如果想单独控制某一个端口而不影响其他端口的话,第一种方式可以先整体读出数据,然后进行按位与或按位或更改某一位;第二种方式就是通过设置位设置/位清除寄存器来实现。
输出部分可以由输出数据寄存器或片上外设控制,这两种控制方式通过数据选择器接到输出控制部分,随后接到两个MOS管,推挽输出模式下,PMOS和NMOS均有效,数据寄存器为1时,上管导通下管断开,输出直接接到VDD,输出高电平;数据寄存器为0时,上管断开下管导通,输出直接接到VSS,输出低电平,这种模式下高低电平均有较强驱动能力,所以推挽输出模式也叫强推输出模式,推挽输出模式下,STM32对IO口有绝对的控制权。开漏输出模式下,PMOS无效,只有NMOS在工作,数据寄存器为1时,下管断开,这时候,输出相当于断开,也就是高阻模式;数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平,这种模式下,只有低电平有驱动能力,高电平没有,可以用于通信协议的驱动方式(IIC);也可以用于输出5V的电平信号。
GPIO模式
(每一个端口由4位进行配置,16个端口需要64位)
通过配置GPIO端口配置寄存器,可配置成以下八种模式
浮空/上拉/下拉输入
在输入模式下,输出驱动器都是断开的,端口只能输入不能输出。
浮空、上拉、下拉输入区别是上拉电阻和下拉电阻的连接。他们都属于数字的输入口,都可以读取端口高低电平
模拟输入
开漏/推挽输出
在输出模式下,输入也是有效的。
开漏、推挽输出区别是:开漏输出的高电平呈高阻态、没有驱动能力;而推挽输出高低电平均有驱动能力
复用开漏/推挽输出