实际的应用系统中,由于考虑未来的功能扩展或其它原因,经常会有未使用的 I/O。如何处理这些 I/O,关系应用系统的消耗电流甚至系统可靠性。因此,正确处理未使用的 I/O 端口,对于基于MCU的控制系统,是非常必要的。
对于双向的 I/O 端口,通常 MCU 的手册会推荐以下两种处理方法:
方法一:将端口设置为输出,并保持开路( open);
方法二:将端口设置为输入,并通过上拉电阻和电源连接;
对于方法二,之所以通过上拉电阻和电源连接,其目的是为了将输入端口固定到高电平,以避免管脚悬空时可能在管脚上出现中间电压,从而避免贯通电流的发生。
那么,其中的上拉电阻是否可以省略呢?如果单纯从固定管脚到高电平这个作用看,似乎是可以省略的。但是,从系统的安全可靠性角度,这个上拉电阻是不可以省略的。究其原因,需要从 I/O 端口的内部组成来探讨。I/O 端口内部电路的简化示意图,如下图右侧图所示:
当端口通过方向寄存器设置为输入时,端口的N管和P管都处于截止状态,通过上拉电阻将端口的管脚固定到高电平。通常情况下,执行初始化程序设定方向寄存器后,方向寄存器中的数据不会改变。但是,如果工作环境种存在强噪声,那么方向寄存器中的数据有可能会被意外地篡改。
如果端口的方向因电噪声从输入变更为输出,而且此时端口数据缓冲器中的数据恰好时0,那么端口的N管导通,电流经上拉电阻和N管流入参考地,如图中蓝色的虚线所示。所以,如果省略了这个上拉电阻,会产生大电流,增加系统功耗,甚至造成端口的损坏。
如果有多个未使用端口,为了节约成本,是否可以如下图所示,共用同一个上拉电阻呢?