首页 > 其他分享 >GPIO三种输出状态:推挽输出 / 开漏输出 / 高阻态

GPIO三种输出状态:推挽输出 / 开漏输出 / 高阻态

时间:2024-05-13 09:34:43浏览次数:16  
标签:输出 Q2 推挽 MOS 开漏 GPIO

一、GPIO基本的输出方式:

  GPIO有三种状态:高电平,低电平,浮空/高阻态

  设计时发现芯片的管脚描述中:有的支持推挽输出,有的支持开漏输出。就是GPIO的三种状态的组合

 二、推挽输出(push-pull):

描述GPIO输出高低电平时,电流的一个动作。要么推出去,要么挽回来。

(1)推出去:上端的MOS管打开,下端的MOS管关闭,GPIO输出高电平,电流走向如图

 

(2)挽回来:上端的MOS管关闭,下端的MOS管打开,GPIO输出低电平,给外部的MOS管栅极放电

 

 三、开漏输出(OD,Open Drain):

  选择下面这两种状态组合时。发现Q1始终是关闭的,故视为端的MOS管Q1不存在,那么下端的Q2的漏极处于开路模式,所以叫开漏模式

 

(1)开漏模式可改变高电平的电压:

如下图,如果使用GPIO去做外部芯片的使能脚(GPIO的上拉电平是5V),假设外部芯片的使能脚的电压只能承受3.3V以内。使用推挽模式进行控制,那么Q1打开,Q2关闭,外部使能脚要承受5V电压,就不可行

 

① 如果使用开漏模式去输出,外部接个3.3V的上拉,就可以实现

1) 当Q2打开时,EN被拉到低电平

2) 当Q2关闭时,Q2的漏极是浮空的状态,即高阻态(无限大的电阻),则EN被拉到3.3V

 

 

(2)开漏模式可支持几个GPIO同时控制一个输入:

① 使用推挽输出,会烧毁

 

② 使用开漏输出

 

 

 

四、开集模式(OC):

OC门是针对三极管来说,OD门是针对MOS管来说。现在MOS管用普遍,而且性能要比晶体管要好,所以很多开漏输出电路,和上面讲的推挽输出电路都用MOS管实现。由于使用MOS管的情况较多,很多时候就用"开漏输出"这个词代替了开漏输出和开集输出。

 

 

 

 

标签:输出,Q2,推挽,MOS,开漏,GPIO
From: https://www.cnblogs.com/Lauriee/p/17736890.html

相关文章

  • C语言输出函数介绍
    一,printf()函数  printf()是标准输出函数。printf()函数打印数据指令的指令要与待打印数据的类型匹配。如打印整数时用%d,打印字符时用%c。如果与之不匹配打印的结果会于想要的结果不符。打印使用的如%f,%d,%c被称为转换说明。下列是ANSIC标准常见的转换说明。    转......
  • 通过内存映射的方式向lcd屏幕输出几个圆
    /***************************************************filename:color.c*author:[email protected]*date:2024/05/11*brief:通过内存映射的方式向lcd屏幕输出几个圆*note:None**CopyRight(c)[email protected]......
  • 困扰了一天的flask结合智谱ai langchain流式输出json问题终于解决了
    本次对接的大模型是智谱,首先想到去智谱开放平台找找有没有和langchain结合的文档: 结果还真有,就省去了谷歌的时间,但是智谱的文档只提供了非流式的示例代码,想着先拷过来跑一下再说,结果就是非流式是正常输出的,流式就遇到问题了,不管我咋配置,好像只能在控制台输出流失内容,遂去谷歌......
  • 输出最长的单词
    输入一行字符,输出最长的单词。#include<stdio.h>#include<string.h>#defineN100intLongestVoc(charstr[]);intAlpha(charc);intmain(void){charstr[N];printf("pleaseinputastring:");gets(str);intpos=LongestVoc(str);pri......
  • 调用lcd屏输出德国国旗
    /***************************************************filename:color.c*author:[email protected]*date:2024/05/10*brief:向lcd屏幕输出德国国旗*note:None**CopyRight(c)[email protected]......
  • 利用标准IO获取当前系统时间并输出到文本
    文件IO思路1.调用接口函数获取系统时间2.将结构体返回的成员值存到变量里3.利用sprintf()将存储的整数转换成字符串并放入缓冲区4.将缓冲区中的内容写入文件代码#include<stdio.h>#include<stdlib.h>#include<time.h>#include<string.h>intmain()//(intargc,c......
  • 第27章 使用流进行输入和输出
    1流的概述C++流是读写(输入与输出)逻辑的通用实现,让用户能够用统一的模式读写数据。不管是磁盘或键盘读取数据,还是将输入写入显示器或磁盘,模式都一样用于写入流时,运算符<<被称为流插入运算符,可将其用于写入屏幕、文件等;从流中读取数据时,运算符>>被称为流提取运算符,可将其用于从键......
  • 2024-05-08:用go语言,给定一个由正整数组成的数组 nums, 找出数组中频率最高的元素, 然后
    2024-05-08:用go语言,给定一个由正整数组成的数组nums,找出数组中频率最高的元素,然后计算该元素在数组中出现的总次数。输入:nums=[1,2,2,3,1,4]。输出:4。答案2024-05-08:chatgpt题目来自leetcode3005。大体步骤如下:1.创建一个空的字典cnt用于存储每个元素的出现次数。2......
  • 【GD32】---- 使用GD32调试串口并实现printf打印输出
    1复制工程模板直接复制工程模板里的系统文件和固件库文件到新的工程文件01_USART_Printf2新建keil工程参考上一篇博文:【GD32】----移植工程模板及点灯测试3编写代码3.1创建USART文件创建一个USART.c文件,放于05_UserDriver文件夹中USART.h/********************......
  • blazor中的PageTitle输出keywords和description,自定义组件
    在blazor的PageTitle中不具备输出keywords和description的功能,而如果直接使用<mate>标签,输出中文时会变成乱码,所以我给大家推介下面的代码解君愁:1@*<PageTitle>@Title-@AppTitle</PageTitle>*@2<HeadContent>3@(newMarkupString($"<metaname=\"keywords\"......