F10xxx系列的单片机的GPIO有八种工作模式,分别是
─ 输入浮空 数字输入 可读取引脚电平,若引脚悬空,则电平不确定
─ 输入上拉 数字输入 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
─ 输入下拉 数字输入 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
─ 模拟输入 数字输入 GPIO无效,引脚直接接入内部ADC
─ 开漏输出 数字输入 可输出引脚电平,高电平为高阻态,低电平接VSS
─ 推挽式输出 数字输入 可输出引脚电平,高电平接VDD,低电平接VSS
─ 推挽式复用功能 数字输入 由片上外设控制,高电平为高阻态,低电平接VSS
─ 开漏复用功能 数字输入 由片上外设控制,高电平接VDD,低电平接VSS
下面我将会依据手册给大家说明各个模式
这是中文版I/O端口位的基本结构
来说说保护二极管的作用,首先来说我们应该知道,当二极管的正极电压大于大于负极电压时,二极管就会导通。VDD可以看作单片机内部电压,略小于接入电路的电压VCC,VSS是公共连接的意思,通常指电路公共接地端电压。当我们的输入电压过大,大于VDD时,电流就会流向上面那个二极管,防止电压过大流入单片机内部,烧毁单片机。当我们的输入电压过小,小于VSS(VSS=0)时,电流就会流向下面那个二极管,这种电流也流不进单片机。因此输入电压要在0~3.3v才有效,部分可以容忍5v,大家可以自己看手册找找,手册里有说明。
这里我打差的地方是翻译错误,应该是施密特触发器才对,大家可以看一下原版的英文就知道了
关于施密特触发器,可以简单的和大家说一下他的作用
上图的输入信号很理想,其实我们输入的信号,或多多少带有噪声,这也就意味着我们的信号不光滑带有毛刺,模拟电压值不规律的变化,但是有了施密特触发器之后,不管你的信号如何花里胡哨,统统变成0和1。
下面我们继续结合中文说明手册说说各个模式。
输入浮空/上拉/下拉配置
相比于第一张I/O端口位的基本结构图,我们可以看到,在输入浮空/上拉/下拉模式下,输出部分断开,模拟和复用功能消失,这说明在这三种模式下,其他的模式是不起作用的。当我们启用上拉模式,开关连接VDD;启用下拉模式,开关连接VSS;启用浮空模式,开关谁也不连接。
模拟输入配置
相比于第一张I/O端口位的基本结构图,我们可以看到,在高阻抗的模拟输入配置下,GPIO的输出通道断开,输入通道只剩下模拟通道一路,施密特触发器关闭不通。这个模式下,我们通常要搭配内部的ADC使用。
推挽/开漏输出配置
很有意思的是,输出模式下,可以有输入,输入模式下,不能有输出,这是因为对于一个端口,它可以有多个输入,但只能有一个输出。
推完输出时,复用功能失效,输出寄存器上的’0’激活N-MOS,输出低电平0;而输出寄存器上的’1’将激活P-MOS,输出高电平1。施密特触发输入被激活,弱上拉和下拉电阻被禁止。
开漏输出时,复用功能失效,输出寄存器上的’0’激活N-MOS,输出低电平0;而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。施密特触发输入被激活,弱上拉和下拉电阻被禁止。
复用功能配置
复用功能包括:推挽式复用和开漏复用功能 ,其实他们和普通的推挽输出和开漏输出差不多,但不同的是,复用功能将输出的控制权利交给了片上外设,而普通的推挽输出和开漏输出将输出的控制权利交给了输出数据寄存器。
好了,这里就介绍这么多了,大家有疑问的可以自己再看看手册,以后再说说配置GPIO的事。