这个答案不是 STM32 特定的,而是基于多年的经验和许多这样的讨论。其他人可以对此进行补充——它涵盖了要点(我认为),但可能并不完整。
看到有人提出这些简单但基本的问题并表现出对这些“小事”如何在现实生活中“帮派”的认识,令人鼓舞。
即“如果微型没有正确初始化......”实际上是“......当微型没有正确初始化......”:-) - 很明显你意识到了这一点。
所以:
对于那些真正热衷于获得明确结果的人来说,使用外部上拉或下拉是必不可少的。这是这里最大的必须做的事情。其余的都是奖金。ie 使用内部 pullxxx 设置输入是一种折衷方案,几乎总是有效的。
但如果“几乎总是”对您的设计来说不够好,那么您需要外部拉动 xxxs。
上拉或下拉似乎没有压倒性更好的结果。IC之间可能会有所不同,但可以从数据表中确定。在所有条件相同(可能是这样)的情况下,我倾向于下拉,因为设备外部电路的泄漏电流可能会降低 - 但在保形涂层 PCB 和/或良性环境中,这可能会很小。
如果您真的关心,您可能希望查看启动操作。例如,上拉引脚将在某个阶段从低电平开始并变为高电平。下拉引脚可能会始终保持低电平。这可能并不重要,但为了完整性而提及。
ESD 敏感性将因设备而异,很可能是对称的,并且平均而言,在许多处理器上可能更倾向于下拉,因为如果不对称,驱动器往往会下沉而不是源。如果您非常关心 ESD,那么您可能希望使用带下拉的低输出 - 因为低阻抗路径将(可能)提供更好的 ESD 保护。但是,如果您非常关心 ESD,您将希望以其他方式针对它进行设计,而不是将 IC 内保护作为主要保护。
关于问题 3 - 外部 pullxxxs 是可取的,但使用处于适当设计的极限高端的值似乎是安全的,然后在需要时并行使用内部 xxx。但是,由于内部拉力 xxxs 通常具有 2:1 的 R 有效,因此您可以仅使用外部来获得最大的 R 和最小的电流。您当然要避免的是外部上拉和内部下拉或反之亦然——但这不太可能成为问题。
当我说“……限制适当设计的高端……”时,我的意思是,而不是“超出限制……”。即,引脚将具有指定的电阻值,允许满足最坏情况下的 Vin 规范。较大的电阻器可能会在电阻器中消耗较少的电流,但可能会开始非常轻微地打开内部开关。即,可能存在 Rpulldown_current 与最低总电流的折衷,因为内部驱动器开始看到泄漏电流(这将非常小),从而增加了流向驱动器的电流并非常轻微地窃窃私语。
如果您使用例如下拉,您可能会发现将引脚设置为输出并将其驱动为低电平会降低功耗,但这是一个可以在适当时候决定的选项。
几乎是旁白 - 切勿让保护二极管在操作期间的任何阶段处理“任何重要电流”。允许他们这样做可能会导致完全莫名其妙的处理器动作。电流越小,出错的可能性就越低——而且当它们出错时就越难找到它。