STM32 GPIO模式总结

来源:互联网 发布:mac怎么删除桌面文件 编辑:程序博客网 时间:2024/05/16 06:24

GPIO的8种工作方式

4种输入模式

浮空输入

上拉输入

下拉输入

模拟输入

4种输出模式

开漏输出

复用开漏输出

推挽输出

复用推挽输出

3种最大输出速度

2MHz

10MHz

50MHz


浮空输入模式

 

1) 外部通过IO口输入电平,外部电平通过上下拉部分(浮空模式下都关闭,既无

上拉也无下拉电阻)

2) 传输到施密特触发器(此时施密特触发器为打开状态)

施密特触发器作用

1. 波形变换可将三角波、正弦波等变成矩形波。

2. 脉冲波的整形数字系统中,矩形脉冲在传输中经常发生波形畸变,出现上升沿和下降沿不理想的情况,可用施密特触发器整形后,获得较理想的矩形脉冲。

3. 脉冲鉴幅 幅度不同、不规则的脉冲信号施加到施密特触发器的输入端时,能选择幅度大于欲设值的脉冲信号进行输出。

3) 继续传输到输入数据寄存器IDR

4) CPU通过读输入数据寄存器IDR实现读取外部输入电平值

5) 在输入浮空模式下可以读取外部输入电平

6) 由于浮空输入一般多用于外部按键输入,有的理解为,浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。

上拉输入模式

 

   在没有信号输入的时候,上拉电阻能使读取input值保持为高,而下拉电阻正是相反。有些传感器等元气件,他们的信号输出有效时候会输出一个高电平(或者低电平),无效时候不输出,为开路。此时我们就必须用上拉电阻(或下拉电阻)。I2S时下拉输入,其它都是上拉输入。

  和输入浮空模式相比较,不同之处在于内部有一个上拉电阻连接到VDD(输入上拉模式下,上拉电阻开关接通,阻值约30-50K)。

外部输入通过上拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取。


输入下拉模式

 

 

和输入浮空模式相比较,不同之处在于内部有一个下拉电阻连接到VSS(输入下拉模式下,下拉电阻开关接通,阻值约30-50K)

外部输入通过下拉电阻,施密特触发器存入输入数据寄存器IDR,被CPU读取

输入模拟模式

 

1.上拉和下拉部分均为关闭状态(AD转换-模拟量转换为数字量)

2.施密特触发器为截止状态

3.通过模拟输入通道输入到CPU

4.IO口外部电压为模拟量(电压形式非电平形式),作为模拟输入范围一般为0~3.3V



开漏输出模式

 

1,CPU写入 位设置/清寄存器BSRR,映射到输出数据寄存器ODR

2,通到输出控制电路(也就是ODR的电平)

3,ODR电平通过输出控制电路进入N-MOS管

ODR输出1:

    N-MOS截止,IO端口电平不会由ODR输出决定,而由外部上拉/下拉决定

在输出状态下,输出的电平可以被读取,数据存入输入数据寄存器,由CPU读取,实现CPU读取输出电平。

所以,当N-MOS截止时,如果读取到输出电平为1,不一定是我们输出的1,有可能是外部上拉产生的1。

ODR输出0:

    N-MOS开启,IO端口电平被N-MOS管拉倒VSS,使IO输出低电平

此时输出的低电平同样可以被CPU读取到。


开漏复用输出模式

 

与开漏输出模式唯一的区别在于输出控制电路之前电平的来源

开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的

开漏推挽输出模式的输出电平是由复用功能外设输出决定的

其他与开漏输出模式相似:

    控制电路输出为1:N-MOS截止,IO口电平由外部上拉/下拉决定

    控制电路输出为0:N-MOS开启,IO口输出低电平

推挽输出模式


与开漏输出相比较:

输出控制寄存器部分相同

输出驱动器部分加入了P-MOS管部分

当输出控制电路输出1时:

P-MOS管导通N-MOS管截止,被上拉到高电平,IO口输出为高电平1

当输出控制电路输出0时:

P-MOS管截止N-MOS管导通,被下拉到低电平,IO口输出为低电平0

同时IO口输出的电平可以通过输入电路读取

复用推挽输出模式

 

与推挽输出模式唯一的区别在于输出控制电路之前电平的来源

开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的

开漏推挽输出模式的输出电平是由复用功能外设输出决定的

推挽输出:

     可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

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

详细理解:

  推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。

推挽输出和开漏输出的区别:

推挽输出:可以输出强高/强低电平,可以连接数字器件

开漏输出:只能输出强低电平(高电平需要依靠外部上拉电子拉高),适合做电流型驱动,吸收电流能力较强(20ma之内)STM32中选用IO模式设置推挽模式,只能是输出模式,而输出高低电平的驱动电流都很大。即可作为输出,也可作为输入。作输出时,要输出高电平,需要外加上拉电阻。作输入时,要求处理高电平状态,才能读外部引脚。


GPIO配置情况

1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1

2) 带上拉输入_IPU——IO内部上拉电阻输入

3) 带下拉输入_IPD—— IO内部下拉电阻输入

4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电

5) 开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能

6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的

7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)

8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)


原创粉丝点击