GPIO的8种工作模式
GPIO初始化结构体的时候,必须要配置合适的工作模式,这样才能使得IO口发挥应有的作用。工作模式大体上共分为输入输出两类,共8种,下面将介绍这8种工作模式。
输入模式
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
如上输入模式共有4种,主要是读出IO口的相关数据,比如按钮外设就需要读出高低电平来判断它的按下与松开。它们的数据通过TTL施密特触发器将模拟信号转化为数字信号输入在数据寄存器中,或者是直接由模拟信号输入到片上外设。
施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器。
- 模拟输入:主要用于ADC外设的输入
- 上拉输入:接入上拉电阻输入数字信号1
- 下拉输入:接入下拉电阻输入数字信号0
- 浮空输入:什么电阻都不接,由施密特触发器输入,输入阻抗大,为一个不确定的值,通常作为IIC,USART等通信协议的接收端。
值得注意的一点是当GPIO被设置为输入模式的时候,就不需要配置其输出速度了,当然GPIO_Init()
也会自动的忽略这一点的。
输出模式
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_AF_OD 复用开漏输出
- 推挽输出:线路经过一个类似CMOS反相器的的电路单元,输出高电平PMOS导通,低电平CMOS导通,要输出大电流一般采用这种输出方式,比如说是LED灯的点亮。
- 开漏输出:无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。
开漏输出的这一特性另一个好处在于可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。而推挽输出就不行,如果高电平和低电平连在一起,会出现电流倒灌,损坏器件。推挽输出的最大特点是可以真正的输出高电平和低电平,在两种电平下都具有驱动能力。