stm32 GPIO模式

本文章借鉴以及引用网上流传的攻略,由于作者不确定,所以直接借鉴来用了,不好意思,如有问题,联系博主整改。

先上图:(参考手册P105)

stm32 GPIO模式

直接入正题,在STM32中,GPIO有八种模式:

 

(1)GPIO_Mode_AIN 模拟输入

(2)GPIO_Mode_IN_FLOATING 浮空输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

(5)GPIO_Mode_Out_OD 开漏输出

(6)GPIO_Mode_Out_PP 推挽输出

(7)GPIO_Mode_AF_OD 复用开漏输出

(8)GPIO_Mode_AF_PP 复用推挽输出

我们知道,在传统的51单片机中,IO口只是输出高低电平就行,但是stm32因为功能的强大,所以IO口就被赋予了非常重要的使命——让CPU与各种外部芯片、元器件等进行“沟通”,因为模式的不同,所以一个引脚就可以接非常多的外部器件,而又引申出了“AFIO端口重映射”功能,这个后面再讲(每一个内部外设的知识都是很多的)。

首先先给个概念:输出和输入

以前我们使用51的时候,1是输出、0是输入,那是因为功能少,当功能多的时候就得把两种功能分开了,典型的例子有STC公司出的STC12系列以及stc15系列。STM32可以这么说吧:输出是CPU计算后进行控制,输入是读取后给CPU进行计算。

输出:GPIO的输出与51的 IO口是差不多的概念,都是输出高、低电平来控制外部电路:

处理过程是(如图下半部分):CPU下达输出高或低电平指令,指令配置“位设置/清除寄存器(GPIOx_BSRR)”(设置就是“1”高电平,清除就是“0”低电平),再由位寄存器配置输出数据寄存器(GPIOx_ODR),经过一个选择器(选择是一般输出还是复用功能输出),然后进行输出控制,控制是什么模式:推挽、开漏或者关闭,然后输出高或低电平到IO口。

输入:进行数据的采集,外部电路通过IO口输入模拟量,然后通过“TTL肖特基触发器”(肖特基触发器是将相对缓慢变化的模拟信号变成矩形信号,便于后面读取),进入输入数据寄存器,最后就能给CPU读取数据。

输入输出讲完了,我们来讲讲模式:

输出:

先上图:左边是推挽输出,右边是开漏输出。

stm32 GPIO模式

1.  推挽输出模式:(最常用)

引用网上的说明:推挽电路是两个参数相同的三极管或 MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

简单来说,当一个mos管电流增大时,另一个mos管的电流就减小,当P-MOS管饱和时,同时N-MOS截止,接通并输出Vdd及高电平“1”,反之,当N-MOS管饱和时,同时P-MOS截止,接通并输出Vss及低电平“0”。 就像是这两个mos管在相互“推、拉(挽)”,所以就叫推挽。

2.  开漏输出模式:(不常用)

引用网上的说明:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。

利用外部电路的驱动能力,减少 IC 内部的驱动。当 IC 内部 MOSFET 导通时,驱动电流是从外部的VCC 流经 R pull-up ,MOSFET到 GND。IC 内部仅需很少的栅极驱动电流。

3.  推挽、开漏复用模式:

当GPIO口被用作第二功能时,需要配置,端口重映射AFIO。

输入:

1.  浮空输入模式:

浮空输入状态下,IO 的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。可做KEY按键识别

2.  上、下拉输入模式:

如图,内部设有上拉和下拉电阻,当外部电路为低电平,IO口设为下拉模式,当外部电路为低电平,IO口设为上拉模式。

3.  模拟输入:

用作内部ADC输入或DAC输出,预防干扰。

小结:

    常用的就是推挽输出了,其次就是根据外部电路,配置相应的输入模式。