m0单片机io口_混子笔记之回顾单片机IO口工作模式

b3d050407e18d21a284c17c02bd23e0d.gifIO口模式回顾 b3d050407e18d21a284c17c02bd23e0d.gif

a258d43703ced6c7fe10ec513178f0ff.gif

点滴分享 fbbcae0c23e7229c48028a77962c91b3.pngA int *p, i;     B int i, *p=i;      C int i, *p;   D int *p=&i, i;(答案解析在文末!先做做看看) fbbcae0c23e7229c48028a77962c91b3.png 38aaa56b38238b3ae24240942ea1ed77.gif

4cf5efb7ce2f1e504d20fcdc98117956.png

今天回顾记录一下单片机的IO口,这里说的是GPIO,General Purpose Input Output  (GPIO)。通用型输入输出端口,简称GPIO口,是单片机与其他外围设备和电路进行信息交换和控制的桥梁。

(下面以stm32单片机为例)IO口模式主要有:模拟输入、浮空输入、上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出和复用推挽输出。

1、模拟输入

GPIOModeAIN模拟输入,即关闭施密特触发器,将电压信号传送到片上外设模块(不接上下拉电阻)。应用ADC模拟输入,或者低功耗下省电。

2、浮空输入

GPIOModeIN_FLOATING浮空输入。浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。可以做按键识别。就是不接上拉,也不接下拉,外部电路是什么状态,就是什么状态,具有不确定性。

3、上拉输入

GPIOModeIPU上拉输入。IO内部上拉电阻输入,一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强。当GPIO引脚无输入时,上拉输入在默认状态下为高电平。

4、下拉输入

GPIOModeIPD下拉输入,IO内部下拉电阻输入,同上对比理解。当GPIO引脚无输入时,下拉输入在默认状态下为低电平。电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流,增加高电平输出时的驱动能力。

5、开漏输出

GPIOModeOut_OD开漏输出,输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对较强,一般20mA以内。IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能。(这里也就是为什么51单片机P0口为啥要接上拉电阻的原因,P0是开漏输出结构,不能输出高电平)

6、推挽输出

GPIOModeOut_PP推挽输出,可以输出高、低电平,连接数字器件。推挽输出是因为它的输出结构类似于推挽结构,它是一种由两个三极管(或者其他MOS管等)分别受到一个信号的控制,这信号的互补的,就是说只有一个三极管导通,一个三极管导通的时候另一个就要截止。推挽输出可以输出高电平,也可以输出低电平。当锁存器为“1”时候可以持续提供强上拉,这种输出结构可以驱动需要很大电流的器件。

7、复用开漏

GPIOModeAF_OD复用开漏输出,可以理解为GPIO口被用作第二功能时的配置情况,即并非作为通用IO口使用。片内外设功能(TX1,MOSI,MISO.SCK.SS(SPI))

8、复用推挽

GPIOModeAF_PP复用推挽输出,片内外设功能(I2C的SCL,SDA)

总结

引用一下别人说得不错的话

浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了.  

开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能实现了.  

推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻. ”

4c7b0e01c471d5650785c2ddabba7df8.png

f50d3efee4cd012f8b77e8c144bf0359.png

解析:本题目主要考察了指针变量定义的相关问题 A选项定义了一个指向整型的变量的地址p和一个整型的变量i。这种定义是可以的。B选项定义了一个整型的变量i和一个指向整型的变量的地址p,且变量p的值初始化为变量i,p是多少要看i具体分配的空间所占用的地址。这种定义是可以的。C选项定义了一个整型的变量i和一个指向整型的变量的地址p。这种定义是可以的。D选项定义了一个指向整型的变量的地址p,且变量p的值初始化为变量i的地址和一个整型的变量i,但问题是变量i在*p=&i之后被定义,此时会编译器会报出一个error:‘i’undeclared,需要把i的定义放到*p=&i之前,题目中的这种定义是不可以的。 以上若有错误,望各路大神指出,小弟我将感激不尽! 部分来源于网络,未商用,用于技术知识传播! d55c5e27aeb37178ef7a44101deea572.png 827b060a0e139586b5465d6472c3d0ec.png扫码关注我一下呗-一个“不正经”的混子- e942de4739807ac85fd26cda0e681174.png

点我留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值