原创 灵活使用单片机GPIO各种输入输出模式

2021-6-29 16:03 3718 21 2 分类: MCU/ 嵌入式 文集: 电路分析设计

单片机的GPIO一般会有:

输入 输出 模式,输入模式有输入上拉,下拉或高阻

输出模式有推挽,开漏。

51单片机还有准双向模式。 

输入模式 上拉,下拉都比较好理解。比如按键输入时,将口线设置为输入上拉,这样就按键可以不上拉。输入上拉模式一般上拉电流很小,通常情况为数百微安,如果上拉电流不合适,外围电路就得单独考虑上拉问题。

输出模式常用推挽输出,当输出高电平时,可以源出电流,输出低电平时,可以源入电流。

比如点亮一个LED灯,使用低电平点亮,使用推挽输出,如果LED灯被上拉到5V3.3V系统上,为高时,LED有可能仍然会亮。只是比为低时亮度小一点。这种情况下,如果将输出改为ODLED就可以正常亮灭。

另一个例子,GPIO模拟I²C总线。SCL线可以设置为推挽输出,没问题。但SDA是双向的,读取数据时或读ACK时,需要改变端口方向。比如SDA输出为PP高,从器件异步ACK拉低,端口会输出大电流。如果SDA线改成 OD输出,则无此问题。当需要输入时,不需要改变端口方向,只需要将端口输出置高即可。总线上不会有异常电流。

51单片机的准双向模式就更神奇了,可以与OD输出类比,但不需要外接上拉电阻(加了也无妨)。

输出为高时,在开始的2CPU时钟为强上拉,保证动态特性,随后变成弱上拉。此时如果外部输入为高,则保持弱上拉,可以读入稳定的高。如果外部输入为低,端口变成极弱上拉,能读入低。当输出为低的时候,强下拉到低。需要注意的是,外部输入的电流不要过大,不然端口电流过大,可能会latch up

作者: southcreek, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-408807.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

curton 2021-6-30 08:13

学习了
相关推荐阅读
southcreek 2024-12-04 16:32
PWM输出隔离DAC设计
这个设计的目标是产生一个隔离的DAC输出。12V供电,产生0~5V的输出。达到10000约13.3位的分辨率。要求DAC输出在改变设置后1S内能稳定。需要能长时间保持稳定和低噪声。能达到要求的DAC只...
southcreek 2024-12-04 15:23
一个基于HAL库的串口控制框架
将串口接收配置为 DMA方式,DMA 使用 DMA_CIRCULAR 模式工作。串口接收的数据实际上构成循环队列。 定义一个结构Comm_typedef 结构体中包含指向接收到的第一字节位置chrc...
southcreek 2024-07-08 11:38
接地不良导致的故障分析
这个电路的控制板需要连接显示板和识别板。5V 供电和串行控制连到显示板,显示板再连接到识别板。识别板上电位器使用一个LDO供电,将输入的5V转成3.3V。当电位器滑动时,输出电压在0~3.3V之间。...
southcreek 2024-06-26 09:15
【EMC整改】带辅助加热的滴速控制器辐射抗扰整改
这个滴速式的输液泵使用一个红外线发射和接收装置,当有液滴通过时,会扰动检测信号,识别这个扰动检测到液滴滴下,获得滴壶中的液滴速度,调整阀门大小,实现输液速度控制。控制器还配备一根加热条,用于输液时对药...
southcreek 2024-06-06 08:52
QT 使用QSettings 操作ini文件配合表格操作
这个项目可以演示 使用QSetting 读取或写入 ini文件。并使用tablewidget 显示。Ini文件的格式如下,这个文件可以事先编写。也可以在程序中生成。有一个大类,下面有一个小类使用等号设...
southcreek 2024-05-27 16:18
差分输入ADC的单端到差分转换器驱动设计
单端信号需要转换成差分信号,以便使用ADC进行转换。这个就所谓的ADC驱动电路。需要的结果为Vp = Vcm + Vi/2Vn = Vcm – Vi/2这样 Vp – Vn = Vi使用简单的加法器和...
我要评论
1
21
关闭 站长推荐上一条 /2 下一条