记录一下stm32 IO口的八种输入输出模式的学习
首先,可以看见stm32的输入输出模式有以上8种
先从简单的开始说吧
上拉输入和下拉输入:
看图:
由上图可见,当IO口设置为上拉输入的时候,IO口内部的上拉电阻就被接上了,从字面意思可以理解,上拉嘛,电平被上拉了,所以在没有输入的情况下,都是为高电平的状态,而当外部电路输入低电平的时候,才被拉低,经过触发器,再到寄存器,最后到CPU。
而下拉输入和上拉输入可以说就是在内部选择接上拉还是接下拉而已,当选择下拉输入的时候,上拉电阻的连接就会被断开,然后下拉电阻的连接就会被连上,此刻IO口的状态就一直处于低电平。
模拟输入:
应用在ADC模拟输入,或者低功耗下可以省电,这个也是可以直接从字面意思上理解,就不多做记录。
浮空输入:
浮空输入,浮空嘛,在空中,碰不到顶,也不着地,所以不接上拉电阻,也不接下拉电阻,就在中间,那IO到底是0还是1呢,高电平还是低电平呢,谁都不确定,全看这个IO连接的外部电路给的是0还是1,高电平还是低电平,然后再给到触发器,再到寄存器,再到CPU;目前我用过一次就是在写关于18b20的程序里面,因为单线的,所以在时序上比较严格,在初始化18b20的时候,其中有一个步骤是需要释放总线的,查了很久这个释放总线是什么意思,最后我就是在释放总线这一步把与总线相连的IO口(即总线),设置为浮空输入,释放了总线以后,CPU对这个口输出0输出1就没用了,总线到底是0还是1就不确定了,就全看外部电路了,不过在输入模式下,还是可以通过CPU读取到的,希望这个栗子可以帮助理解。
开漏输出模式:
因为模电学得不好,所以也就只能大概的讲一下方便自己理解的方法了,等日后模电学好以后一定展开讲讲。
在开漏输出模式下,就可以理解为IO口内部就是一个这样的三极管,如果没有接上拉电阻的话,输出1(高电平),只能是高阻态,还是只会输出低电平,当然在正常输出低电平的时候,三极管截至,肯定也是没有输出的,只有接上了上拉电阻,就像三极管的共射极放大电路,在集电极上提供一个电压,接上上拉电阻,这个时候IO口再输出一个高电平,才能使这个三极管导通,放大电路开始工作,这样才能输出1,才有电流驱动外部电路,当然啦,开漏输出也确实一般都用在电流驱动。
另外,IO口在开漏输出模式下,也是可以读取IO口的状态的,看上面图4567的路径就可以明白了。
推挽输出:
在推挽模式下,IO口内部的电路就可以理解为上面这个图,两个二极管,当CPU让IO口输出0的时候,上面的NPN三极管就截止,下面的PNP三极管导通,输出0出去给外部电路,当CPU让IO口输出1的时候,上面的NPN三极管导通,下面的PNP三极管截止,输出1给外部电路。两个三极管轮流工作,一推一拉的,也叫推拉式输出,既可以提高电路的负载能力,又可以提高开关速度,具体使为什么,等我学好模电以后我再回来解释。
最后,复用推挽和复用开漏输出,也就是在这个IO口作为第二功能的IO口复用的时候才设置的模式,例如串口,就以stm32f103c8t6来讲,PA9,PA10既是普通的IO口,也是串口1的RX和TX口,作串口的发送和接收口就是它们的复用功能,这个时候呢,就可以设置为复用推挽或者复用开漏了。
完结,撒花!