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)
上一篇:STM32F429之GPIO使用
下一篇:stm32-点亮led,流水灯
推荐阅读最新更新时间:2024-03-16 16:23