STM32单片机的GPIO有8组,分别为A、B、C、D、E,每组有0-15共16个。可以配置为8种模式:
1
浮空输入
GPIO_Mode_IN_FLOATING
外部通过IO口输入电平,传输到施密特触发器(此时施密特触发器为打开状态),直接进入输入数据寄存器,CPU通过读输入数据寄存器实现读取外部输入电平值,在输入浮空模式下可以读取外部输入电平。
如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。
2
上拉输入
GPIO_Mode_IPU
上拉电阻的开关闭合,上拉电阻连接到VDD,在I/O端口悬空(在无信号输入)的情况下,外部输入通过上拉电阻,施密特触发器存入输入数据寄存器,被CPU读取出高电平;当I/O端口输入为低电平的时候,施密特触发器触发存入输入数据寄存器,CPU读取出低电平。
3
下拉输入
GPIO_Mode_IPD
下拉电阻的开关闭合,在I/O端口悬空(在无信号输入)的情况下,下拉电阻连接到VSS,外部输入通过下拉电阻,施密特触发器存入输入数据寄存器,被CPU读取出低电平;当I/O端口输入为高电平的时候,下拉电阻处的电压为高电平,施密特触发器触发存入数据寄存器,CPU读取出高电平。
4
模拟输入
GPIO_Mode_AIN
模拟输入通道的配置则更加简单,信号从左边编号1的端口进入,从右边编号2的一端直接模拟输入至片上外设模块。上拉、下拉电阻和施密特触发器,均处于断开状态,IO口外部电压为模拟量,电压形式为非电平形式。
5
开漏输出
GPIO_Mode_Out_OD
开漏输出模式下,通过设置 位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。
这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于截止状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于导通状态,此时I/O端口的电平就是低电平。
同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平。
6
推挽输出
GPIO_Mode_Out_PP
推挽电路(push-pull)就是两个不同极性晶体管间连接的输出电路。推挽电路采用两个参数相同的MOSFET管,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。
当设置输出的值为为高电平时,P-MOS导通,N-MOS截止,此时I/O端口的电平就由P-MOS管决定为高电平;当设置输出的值为低电平的时候,P-MOS管处于截止状态,N-MOS管处于导通状态,此时I/O端口的电平就由N-MOS管决定为低电平,同时IO口输出的电平可以通过输入电路读取,此时I/O端口的电平一定是输出的电平。
7
复用开漏输出
GPIO_Mode_AF_OD
与开漏输出模式唯一区别在于输出控制电平之前电平的来源,开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的,开漏复用输出模式的输出电平是由复用功能外设输出决定的。其他与开漏输出相似。
控制电路输出高电平:N-MOS截止,IO口电平由外部上拉/下拉决定。
控制电路输出低电平:N-MOS开启,IO口输出低电平。
8
复用推挽输出
GPIO_Mode_AF_PP
与推挽输出模式唯一区别在于输出控制电路之前电平的来源。
开漏输出模式的输出电平是CPU写入输出数据寄存器的,推挽复用输出模式的输出电平是由复用功能外设输出决定的。
*转自玩转嵌入式
全部评论