首页 > 其他分享 >3-GPIO八大输出模式 推挽输出 与 开漏输出

3-GPIO八大输出模式 推挽输出 与 开漏输出

时间:2024-10-12 21:48:33浏览次数:3  
标签:输出 LED 推挽 MOS 开漏 GPIO RED

推挽输出 与 开漏输出

GPIO有八大输出模式

下图为每个GPIO口的基本结构:

在这里插入图片描述

通过这张图来学习

在这里插入图片描述

最右侧是I/O引脚,是从STM32引脚到GPIO口的导线,与其他芯片进行连接的线。

芯片内部电路所能承受的电压有限,当未知的静电进入GPIO口,大于所能承受的电压,就会被上方的保护二极管导通,将电压引入电源,由电源网络吸收,当波动电压小于VSS(0V)时,下方保护二极管被导通,波动电压被引入GND中吸收。此结构只能抵御一瞬间的电压波动,若较长的高电压导入芯片,会损坏芯片

寄存器 —— 程序与电路之间的"桥梁"

在这里插入图片描述

既能写。也能读。控制单片机,就是控制寄存器。

输出驱动器

在这里插入图片描述

输出控制模块 控制两个MOS ,P_MOS 和 N_MOS,起作用可以简化为两个被控制的开关。

VDD 3.3V高电平 VSS 0V的低电平。

STM的输出模式分为两类:推挽输出 和 开漏输出

在这里插入图片描述

在I/O引脚加一个工作电压为3.3V的小灯泡,另一端接地,则我们可以使用推挽输出模式,此模式下。P-MOS与N-MOS协同工作

当我写下代码

HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);

函数内部对相关寄存器的数据进行了修改,从写入一端直达输出控制模块,导致P-MOS激活,N-MOS关闭

此时VDD与小灯形成通路,小灯亮起。

在这里插入图片描述

当我们写下代码

HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);

函数内部对相关寄存器的数据进行了修改,从写入一端直达输出控制模块,导致P-MOS关闭,N-MOS激活

此时VSS与小灯相连,小灯关闭。
在这里插入图片描述

以上控制P-MOS 和 N-MOS的模式就称为推挽输出,特点:具有一定的电压与电流驱动能力,可以直接驱动一些合适的元件工作。

当小灯泡的工作电压为5V时,推挽输出提供的3.3V电压就达不到要求,无法驱动小灯正常工作。

在这里插入图片描述

此时就是开漏输出的用武之地,

开漏输出模式下,P-MOS一直处于关闭状态,根本不会用到内部电压,只控制N-MOS来控制小灯。显然此时控制小灯无论N-MOS处于何种状态都无法控制,此时需要将GND改为接一个外部电源(5V)来自外部的灌电流即可用N-MOS控制小灯亮灭。

在这里插入图片描述

当我们写下代码

HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);

控制GPIO口输出高电平,则N-MOS断开,整个I/O口处于断路状态,小灯熄灭。

当我们写下代码

HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);

控制GPIO口输出低电平,则N-MOS连接,整个I/O口处于通路状态,小灯亮起。特点:更加灵活。

  • 注意,需要将上方的保护二极管设为5v容忍

在这里插入图片描述

对于输入,不仅可以通过控制寄存器来控制输出控制模块,也可以通过片上外设,如串口模块,I2C模块进行控制。

在这里插入图片描述

根据不同的组合分为了,普通的推挽输出开漏输出,和复杂的 复用推挽输出复用开漏输出

回到第一幅图的上半部分,正常状态下为浮空输入,两个电阻都不会启用。

在这里插入图片描述

类似的,当我们设置上拉输入时,上拉电阻启用

在这里插入图片描述

设置下拉输入时,下拉电阻启用

在这里插入图片描述

电流继续前进,会进入TTL肖特基触发器,其作用是稳定电平

在这里插入图片描述

模拟输入:使用模拟输入读取到I/O引脚的电压值,会用到ADC

对于复用功能输入,接入了列如串口模块等须要数字,输入的片上外设,与输出部分只能有一个控制源不同的是,输入部分的不同分支可以同时读取施密特触发器的输出,就不存在复用上拉输入等模式,而是在片上外设上也使用普通的输入模式即可。

上述就是GPIO的八大输入输出模式

标签:输出,LED,推挽,MOS,开漏,GPIO,RED
From: https://blog.csdn.net/m0_57852920/article/details/142833255

相关文章

  • H7-TOOL的LUA小程序教程第14期:任意波形信号发生器,0-20mA输出和微型数控电源(2024-10-1
    LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需......
  • c++设置windons默认输出音频设备
    c++设置windons默认输出音频设备主要功能是控制默认输出的音频设备进行切换。本文主要教导如何使用c++进行控制代码示例#include<windows.h>#include<mmdeviceapi.h>#include<iostream>#include<functiondiscoverykeys_devpkey.h>#include<vector>#include"......
  • 格式化输出
    有一双精度值d=1.23456789,从键盘输入输出值要求的宽度和小数位数(0<宽度和小叔位数<=10),要求按该输出格式要求输出d。如:输入:8(输出值要求的宽度)4(小数位数),要求输出:1.2346(数值前面有2个空格)。#include<stdio.h>intmain(){intwidth,precision;doubled=1.234567......
  • 京东 API 接口获取商品详情数据示例表格输出
    由于实际的API调用需要API密钥和访问权限,而且这些通常不公开分享,我将提供一个假设性的框架和示例,说明如何从京东API获取商品详情数据,并将其整理成表格形式。如果你已经有了京东开放平台的API访问权限,你可以根据以下步骤和示例代码进行调整,以实际获取数据。步骤一:获取京东API......
  • 一题多解------输出三数最大值
    题目描述从键盘输入三个整数x,y和z,求出其中最大的数。输入描述输入三个整数,用空格隔开。输出描述输出最大整数。样例输入201618样例输出20第一种做法:替换法设一个新变量,用if比较a,b,c的大小,用d替换最大的那个数。0​编辑第二种做法:max函数法使用......
  • 适合写公文的8个AI工具软件,操作简单,输出内容优质,工作效率直线up!
    在数字化加速的今天,公文写作的精确与速度对体制内打工人至关重要。AI技术飞跃,催生智能助手,助力我们构思、撰写并优化公文。推荐8款好用的AI公文软件及官方链接,即刻提升写作效能。 1、笔墨写作笔墨写作-领先的写作智能AI创作平台|官方首页笔墨写作是一款专注于各种文体写......
  • 2024年1月Java项目开发指南18:自定义异常输出
    一般情况下,报错信息一大堆,值得注意的只有三个地方:哪个文件发生了错误哪一行发生了错误错误原因是什么只要知道这三个东西就能快速的定位到错误发生的位置并且根据提示解决。如果你也喜欢我的这种异常输出(如文章顶部图)那么可以参考以下代码:packagecom.guaiguailang.harm......
  • 【项目实战】g-sensor输出的gyro数据值没有变化
    项目场景:GR5515sensorhubSDK 与master 展锐W307(UWS6130E)通过串口通讯。问题描述量产的设备,概率性出现以下问题:G-SENSOR输出的gyro数据值没有变化,始终是一组一样的值。G-SENSOR型号为icm-42670-p。规格书已上传。正常的设备是有变化的。参考下图,对比异常设备却是......
  • 操作系统:内核的基本实现(一)屏幕输出与C语言支持
    使用C语言cdecl约定HimuOSKernel遵守cdecl约定,在32位操作系统上,函数实参在线程栈上按照从右至左的顺序依次压栈(x86cdecl的参数总是在栈上)函数结果保存在寄存器EAX/AX/AL中浮点型结果存放在寄存器ST0中编译后的函数名前缀以一个下划线字符调用者负责清栈8比特或......
  • FreeImage裁剪输出
    #include<iostream>#include"FreeImage.h"bool   SaveToFile(intm_originW,intm_originH,char*FileName,BYTE*pBuf,intnWidth,intnHeight){         FIBITMAP*bitmap=NULL;   FREE_IMAGE_FORMATfif=FIF_JPEG;   int       flag......