今天回顾记录一下单片机的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)
总结
解析:本题目主要考察了指针变量定义的相关问题 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之前,题目中的这种定义是不可以的。 以上若有错误,望各路大神指出,小弟我将感激不尽! 部分来源于网络,未商用,用于技术知识传播! 扫码关注我一下呗-一个“不正经”的混子-引用一下别人说得不错的话
“浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了.
开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能实现了.
推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻. ”
点我留言