原创 stm32_IO口的基本操作

2016-2-9 19:26 1204 16 17 分类: MCU/ 嵌入式

学stm32的过程中,掌握IO口是很重要的基础。这篇博文简单介绍一下stm32的IO口。

一、IO口的基本操作

1IO口模式:

GPIO_Mode_IN输入模式,输入3.3V或0V 的高低电平。例如按键程序就是配置称输入模式

GPIO_Mode_OUT输出模式,输出3.3V或0V 的高低电平。例如LED闪烁程序配置成输出模式。

GPIO_Mode_AF 复用工作模式。例如I2CSPIUSARTGPIO就必须配成AF模式。

 

GPIO_Mode_AN 模拟输入模式。例如ADC程序必须配置成AN模拟量输入模式。

2)当配置成输出模式或者AF模式时,输出类型有两种:

GPIO_OType_PP 推挽输出,即可输出高电平,也可以输出低电平。

 

GPIO_Otype_OD开漏输出,只能输出低电平。

3)无论是输入还是输出,都可以配置上下拉类型:

GPIO_PuPd_NOPULL 不上下拉

GPIO_PuPd_UP 上拉模式

 

GPIO_PuPd_DOWN 下拉模式

4)下面具体看下什么是推挽输出,什么是开漏输出,以及它们的特点。

推挽输出GPIO_OType_PP 特点:

 

既可输出高电平,也可以输出低电平。如下图:

20160209185449308.jpg

当我们将GPIO配置成低电平的,Q1截止,Q2导通,S2输出低电平;

当我们将GPIO配置成高电平的,Q1导通,Q2截止,S2输出高电平;

 

其实黑色区域是在单片机的内部,因此它的电流是单片机的电流,所以说它驱动能力是较弱的。

5)开漏输出GPIO_OType_PP的特点:只能输出低电平,不能输出高电平。

其优点在于:大电流驱动能力;电平匹配;可以实现“线与”功能。

逻辑框图如下:

20160209185636317.jpg

当往IO0时:S1为低电平,Q1截止,因此Q2的基极就是VCC为高,Q2导通,S2输出被拉到GND,因此输出低电平。

当往IO1 时,S2为高电平,Q1导通,因此Q2的基极被拉到GND为低,Q2截止,S2输出是不确定的。

 

因此开漏输出只能输出低电平。S2直接从Q2的集电极引出,所以呀开漏输出也成为集电极开漏输出。

其实你也可以开漏输出高电平的。那么如何让开漏输出输高电平呢?其实很简单。(这个过渡段好苍白。。。)

20160209191949483.jpg

只要在开漏的输出加上一个上拉电阻,就可以输出高电平了(VCC1是单片机内部电源,VCC2是外部电源),流过R3的电流是由外部电源提供,所以说这种电流可以提供较大的电流。

 

例如:VCC13.3V(开发板),VCC25vS2就可以输出OV5V,从而实现了电平转换。也就是说开漏输出有电平转换的功能。

开漏输出的应用:线与功能

20160209192118215.jpg

只有当S1S3S5输入全为高电平时输出才是高电平,当S1S3S5,中有任意一个为低电平是输出就为低电平。这就是所谓的线与功能。

 

例如I2C总线 各器件的SDASCL都是线“与”关系。

(6)IO口上下拉 作用:

将不确定的信号通过一个电阻,嵌位在确定电平;

为开漏型电路输出电流通道;

在一定程度上提高系统的抗干扰;

 

例如串口RS485电路的方向控制。RS485电路是半双工的收发不能同时进行。

 

文章评论1条评论)

登录后参与讨论

用户1818348 2016-3-5 08:14

多谢楼主!
相关推荐阅读
用户1868903 2016-04-24 11:12
Cadence 画原理图
    Cadence 里面很多库,但是用多了就会知道,很多芯片库都是没有的,这个时候就需要自己画原理图了。很多工程师为了更快捷的画原理图,都会建立自己的原理图库。    自己建立一个平时用得...
用户1868903 2016-04-03 18:54
Arduino模拟串口
      现在很多人喜欢  Arduino 因为简单好用方便。虽然Arduino的串口只有一个,但是不担心,因为还有其他的IO口可以模拟串口,这篇博文里咱就分享一个用其他IO口模拟串口的exam...
用户1868903 2016-03-27 22:20
学习心得
 最近的一个项目里涉及到文件的打开...
用户1868903 2016-03-10 14:11
学习心得
最近在做一个项目,里面要用到stm32的HTTP网页服务器相关的知识,于是开始学习各种网络知识,都是以前没接触过的。看了一大堆协议,绕得我晚上都睡不踏实了,, 囧。。。网上的资源丰富但是同时也很杂。...
用户1868903 2016-03-04 13:47
电子时钟的设计(三)
一个蛮简单的要用三篇博文也是够够的。主要是我把程序贴得太仔细了。。囧。。应该详略得当,,,好吧。就最后cut掉一点了。。继上面的电子时钟的设计(二)了。 /**********************...
用户1868903 2016-03-04 13:39
电子时钟的设计(二)
上接电子时钟的设计(一)。由于篇幅和板式的限制,将.h和.c 合并在同一个文件,便于大家查看。这里再贴上 模式选择函数和秒表函数。 /*********************************...
我要评论
1
16
关闭 站长推荐上一条 /2 下一条