GPIO的八种模式分析

2023-05-16

GPIO是general purpose input output,即通用输入输出端口,作用是负责外部器件的信息和控制外部器件工作。

GPIO有如下几个特点:1.不同型号的IO口数量不同;2,反转快速,每次翻转最快只需要两个时钟周期,以STM32F1系列为例,最快速度可达50MHz;3.每个IO口都可以做中断。

接下来介绍GPIO的电气特性:1.工作电压范围为:[2, 3.3]V ;2.识别电压范围(CMOS端口):-0.3V <= VIL <= 1.164V , 1.833V <= VIH <= 3.6V;3.输出电流单个IO口最大25mA。

下图为GPIO的结构图:

 GPIO的上半部分为输入部分,下半部分为输出部分。

接下来简要介绍其工作流程

1.输入:信号从IO脚输入,经过保护电路后进入GPIO内部,然后进入上下拉电路(只是在输入状态时候设置,因此在芯片处在输出状态时不需要设置上下拉,比如我们的LED实验),然后兵分两路,上面的是模拟输入(ADC/DAC),下面再分为两路,上面是复用输入至片上外设,下面进入输入寄存器(IDR),CPU就能读取其中的信号获得信息。

2.输出:

i) 执行机构:如果需要输出高电平,就使PMOS管导通,从VDD接进高电平输出3.3V,如果需要输出低电平就使NMOS管导通将VSS(0V)导通至外部。

ii)控制机构:上面的是连接输出寄存器(ODR),可以通过位清除寄存器(BSRR)对ODR进行读写,也可以直接进行读写操作,然后进入二选一选择器,再进入输出控制器。

接下来介绍几个重要的元件:

1.保护二极管:当输入过高的电压(比如5V,PS:必须串联一个电阻,不然会烧)的时候,下面的保护二极管截止,上面的保护二极管导通,因为保护二极管的压降为0.3V,VDD为3.3V,所以实际输入的电压为3.6V,防止了过高的电压输入;如果输入一个过低的电压(比如-5V,同理要接电阻),上面的保护二极管截止,下面的保护二极管导通,因为VSS为0V,所以实际输入的电压为0.3V。

2.内部上下拉电阻:内部上下拉电阻值为30~50kOhm,当未接入的时候处于高阻态,电平由外部状态控制,是非稳定的状态。当该器件初始状态是高电平的时候,需要一个稳定的高电位来维护这个状态,于是我们选用上拉电阻(如KEY0);当该器件的初始状态是低电平的时候,需要一个稳定的低电位来维护这个状态,于是我们选用下拉电阻(如WAKE_UP_KEY)。

3.施密特触发器:为一种整形电路,可以将非标准波整形成方波。如图,施密特触发器有一个正向阈值电压和一个负向阈值电压。当电压高于正向阈值电压,输出为高电平;当电压低于负向阈值电压的时候,输出为低电平;当电压处于正向和负向阈值电压之间的时候,输出不改变。

 

4.P/N-MOS管:MOS管是压控型元件,通过控制栅源电压实现导通或关闭。

 G:栅极;S:源极;D:漏极

对PMOS管来说,当Vgs<0时导通,因为VDD为3.3V,所以G极必须低于3.3V,即G输出低电平时,PMOS管才导通。

对NMOS管来说,当Vgs>0时导通,因为VDD为0V,所以G极必须高于3.3V,即G输出高电平时,NMOS管才导通。

接下来详细介绍八种模式分析

GPIO_MODE_INPUT:前三种都属于

1.输入浮空(GPIO_NOPULL):输入用,完全浮空,状态不定。

上下拉电阻关闭,施密特触发器打开,模拟输入关闭,双MOS管不导通。空闲时(高阻态),IO状态不稳定,由外部环境决定。

2.输入上拉(GPIO_PULLUP):输入用,用内部上拉,默认为高电平。

使用上拉电阻,下拉电阻关闭,施密特触发器打开,模拟输入关闭,MOS管不导通。空闲时,IO呈现高电平。

3.输入下拉(GPIO_PULLDOWN):输入用,用内部下拉,默认为低电平。

使用下拉电阻,上拉电阻关闭,施密特触发器打开,模拟输入关闭,MOS管不导通。空闲时,IO呈现低电平。

PS:GPIO_NOPULL,GPIO_PULLUP,GPIO_PULLDOWN都是在GPIO_PULL中进行设置的。

4.模拟(复用)输入(GPIO_MODE_AF_INPUT):ADC/DAC

上下拉电阻关闭,施密特触发器关闭,模拟输入打开,双MOS管不导通。专门用于模拟信号输入。

5.开漏输出(GPIO_MODE_OUTPUT_OD):软件IIC的SDL,SCL等。

上下拉电阻关闭,施密特触发器打开,PMOS管关闭,在ODR对应位写0时,NMOS管导通,输出低电平,写1时不导通,不导通时为高阻态。不能输出高电平,必须有外部上拉电阻才能输出高电平。

6.推挽输出(GPIO_MODE_OUTPUT_PP):驱动能力强,25mA(MAX),通用输出。

上下拉电阻关闭,施密特触发器打开,ODR对应位写0时,NMOS管导通,输出低电平,写1则PMOS管导通,输出高电平。可输出高低电平,驱动能力强。

7.开漏复用输出(GPIO_MODE_AF_OD):片上外设(软件IIC的SDL,SCL等)

上下拉电阻关闭,施密特触发器打开,PMOS管关闭,在外设复用输出写0时,NMOS管导通,写1时不导通,不导通时为高阻态。不能输出高电平,必须有外部上拉电阻才能输出高电平。

8.推挽复用输出(GPIO_MODE_AF_PP):片上外设(SPI的SCK,MISO,MOSI等)

上下拉电阻关闭,施密特触发器打开,外设复用功能写0时,NMOS管导通,输出低电平,写1则PMOS管导通,输出高电平。可输出高低电平,驱动能力强。

至此,对GPIO的简单介绍就完成了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPIO的八种模式分析 的相关文章

  • ubuntu16.04 安装 php7.0-curl

    sudo apt add repository ppa ondrej php 添加这个源 sudo apt get update sudo apt get install php7 0 curl 这时成功安装php7 0 curl
  • string、char *、char[] 相互转换转换

    点击打开原文链接 一 string 转 char 主要有三种方法可以将 str 转换为 char 类型 xff0c 分别是 xff1a data c str copy 1 data 方法 xff1a string str 61 34 hel
  • STM32F103标准库开发---Uart串口通信实验---函数发送和中断接收

    STM32F103标准库开发 目录 文章目录 一 Uart串口通信 函数发送 1 Uart串口发送 标准库 函数 单字节发送 2 Uart串口检测标志 标准库 函数 3 Uart串口函数发送具体程序 二 Uart串口通信 中断接收 1 Ua
  • Keil5----新建项目文件( .c文件 和 .h文件)

    前言 在使用 Keil5 编辑程序的时候 xff0c 一定需要新建几个文件 xff08 c文件 和 h文件 xff09 xff0c 在其中编写不同功能的程序 例如 xff1a 新建LED c和LED h文件 xff0c 实现LED灯闪烁的功
  • 编码和串口通信

    先了解字符串和bytes xff08 字节 xff09 字符串 xff1a python里的字符串就是文本 xff0c 用于与人类交互 xff0c 像这样 xff1a 阿拉伯数字 xff1a a 61 1234566454 英语 xff1a
  • vscode终端不显示,闪退问题解决(完整步骤)

    1 以管理员身份运行此程序 步骤 xff1a 1 1 找到该文件目录的文件图标 1 2 右键属性选择兼容性 1 3 选择更改所有用户的设置然后勾选以管理员身份运行此程序后重新打开vscode 2 在vscode修改配置文件 2 1 打开vs
  • Vue项目启动报错 error:cannot find module xxx

    原因 xff1a 无法找到项目依赖的某个模块 解决办法 xff1a 1 删掉存放模块的文件夹node module xff1b 2 执行清除缓存命令 npm cache clean xff1b 如果报错 xff0c 使用强制清除npm ca
  • OkHttp-(一)HttpUrl了解

    1 xff0c git地址 xff1a https github com square okhttp 2 xff0c 官网地址 xff1a https square github io okhttp Http作为现代应用程序的常用联网方式
  • 学习网络编程第一步,安装NetAssist网络调试助手

    x1f4d6 摘要 今天分享下 遇到 Request header is too large xff0c 如何解决 xff0c 欢迎关注 xff01 x1f91e 简单介绍 NetAssist 是一款免安装的网络调试助手工具 今天给大家带来
  • 初学STM32之串口通信

    文章目录 一 背景知识1 处理器与外部通信的两种方式2 串行通信的三种传输方式3 串行通信的通信方式 二 串口通信基础1 STM32的串口通信接口2 UART异步通信引脚连接方法3 UART异步通信方式特点4 串口异步通信需要定义的参数 三
  • 前端架构图解

  • Ubuntu 18.04快捷安装ROS Melodic及rosdep update time out的问题解决

    1 ROS快捷安装 以下安装指令汇总针对Ubuntu18 04的ROS Melodic版本 xff1a 强烈建议复制以下指令到新建的xxx sh文件中 xff0c 保存后给xxx sh权限 xff0c 然后执行脚本一路输入y等候安装完成 e
  • NVIDIA Jetson AGX Xavier学习笔记3——环境配置(pytorch、torchvision、cv2)

    最近研究中需要使用NVIDIA Jetson AGX Xavier人工智能开发组件 由于也是第一次接触相关硬件设备 xff0c 遇到了很多困难 在这里记录整个Jetson AGX Xavier组件的学习过程 其中很多内容网上有比较详细的教程
  • Linux网络编程——tcp实例

    题目 1 通过TCP协议实现多个client端可以并发连接到server xff0c client可获得server指定目录下的文件列表 span class hljs comment client c Created on 2016年11
  • A星寻路算法的学习总结(详解)

    目录 1 理论基础 1 1A星寻路是用来解决什么问题的 1 2A星寻路的基本原理 2 代码实现 2 1每个格子的信息 2 2A星寻路管理器 2 3测试代码 3 实例演示 1 理论基础 1 1A星寻路是用来解决什么问题的 A星寻路是用来计算玩
  • C语言单片机栈、堆、堆栈的区别(仅供参考)

    计算机C语言中各个变量的存放区域 xff1a 代码区 xff08 CODE xff09 xff1a 存放函数代码 xff1b 静态数据区 xff08 DATA xff09 xff1a 存放全局变量 静态变量 xff1b 堆区 xff08 H
  • 用c语言写链表

    链表是数据结构的一种 xff0c 是其他三个数据结构栈 xff0c 树 xff0c 图的基础 xff0c 只有将链表这一数据结构弄懂 xff0c 才能理解其他三种数据结构 举一个例子 xff0c 老师让你设计一个联系人系统 xff0c 其中
  • Fiddler抓包工具详解

    Fiddler的详细介绍 一 Fiddler与其他抓包工具的区别 1 Firebug虽然可以抓包 xff0c 但是对于分析http请求的详细信息 xff0c 不够强大 模拟http请求的功能也不够 xff0c 且firebug常常是需要 无
  • python 解析Json对象之jsonpath_rw用法

    jsonpath rw xff1a 一个可以像写xpath一样写json的Python第三方库 首先安装 xff1a pip install jsonpath rw 实例 xff1a from jsonpath rw import json
  • selenium之xpath使用

    XPath即XML路径语言 xff0c 支持从xml或html中查找元素节点 xff0c 使用XPath完全可以替代其他定位放式 xff0c 如 xff1a find element by xpath 39 64 id 61 34 34 3

随机推荐

  • Python-面向对象之多态

    当子类和父类都存在相同的run 方法时 xff0c 我们说 xff0c 子类的run 覆盖了父类的run xff0c 在代码运行的时候 xff0c 总是会调用子类的run 这样 xff0c 我们就获得了继承的另一个好处 xff1a 多态 c
  • 使用Ubuntu帐户创建SFTP

    提供sftp服务的有vsftpd和internal sftp xff0c 这里用的是系统自带的internal sftp xff0c 操作步骤如下 xff1a 1 创建用户 testenv xff0c 并禁止ssh登录 xff0c 不创建家
  • flask数据分页paginate的使用(flask学习)

    Flask的数据分页示例 1 xff0c 首先写数据获取的视图函数 xff0c 就像这样 xff1a 64 app route 39 39 64 login required def index page 61 request args g
  • Python __dict__属性详解

    我们都知道Python一切皆对象 xff0c 那么Python究竟是怎么管理对象的呢 xff1f 1 无处不在的 dict 首先看一下类的 dict 属性和类对象的 dict 属性 coding utf 8 class A object 3
  • Flask-SQLAlchemy 中的 relationship & backref

    今天重看 Flask 时 xff0c 发现对backref仍然没有理解透彻 查阅文档后发现 xff0c 以前试图孤立地理解backref是问题之源 xff0c backref是与relationship配合使用的 一对多关系 db rela
  • Django HttpResponse与JsonResponse

    我们编写一些接口函数的时候 xff0c 经常需要给调用者返回json格式的数据 xff0c 那么如何返回可直接解析的json格式的数据呢 xff1f 首先先来第一种方式 xff1a from django shortcuts import
  • Ubuntu安装mysql

    首先执行下面三条命令 xff1a sudo apt get install mysql server sudo apt install mysql client sudo apt install libmysqlclient dev 安装成
  • 10种动态进度条用css3实现

    用css做的10种动态进度条 xff0c 喜欢可以直接去用话不多说先看效果图 xff1a 实现上图的 xff0c 最主要的就是应用了css动画属性 64 keyframes和animation属性结合应用 下面看看语法 xff1a 64 k
  • Yolo训练数据标注工具-Yolo_mark 使用教程

    一 安装与测试 环境 xff1a Ubuntu16 04 43 Opnecv 43 Cmake 项目地址 xff1a https github com AlexeyAB Yolo mark 下载 打开终端 xff0c 键入 xff1a gi
  • x86、ARM分属大小端

    小端模式 xff1a 一个数据的高位在大的地址端 xff0c 低位在小的地址端 xff0c x86也就是pc机就是小端的 xff1a include 34 stdio h 34 include 34 stdlib h 34 int main
  • 二叉树(C语言实现)——链式存储结构

    include lt stdio h gt include lt stdlib h gt include lt stdbool h gt define QueueSize 200 typedef char DataType typedef
  • 栈,堆,常量区都放什么

    1 寄存器 xff1a 最快的存储区 由编译器根据需求进行分配 我们在程序中无法控制 xff1b 1 栈 xff1a 存放基本类型的变量数据和对象的引用 xff0c 但对象本身不存放在栈中 xff0c 而是存放在堆 xff08 new 出来
  • Windows10安装Docker并创建本地Ubuntu环境

    安装Docker参考文章 xff1a https www cnblogs com Can daydayup p 15468591 html label0 安装本地Ubuntu环境 xff1a windows10下安装docker xff0c
  • 机器人操作系统ROS是什么?

    目录 1 什么是ROS 2 ROS的许可协议 3 ROS的主要发行版本 4 ROS的主要功能 5 ROS的应用 6 ROS开发的常用工具 7 ROS的优点 8 ROS的缺点 1 什么是ROS ROS是机器人操作系统 xff08 Robot
  • 【教程】如何移植FPGA关于HDMI例程

    教程 如何移植FPGA关于HDMI例程 时钟IP核约束条件 在完成EDA作业后 xff0c 抽空分享一下如何移植FPGA的例程 我EDA作业用的板子型号是Zybo Z7 xff0c 然后移植的是原子哥的HDMI实现方块移动例程 故本教程是基
  • 【MATLAB UAV Toolbox】使用指南(三)

    可视化自定义飞行日志 通过配置flightLogSignalMapping可从自定义的飞行日志中可视化数据 加载自定义的飞行日志 在本例中 xff0c 假设飞行数据已经被解析到MATLAB 中 xff0c 并存储为M文件 本示例重点介绍如何
  • matplotlib学习笔记

    matplotlib第一章 matplotlib通常有两种绘图接口 xff1a 显示创建figure和axes 依赖pyplot自动创建figure和axes 并绘图 matplotlib环境 本文是在jupyter notebook下运行
  • OPNET 修改节点图标大小

    老是记不住在哪修改图标 xff0c 有一天看急眼了 xff0c 经过半小时的斗争 xff0c 终于找到了 xff0c 这次一定要把它记下来 View gt Layout gt Scale Node icons Interactively
  • 自定义msg使用C++

    在之前创建talker的src文件夹中创建person cpp并编写如下 include 34 ros ros h 34 include 34 learning communication Person h 34 include lt ss
  • GPIO的八种模式分析

    GPIO是general purpose input output 即通用输入输出端口 xff0c 作用是负责外部器件的信息和控制外部器件工作 GPIO有如下几个特点 xff1a 1 不同型号的IO口数量不同 xff1b 2 xff0c 反