IO也叫GPIO,即通用输入输出端口,主要有一下几种模式,普通输入,模拟输入,开漏输出,推挽输出,另外还可附加配置浮空,上拉或者下拉,或者复用。普通输入就是读取ttl电平的逻辑值,不多解释;模拟输入对外表现为高阻,一方面可以在启用内部adc的时候使用,另一方面降低不用端口的电流,减小功耗;开漏输出简单讲就是逻辑1输出高阻态,逻辑0输出低电平,因此需要外部上拉电阻,看似麻烦但是好处是可以做逻辑电平转换,天生带‘线与’的功能;而推完输出就是强制拉高或拉低电平(不超过IO电流输出能力的前提下),不需要外部上拉了。上下拉电阻在不同系列STM32里不太一样,有的只能输入才有,有的输入输出共用,和外部上下拉差不多,不过阻值不小,上下拉能力有限。复用就不说了,主要是后端与片上外设连线的关系,和IO关系不是太大。
单片机IO口输出一般有准双向口输出、 推挽输出、开漏输出等。下面介绍这三种输出模式。
准双向口输出:准双向口输出就是可作为输出也可作为输入口,因此这个口是不定的,是准双向类型,不用重新I/O口的输出状态 。准双向口有3个上拉晶体管以便根据不同的需要设置表不同的参数。这三个晶体管分别是起到强上拉、极弱上拉、弱上拉功能。
推挽输出:
推挽输出是因为它的输出结构类似于推挽结构,它是一种由两个三极管(或者其他MOS管等)分别受到一个信号的控制,这信号的互补的,就是说只有一个三极管导通,一个三极管导通的时候另一个就要截止。推挽输出可以输出高电平,也可以输出低电平。当锁存器为“1”时候可以持续提供强上拉,这种输出结构可以驱动需要很大电流的器件。
开漏输出:这种结构作为逻辑输出时候,必须要有外部上拉,上拉电阻要为10K左右比较好,一般是通过电阻加到VCC电源,这样才可以读取外部状态,也就是说此时的开漏输出的可以作为外部的输入I/O口。
除了这些有些还附带PWM输出功能,芯片内部集成PWM等,用来专门驱动电机、蜂鸣器等需要PWM的信号。