浮空输入:输入引脚啥都不接,此时输入电平极易受外界的干扰导致输入电平不确定,完全由外部的输入决定。
上拉输入:接上拉电阻,给一个默认的高电平也就是说当没有外部输入时默认输入高电平
下拉输入:接下拉电阻,给一个默认的低电平也就是说当没有外部输入时默认输入低电平
模拟输入:
3.推挽和开漏输出
● 施密特触发输入被激活
● 弱上拉和下拉电阻被禁止
● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值
除了模拟输入的这种模式会关闭数字输入功能其他七种模式,都可以通过输入寄存器读取I/O状态,例:在模拟I2C实验中把GPIO的工作模式配置为开漏输出时同时也可以读取引脚电平状态。
在输出模式中,推挽模式时双 MOS 管以轮流方式工作,输出数据寄存器 GPIOx_ODR可控制 I/O 输出高低电平。开漏模式时,只有 N-MOS 管工作,输出数据寄存器可控制 I/O输出高阻态或低电平。
推挽输出:
开漏输出:
开漏输出最重要的作用是:电平匹配,在设计电路时不论是单片机还是外设芯片或是负载,每个个体的逻辑电平可能是不一样的,这种情况时就需要作电平的匹配,就用到了开漏输出模式。
开漏输出模式,因为场效应管的漏极直接引出,是需要加一个外置电源的,我们可以通过外接电源的方式得到想要的电平。因为外接电源的方式,从MCU的角度来说,减轻了MCU的负担。
例如在使用MCU自带的IIC模块时,就要求配置想要的管脚为开漏输出模式, 多个开漏输出被接在了同一个线上,下图中如果其中的某个引脚的漏极为低电平,则整个总线上都是低电平,这是“与逻辑”,所以被成为“线与”。因为IIC总线可以接很多个设备,MCU就是通过这种方式判断当前总线的状态。
IIC器件内部的输出端为“漏极开路”的场效应管(MOS管),空闲状态下(即总线上无数据传输时),两条信号线(SDA、SCL)都处于高电平。开漏(opendrain)电路就是指以MOSFET的漏极为输出的电路,需要在漏极外部的电路添加上拉电阻。开漏输出,只能输出低电平,不能输出高电平,另一种输出是高阻态。
复用模式输出连接的是MCU的内部外设,例如PWM、USART、IIC。具体用复用开漏输出还是复用推挽输出,这个就要根据外设需求来设置,例如IIC在使用时需要用到线与特性,就必须在程序里配置IO引脚为复用开漏输出;像UART或者PWM功能,需要IO口高速变化确定的高低电平,则必须配置为复用推挽输出。