最近有朋友在使用STM32主控设计低功耗设备。他知道我做过很多类似的超低功耗项目,所以他问我咨询了一些问题,包括I/O口的几种工作模式。今天我就把这些工作模式详细的总结一下,让大家在以后的设计中知道它们是什么以及为什么。先说GPIO。在说这8种工作模式之前,先说一下GPIO的概念——通用输入输出(GeneralPurposeInputOutput,简称GPIO),意思是芯片引脚可以通过它们输出高低电平,也可以通过它们.输入并读取该引脚的电压和电平状态。我将围绕下图分析介绍以下8种工作模式。看完这张图,基本上就可以完全理解STM32的GPIO了。我希望你仔细看看。四种不同的输出模式推挽输出:在这种模式下,该引脚可以输出高电平和低电平,可以连接和驱动数字设备。对于push-pull,有些朋友可能不太清楚是什么意思。其实很简单,就是电路中以推挽的方式存在两个参数相同的NPN、PNP三极管或NMOS、PMOS三极管,各自负责正负半周波形放大。任务。两个对称管一次只导通一个,所以损耗小,效率高,既可以提高电路的带载能力,又可以提高开关速度。电路如下图所示,大家可以去IO内部图对比一下找到。开漏输出:该模式下该引脚相当于接上图中NMOS的漏极,PMOS截止,不存在。此时该引脚只能输出低电平,不能输出高电平。需要在引脚上加一个上拉电阻来拉高电平。这时候肯定有小伙伴疑惑了,这东西还不如推拉输出好用,错了!开漏输出有一些特殊的优点,例如:1.可以用来连接与主控电平不匹配的器件。将上拉电阻的上拉端接到对方电平即可;2、利用外部电路的驱动能力,降低内部电流,内部只需要很小的栅极驱动电流。缺点是上升沿会有延迟,因为有上拉电阻,可以看我上一篇关于电平匹配的文章,里面有介绍。复用推挽输出,复用开漏输出:顾名思义,这种模式就是复用管脚做其他功能,不是简单的GPIO。我们常用的UART、SPI等输出引脚都是复用推挽输出,我们常用的I2C是复用开漏输出。这时候大家应该知道为什么我们在使用I2C的时候需要上拉电阻了。好吧。这里给大家埋下伏笔——用I2C为什么要开漏?知道的朋友可以在留言区回复,后面有机会分析I2C的时候会详细讲解。四种不同的输入方式浮空输入:这种输入方式一般用于检测外部高低电平状态,比如按键。如下图IO内部图,输入悬空时上拉下拉电阻不接,管脚电平状态不确定。如果管脚悬空,这种模式下读取的数据是没有意义的。上拉下拉输入:基本上大家看名字就知道这个模式是什么了。上图中如果接上图红圈内的电阻就是上拉输入,下图红圈内的电阻接下拉输入。在上一段中,我说了浮动输入模式用于按键输入检测。如果采用上拉和下拉方式,会更简单,而且可以省去外接上拉和下拉电阻,节省工程成本。模拟输入:这种模式我们也很常用,就是把引脚设置为STM32内部ADC的模拟信号输入。值得注意的是这个模式并不是所有的IO都可以使用,需要设置一个带ADC的IO口。补充说明一下IO管脚内部的两个保护二极管。很久以前看到有人说是用来夹紧的。后来参加ST的seminar的时候问了官方。官方回答说不是用来夹紧的。它用于ESD保护。当该引脚用作ADC输入时,必须保证输入的模拟信号不超过3.6V,不允许超过5V。上面说了芯片管脚内部有二极管保护,但是我建议大家在设计的时候,如果管脚引出板子的话,应该加TVS二极管加强保护,因为管脚很容易受静电影响,板外连接时的其他外力。因素损害。比如下载接口,当我空间够用的时候,我会放一个SOT-23的TVS二极管做保护。综上所述,你会发现我今天说的是硬件层面的,而不是软件层面的具体设置。其实如果从硬件层面理解这些模式,软件上就简单了,按照datasheet上的说明配置即可。最后说一下目前的情况。临近年底,我的工作很忙。真的很抱歉,我之前提到的项目都被跳过了。不过你放心,忙碌之后我会抽出更多的时间投入到开源项目中。2020年我给自己定下的一个目标就是做更多的开源项目分享给大家。