STM32的GPIO工作模式

来源:互联网 发布:linux部署php网站 编辑:程序博客网 时间:2024/05/27 16:42

最近一直在学习STM32,对于技术菜鸟,我为了方便应用,简单整理了下它的GPIO的八种工作模式的使用技巧。

当然,首先简单的分析下各种模式吧。(用我理解的方式来讲,不对的地方请多指教)

首先给一张原理图(出自STM32中文参考手册v10.0)。

如图所示,图的左边是I/O口,右边是连接芯片内部。

图的上半部分是输入模式。我们从右往左看,发现有有两个开关和电阻,以及VDD和VSS。这就是所谓的上拉(GPIO_Mode_IPU)和下拉(GPIO_Mode_IPD)输入模式的区别之处,上面开关接通就是上拉,下面开关接通就是下拉。上拉和下拉的实际应用中的区别是什么呢?分析电路我们明显可以看出,当上面开关接通时,也就是所谓的上拉输入模式,这是VDD给电阻供电,也就是I/O引脚此时是高电平的;同理下拉输入模式就是引脚空闲状态是低电平的。这我们就能很好的应用了,当你需要你做的控制系统,平时是高电平就上拉呗,很好理解吧!当然你还要知道,这不是上拉和下拉的全部原理,因为你看电路图,输入还经过肖特基触发器(也有地方说法是施密特触发器),其实,就是把电压的值转化成0、1二进制值,并存在输入数据寄存器中,然后就可以读取数值啦。至于怎么控制那两个开关呢?当然是通过寄存器啦,CRL、CRH就是控制这两个开关的,进行选择这两种模式的。

再看看浮空输入模式(GPIO_Mode_IN_FLOWING),浮空输入模式从图中可以看到,是直接接到触发器的,它电平完全由外界接入的电平决定,这就导致它的电平是不确定的,空闲状态下大概是1点几伏。它的特性就是输入的阻抗比较大。

而模拟输入模式(GPIO_Mode_AIN),从图可知,它是直接连接到I/O口上的,没有接任何东西,这就是它的独特之处,一来是直接读取连接的电平值,二来是功耗低。

这些原理各个地方解释都不同,大家参考就行,我觉得重要的是应用,你太在意原理固然没错,但是对初学者来说,会用就是满足,等以后摸熟了STM32再回头看原理,就是小菜一碟了。

上拉、下拉你自己按照你设计的需要,空闲时要求高电平就上拉,否则就下拉。浮空一般是作为按键、I2C、USART的接收端。模拟输入一般是ADC,低功耗时。

图的下半部分是输出模式。我们可以看到输出控制后面接着两个对称的MOS管,一个P-MOS,一个N-MOS。这样连接电路,就是推挽工作模式,输出高电平时,就是N-MOS导通;输出低电平时,就是P-MOS导通。两个管子轮流导通,前者是负责灌电流,后者负责拉电流,使其浮在能力和开关速度都比普通的方式有很大提高。

在开漏输出模式时,如果输出低电平,则使N-MOS管导通,是其输出接地;若输出为1,则既不输出高电平也不输出低电平,为高阻态。为了正常使用,必须外部接一个上拉电阻。它有“线与”特性,即,多个开漏模式引脚相连接到一起时,只有当所有引脚都是输出高阻态,才由上拉电阻提供高电平,此高电平为外部上拉电阻所接的电源的电压。开漏输出模式一定要接上拉电阻,不然不能正常工作,这是设计时必须要注意的。

普通推挽输出(GPIO_Mode_Out_PP)模式,一般应用在输出电平在0-3.3伏的时候。普通开漏输出(GPIO_Mode_Out_OD)应用在电平不匹配的时候。复用推挽输出(GPIO_Mode_AF_PP)模式一般用在串口输出,如I2C的SCL、SDA。复用开漏输出(GPIO_Mode_AF_OD)模式用在需要线与的时候,如IC、SMBUS、TX1、MOSI、MISO、SCK、SS。

好吧,大致就是这么多吧,我觉得当你要用到的时候,你直接就看是上面的那种就好了,然后直接用,不用再去看原理,分析到底要用什么,直接这样用,对初学者来说应该很简单吧。

原创粉丝点击