GPIO简介:
通用输入输出口,可配置8种输入输出模式。
引脚电平:0v~3.3v ,部分引脚可容忍5v.
输出模式下可控制端口输出高低电平,用于驱动LED,蜂鸣器,模拟通信协议输出时序等。
输入模式下可以读取端口的高低电平,用于读取按键输入,外接模块电平信号输入,模拟通信协议接收数据。
GPIO基本结构:
所有的GPIO都是挂载在APB2外设总线上的,每个GPIOX都有16个引脚。
每个GPIO都包含寄存器与驱动器,内核通过APB2对寄存器进行读写来完成对输出电平和读取电平的功能,每一个引脚对应的是寄存器的每一位。驱动器只是增加驱动能力。

这是STM32系统结构,所有的GPIO都是挂载在APB2外设总线上的。

GPIO位结构:

对于GPIO输入部分解释:

第一部分引脚与保护二极管:
输入电压从引脚开始,两个二极管用于确保电压是在0v~3.3v之间,保护内部电路。接VDD的当有大于3.3v电压时接通流向VDD。接VSS的当有小于0v的接通流向VSS。
第二部分上拉电阻与下拉电阻:
可以通过程序进行设置,上面接通下面断开就为上拉输入模式,反之为下拉输入模式,两个都断开为浮空输入模式。作用:给输入提供一个默认的输入电平(因为输入不是低电平就是高电平),不接的浮空电平容易受到干扰。
第三部分施密特触发器:
用于对输入电压进行整型,设置两个阈值,大于高阈值瞬间升为高电平,低于低阈值瞬间降为低电平。避免因为信号抖动而而造成的输出抖动现象

第四部分输入数据寄存器与到片上外设的两条线路
整形后的波形直接写入输入数据寄存器中,再用程序读取寄存器中对应某一位的数据,就可以知道电平。其中模拟输入连接到ADC中,因为要接收模拟量所以在触发器之前。复用功能输入,连接到其他需要读取端口的外设上。
对于GPIO输出部分解释:

第一部分两种控制方式与位设置/位清除寄存器介绍
一种控制方式是通过输出寄存器来设置(普通的IO),另一种是通过片上外设进行控制。两种控制方式通过数据选择器接到了输出控制部分。
如果只想要对输出寄存器的某一位进行设置,因为寄存器控制16个端口。并且只能进行整体操作,就只能用位于位或操作较为繁琐。而位设置/位清除寄存器可以直接对想要操作的端口置1或清0.
如果想对某一位进行置1操作,在位设置寄存器的对应位置写1.想对某一位进行清0操作,在位清除寄存器的对应位置写0.
第二部分:MOS管
信号来控制开关的导通和关闭。开关负责将IO口接VSS或VDD可以选择推挽输出,开漏输出或关闭输出
推挽输出时Pmos管与NMOS管均有效,输出信号为1时PMOS接通NMOS不接通,输出直接接到VDD输出高电平。输出信号为0时NMOS接通PMOS不接通,输出直接接到VSS输出高电平。
具有很强的驱动能力。
开漏输出时只有NMOS有效,寄存器为1时NMOS断开为高阻模式,没有输出。寄存器为0时NMOS闭合,直接接到VSS输出为低电平。只有低电平有驱动能力,高电平没有驱动能力。
再多级通信中,开漏输出可以避免各个设备的互相干扰,另外还可以输出5v的电平信号
GPIO模式
输入模式下,输出端口关闭,禁止输出。
输出模式下,允许输入
复用输出时用片上外设进行控制的。
