GPIO全称为General Purpose Input Output,即通用的输入输出,有时候简称“IO口”,每一个GPIO通常都可以实现不同的功能,有点万金油的意思,可以作为数字输出,可以作为数字输入,亦或是复用端口,这些完全由设计者来定。但是对于GPIO的各种参数,你真的了解嘛?
为什么要先配置时钟再配置GPIO?因为寄存器是由D触发器组成的,只有有了时钟信号,触发器才能被改写值。这么做的目的是为了省电,低功耗,使用了所谓时钟门控的技术。
GPIO作为输入口GPIO作为输入口时,有四种模式,分别为:1、
上拉输入,在该模式下,GPIO 引脚无输入时, 引脚为高电平,因此其只能检测外部输入的低电平。2、
下拉输入,与上拉相反,在该模式下,GPIO 引脚无输入时, 引脚为低电平,因此其只能检测外部输入的高电平。3、
高阻态,在该模式下,GPIO引脚无输入时,输入电平不确定,除非有外部信号来驱动电路。4、
复用输入,例如将该接口连接至ADC模块,作为模拟输入口,或者是连接至SPI模块,作为SPI的数据输入口。
GPIO作为输出口常见的有开漏输出、推挽输出与开集输出,其特点及对比如下所示。推挽输出的结构是由两个三极管或者MOS管受到互补信号的控制,两个管子始终保持一个处于截止,另一个处于导通的状态。推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。但推挽输出的一个缺点是,如果当两个推挽输出结构相连在一起,一个输出高电平,即上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。整个通路上电阻很小,会发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。
开漏输出和开集输出,这两种输出的原理和特性基本是类似的,区别在于一个是使用MOS管,其中的"漏"指的就是MOS管的漏极;另一个使用三极管,其中的"集"指的就是三极管的集电极。这两者其实都是和推挽输出相对应的输出模式,由于使用MOS管的情况较多,很多时候就用"开漏输出"这个词代替了开漏输出和开集输出。开漏输出就是从MOSFET的漏极输出的电路,要得到高电平状态需要加上拉电阻才行。适合做电流型的驱动,其吸收电流的能力比较强,其最主要的特性就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平。开漏输出的优势在于可以很方便的调节输出电平,因为输出电平完全由上拉电阻连接的电源决定。另外其可以实现"线与"功能,适合做通信接口。
参考:整理自网络,侵删
推荐阅读MCU与MPU间的界限正在消失奥迪e-tron的BMS系统揭示汽车软件的复杂性为什么点火信号叫KL15,蓄电池电压叫KL30,无聊的知识又增加了。
点个“在看”再走!