STM32的GPIO的八种工作模式
GPIO八种工作模式的简介
GPIO八种工作模式 | 特点及应用 |
---|---|
输入浮空 | 输入用,完全浮空,状态不定 |
输入上拉 | 输入用,用内部上拉,默认是高电平 |
输入下拉 | 输入用,用内部下拉,默认是低电平 |
模拟功能 | ADC,DAC |
开漏输出 | 软件IIC的SDA、SCL等 |
推挽输出 | 驱动能力强,25mA(max), 通用输出 |
开漏式复用功能 | 片上外设功能(硬件IIC的SDA、SCL) |
推挽复用功能 | 片上外设功能(SPI的SCK、MISO、MOSI、CS) |
输入浮空
- 上拉/下拉电阻为断开状态
- 施密特触发器打开
- 输出被禁止
- 输入浮空模式下,IO口的电平完全是由外部电路决定。如果IO引脚没有连接其他的设备,那么检测其输入电平是不确定的。该模式可以用于按键检测,RX1等。
输入上拉
- 上拉电阻导通,
- 施密特触发器打开,
- 输出被禁止。
- 在需要外部上拉电阻的时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大,
所以只是“弱上拉”,不适合做电流型驱动. - 如果外部输入高电平,则输入寄存器读取到的值为1,如果外部输入低电平,则输入寄存器读取的值为0。
- 如果外部处于空闲状态(高阻状态),则由于上拉电阻导通,则默认为高电平,则输入寄存器读取的值为1.
输入下拉
- 下拉电阻导通
- 施密特触发器打开,
- 输出被禁止。
- 在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样可以节省一个外部电阻,但是内部下拉电阻的阻值较大,
所以不适合做电流型驱动。 - 如果外部输入高电平,则输入寄存器读取到的值为1,如果外部输入低电平,则输入寄存器读取的值为0。
- 如果外部处于空闲状态(高阻状态),则由于下拉电阻导通,则默认为低电平,则输入寄存器读取的值为0.
模拟输入
- 上下拉电阻断开
- 施密特触发器关闭
- 双 MOS管也关闭
- 该模式用于 ADC采集或者 DAC 输出,或者低功耗下省电。
开漏输出
- 施密特触发器打开,即IO的输入功能是打开的,输入寄存器可以读取输出的电压是高还是低
- 开漏模式下,P-MOS 管是一直截止的,所以 P-MOS 管的栅极一直接 VSS。如果输出数据寄存器设置为 0 时,经过“输出控制”的逻辑非操作后,输出逻辑 1 到 N-MOS 管的栅极,这时 N-MOS 管就会导通,使得 I/O 引脚接到 VSS,即输出低电平。如果输出数据寄存器设置为 1时,经过“输出控制器”的逻辑非操作后,输出逻辑 0到 NMOS 管的栅极,这时 N-MOS 管就会截止。因为 P-MOS 管是一直截止的,使得 I/O 引脚呈现高阻态,即不输出低电平,也不输出高电平。因此要 I/O 引脚输出高电平就必须接上拉电阻。这时可以接内部上拉电阻,或者接一个外部上拉电阻。由于内部上拉电阻的阻值较大,所以只是“弱上拉”。需要大电流驱动,请接外部的上拉电阻。此外,上拉电阻具有线与特性,即如果有很多开漏模式的引脚连在一起的时候,只有当所有引脚都输出高阻态,电平才为 1,只要有其中一个为低电平时,就等于接地,使得整条线路都为低电平0。我们的IIC通信(IIC_SDA)就用到这个原理。
- 对第三点的总结,其特点是:P-MOS管始终不导通,N-MOS管只能输出低电平,如果需要输出高电平,则需要上拉电阻。
开漏复用功能
- 施密特触发器打开,即IO的输入功能是打开的,输入寄存器可以读取输出的电压是高还是低
- P-MOS管始终不导通
- 其输出由其他外设控制,而不是由输出寄存器控制
- 特点:只能输出低电平,如果要输出高电平,则需要内部(外部)上拉电阻。
推挽输出
- 施密特触发器打开,即IO的输入功能是打开的,输入寄存器可以读取输出的电压是高还是低
- 往输出寄存器写0,则N-MOS导通,输出低电平
- 往输出寄存器写1,则P-MOS导通,输出高电平
- 由于推挽输出模式输出高电平时,是直接连接 VDD ,所以驱动能力较强,可以做电流型
驱动,驱动电流最大可达 25mA。该模式也是最常用的输出模式。
推挽复用功能
- 施密特触发器打开,即IO的输入功能是打开的,输入寄存器可以读取输出的电压是高还是低
- 由其他外设来控制电平输出。
- 可以输出高电平,也可以输出低电平
- 驱动能力强