打印
[其他ST产品]

认识STM32的 GPIO口

[复制链接]
楼主: qsrg51
手机看帖
扫描二维码
随时随地手机跟帖
21
qsrg51|  楼主 | 2024-1-31 15:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
注意这个上下拉电阻,是已经硬件连接在IO口上了,无论GPIO是输入模式还是输出模式它都存在,只是输出模式的时候会配置为浮空,不需要使用到它。

使用特权

评论回复
22
qsrg51|  楼主 | 2024-1-31 15:51 | 只看该作者
3.施密特触发器
3.经过上下拉电阻电路后就是一个施密特触发器,这个器件在编程中不需要我们来进行操作,可以发现的是,第一种模拟输入模式并没有经过它,而是直接走到了后面,这也从侧面说明了它在此处的作用就是将模拟量的电信号,转化成0与1的数字量,高电平经过它就会输出1,低电平经过它就会输出0.

使用特权

评论回复
23
qsrg51|  楼主 | 2024-1-31 15:52 | 只看该作者
4.输入数据寄存器(内核直接通过它读取IO口高低电平)
4.最后是输入数据寄存器,它的作用就是接收经过施密特触发器转换后的数字量,注意只是通用输入模式时才有用,复用模式的数字量信号并没有经过它,我们在后面通过通用输入模式获取IO的电平状态时就需要使用到这个寄存器。有关输入部分的介绍就先到这,后面设计到相关编程的时候再来细说。

使用特权

评论回复
24
qsrg51|  楼主 | 2024-1-31 15:53 | 只看该作者
有关输入部分的介绍就先到这,后面设计到相关编程的时候再来细说。

使用特权

评论回复
25
qsrg51|  楼主 | 2024-1-31 15:54 | 只看该作者
输出框图解析
关于输出框图的解析,同样我们还是将官方的图纸简化一下,将其中的输出部分单独拿出来。
如下图所示,跟上面的输入模式其实差不了太多,总的来说也是三种模式1.包含内核直接输出以及间接输出的通用输出模式;2.输出经过其他片上外设处理加工后再输出的复用输出模式;3.输出经过DAC的模拟输出模式。

使用特权

评论回复
26
qsrg51|  楼主 | 2024-1-31 15:54 | 只看该作者
输出的三种模式
1.通用输出模式:就是直接使用内核控制GPIO输出高低电平进行控制,不要经过其他任何片内外设的加工,最典型的就是对应LED灯的控制。
2.复用输出模式:复用输出模式与上面的复用输入模式一样,就是内核的数据输出以后,需要经过片上外设进行特殊的加工,将数据封装、定义、打包然后再将这些包数据传输给片外外设。一般外设有SPI、I2C、UART这类协议需求或者需要使用其他片上外设的时候就需要使用复用输出模式。
3.模拟输出模式:模拟输出模式与上面的模拟输入模式一样,当需要直接使用IO口输出模拟量时,由于内核是数字量,需要经过DAC(数字转模拟)的转换后,再通过GPIO口输出给外界,此模式也是DAC专用,其他的时候用不上。

使用特权

评论回复
27
qsrg51|  楼主 | 2024-1-31 15:54 | 只看该作者
GPIO输出时内部器件及其作用
关于输出的整个框图,我们还是从右向左来看,首先前面的保护二极管以及上下拉电阻的作用还是与输入模式一样,我们就不再解释了,经过这个部分后,我们来看看下图这个红框内电路的作用。

使用特权

评论回复
28
qsrg51|  楼主 | 2024-1-31 15:55 | 只看该作者
1.输出控制电路(可编程控制)
我们可以看见,通用输出以及复用输出都需要经过红色框的电路,唯独模拟输出不需要经过,看了上面的输入部分的框图,大家是不是找到了一丝共性,输入部分是模拟输入不经过施密特触发器,通用输入以及复用输入需要经过施密特触发器;这里红框的电路正好是施密特触发器的逆电路,作用是将内核已经片上外设的数字量信号0与1转行成高低电平,不同点在于,此处的红框电路需要我们在程序上进行控制,在红框右下方写着推挽、开漏以及静止三种状态,但实际编程操作时只有两种状态可以选择,一种是推挽模式,一种是开漏模式有关这两种模式的具体分析,这里给大家贴两个链接,感兴趣的可以去了解一下,不感兴趣只需要有下面这印象就可以了,
推挽模式:红框内的PMOS与NMOS都可以正常使用,也就是说不需要外接什么电路就可以实现高低电平的输出;
开漏模式:都漏了嘛,可以片面的理解为此模式不依靠外部上拉电路的话,就没法输出高电平,只能输出低电平,实际上是PMOS被屏蔽了,没法输出高电平,在实际使用的过程中,只有同一个IO口既要做输入又要做输出,且外部有上拉电阻时才使用此模式,不然的话,多数都是使用推挽模式。
推挽模式时,P-MOS与N-MOS都是可以使用的,输出控制器根据ODR输出的值控制对应的管子导通和关闭已实现高低电平的输出。

使用特权

评论回复
29
qsrg51|  楼主 | 2024-1-31 15:55 | 只看该作者
而配置为开漏输出时:
此时P-MOS被屏蔽,无法使用,只有一个N-MOS可以被控制,当N-MOS导通时,该GPIO口被拉低,输出低电平;当N-MOS也不导通时,该GPIO不做输出功能,此时可以用来获取外界电路的高低电平。

使用特权

评论回复
30
qsrg51|  楼主 | 2024-1-31 15:55 | 只看该作者

使用特权

评论回复
31
qsrg51|  楼主 | 2024-1-31 15:55 | 只看该作者
2.通用输出寄存器(内核直接输出高低电平到它)
最后就是下图的输出数据寄存器以及置位/复位寄存器了,关于这两个寄存器,后面一般使用的是内核直接输出数据到输出数据寄存器来实现高低电平,内核经过置位/复位寄存器后再输出到输出数据寄存器的间接输出很少使用。

使用特权

评论回复
32
qsrg51|  楼主 | 2024-1-31 15:56 | 只看该作者
小结
至此关于GPIO的结构以及输入输出模式的介绍就结束了,我们来总结一下,关于GPIO的输入输出,
GPIO的输入模式(三种):通用、复用、模拟;
GPIO的输出模式(也是三种):通用、复用、模拟;
其中输入输出是模拟量的时候使用的就是模拟输入模式以及模拟输出模式
输入输出需要使用到片上外设时就需要使用复用输入模式以及复用输出模式
内核通过GPIO直接控制GPIO进行输入以及输出时就是用通用输入以及通用输出模式。
然后是上下拉,一般不用,都是采取外部电路来实现的,配置过程中一般采用浮空;
再就是输出中的推挽以及开漏模式,推挽是可以不借助外部电路就输出高低电平,开漏需要借助外部上拉电路才可以实现,开漏模式一般用于IO口既要作为输入又要作为输出时,例如I2C的数据线,单总线的DS18B20、DHT11等等。

使用特权

评论回复
33
qsrg51|  楼主 | 2024-1-31 15:56 | 只看该作者
举例练习
上面介绍了这么多,我们来几个实际的例子来看一下:
首先是常见的LED电路,很明显,为了驱动LED小灯,我们需要选用输出模式,此电路中没有上拉电路,为了控制小灯的亮灭,我们需要使用推挽输出模式,由于整个过程只需要通过内核控制GPIO即可实现,所以最终PA6与PA7的模式选择就是通用推挽输出模式,且输出低电平小灯亮,输出高电平小灯灭。

使用特权

评论回复
34
qsrg51|  楼主 | 2024-1-31 15:56 | 只看该作者
然后是按键输入电路,如下图所示:首先肯定要配置为通用输入模式,由于有外部上拉电路,空闲状态是高电平,所以不需要配置上下拉。

使用特权

评论回复
35
qsrg51|  楼主 | 2024-1-31 15:57 | 只看该作者
再看一个特例:下图中就是没有外部上拉的按键输入,首先通用输入模式,由于没有外部上拉,我们需要保证空闲状态可控,且能够有效检测按下的低电平,这时候就需要额外配置一步上拉模式。

使用特权

评论回复
36
qsrg51|  楼主 | 2024-1-31 15:57 | 只看该作者
另外一种就是使用到IIC或者SPI等片上外设的时候就需要使用到复用模式。

使用特权

评论回复
37
qsrg51|  楼主 | 2024-1-31 15:58 | 只看该作者
而当GPIO使用到下面框图里面的ADC、DAC功能时我们就需要配置为模拟模式。

使用特权

评论回复
38
qsrg51|  楼主 | 2024-1-31 15:59 | 只看该作者
总结
本文主要是介绍了STM32的GPIO是什么,有什么用,以及怎么用,看完上面的这些,我们再回头看一眼官方的GPIO功能描述,他一共有八种模式,其实也就是我们上面提到的通用、复用、模拟与输入输出,以及推挽开漏,上拉下拉的组合搭配。

使用特权

评论回复
39
qsrg51|  楼主 | 2024-1-31 15:59 | 只看该作者

使用特权

评论回复
40
qsrg51|  楼主 | 2024-1-31 15:59 | 只看该作者
本文重点
1.理解STM32的GPIO命名规则,能够通过对应芯片手册查询对应的GPIO口数量;
2.熟悉STM32的输入输出框图,掌握各种模式的特征,清楚什么样的外设要使用什么样的模式来进行操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则