SOC芯片学习--GPIO简介

原创 硬件设计技术 硬件设计技术 2023-07-20 00:04 发表于广东

收录于合集#集成电路--IC7个

一、GPIO定义、分类:

    GPIO(英语:General-purpose input/output),通用型之输入输出的简称,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO。

    分类如下:

图片

二、GPIO内部结构:

    既然一个引脚可以用于输入、输出、其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入:可以通过读取某个寄存器来确定引脚电位的高低;对于输出:可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能:另外的寄存器来控制它们。

    内部简易系统框图如下所示:

图片

简易等效图一、<From cypress or infineon>

图片

简易等效图二、<From ST>

三、GPIO驱动模式诠释以及等效模型:

        下图提供了某个 GPIO 引脚八种驱动模式,同时给出了每一种驱动模式下的 GPIO 单元配置等效电路模型。<From cypress or infineon>

图片

图片

3.1、输入模式配置:

3.1.1、当器件I/O引脚配置为输入时,必须选择以下三个选项之一:

    • 带内部上拉的输出。使用上拉电阻,以确保在浮动输入信号的情况下具有良好定义的逻辑电平。根据应用要求,也可以使用外部上拉电阻。 

    • 带内部下拉的输入。使用下拉电阻,确保在浮动输入信号的情况下具有
良好定义的逻辑电平。根据应用要求,也可以使用外部下拉。 

    • 悬空输入。信号电平跟随外部信号。当没有外部信号时,施密特触发器在由外部噪声引起的逻辑电平之间随机切换。但同时这也增加了总体消耗。

3.1.2、编程为输入时,I/O端口具有以下特征: 

    • 输出缓冲器被关闭 

    • 施密特触发器输入被打开 

    • 根据GPIOx_PUPDR寄存器中的值决定是否激活上拉或下拉电阻 

    • 输入数据寄存器每隔 1 个 AHB 时钟周期对 I/O 引脚上的数据进行一次采样 

    • 通过读取GPIOx_IDR输入数据寄存器可获取I/O状态

3.2、输出模式配置:

3.2.1、当器件I/O引脚配置为输出时,必须选择以下两个选项之一: 

• 推挽输出模式: 

    推挽输出实际上使用两个晶体管:一个PMOS和一个NMOS。每个晶体管接通才能将输出
驱动到适当的电平:

    – 当输出必须驱动为高电平状态时,顶部晶体管(PMOS)导通

    – 当输出必须驱动为低电平状态时,底部晶体管(NMOS)导通 

    两个晶体管的控制通过GPIO端口输出类型寄存器(GPIOx_OTYPER)完成。将输出寄存器(GPIOx_ODR)的相关位写0可激活NMOS晶体管,强制I/O引脚接 地。 

    将输出寄存器(GPIOx_ODR)的相关位写1可激活PMOS晶体管,强制I/O引脚接 通VDD。

• 开漏输出模式: 

    开漏输出模式不使用PMOS晶体管,而是需要一个上拉电阻。 

    当输出必须变为高电平时,必须关闭NMOS晶体管,仅通过上拉电阻将电平拉高。该上拉电阻可以是内部的,也可使用外部的。 

    注意:不可能在同一个I/O引脚上同时激活上拉和下拉。用户也可以使用外部上拉或下拉电阻代替内部电阻。在这种情况下,必须调整该值以符 合GPIO输出电压和电流特性。 

3.2.2、编程为输出时,I/O端口具有以下特征:

    • 可将输出缓冲器配置为开漏或推挽模式 

    • 施密特触发器输入被打开 

    • 根据GPIOx_PUPDR寄存器中的值决定是否激活上拉或下拉电阻。

    • 写入输出数据寄存器GPIOx_ODR的值将I/O引脚状态置位 

    • GPIOx_ODR中的写入数据可从GPIOx_IDR中读取,该寄存器每个AHB时钟周期更新一次 

    开漏输出通常用于控制供电电压与主控电平不同的器件。需要特定上拉电阻时,开漏模式也用于驱动一个或多个I2C器件。

3.3、模拟配置:

    有一些 GPIO引脚可以配置为模拟模式,允许使用ADC、DAC、PAMP和COMP等内部外设。要在模拟模式下使用GPIO引脚,请考虑以下寄存器: 

    •GPIOx_MODER,选择模式(输入,输出,复用,模拟)

    •GPIOx_ASCR,选择所需的功能,ADC,DAC,OPAMP或COMP

对 I/O 端口进行编程作为模拟配置时:

    • 输出缓冲器被关闭 

    • 施密特触发器输入被禁用,因此I/O引脚的每个模拟值零消耗。施密特触发器的输出被强制为恒定值(0)。 

    • 上拉和下拉电阻被硬件关闭,对输入数据寄存器的读访问值为“0”。

本次关于SOC的GPIO学习分享,到此结束。感谢各位朋友的时间!同时预留以下几个思考题:

1、不同器件之间的GPIO链接为什么需要电平一致呢?

2、既然GPIO允许被配置为开漏输出。那么是否可以直接使用开漏功能实现不同电平之间转换呢?比如:3V-1.8V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143949.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

linux 安装 wordpress

文章目录 linux 安装 wordpress1. wordpress 简介2. wordpress功能和特点3. 部署要求4. 环境搭建4.1 部署 nginx4.1.1 新增配置文件 4.2 部署 PHP74.2.1 查看当前版本4.2.2 YUM 安装 PHP74.2.3 查看 PHP 版本4.2.4 启动PHP-FPM4.2.5 修改配置文件4.2.6 重启服务 4.3 部署 mysql…

探索古彝文AI识别技术:助力中国传统文化的传承与发扬

目录 ⭐️ 写在前面 ⭐️ 一、什么是古彝文 1.1 古彝文介绍 1.2 古彝文与其他古文字示例 1.3 古彝文的重要性 ⭐️二、AI识别技术的挑战与前景 2.1 挑战 2.2 前景 ⭐️三、合合信息AI识别技术 3.1 智能文字识别技术&#x1f44d;&#x1f44d; 3.2 古文识别应用 ⭐…

计算机网络 第四章:网络层

一.网络层概述 1.1分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机&#xff0c;可以将该任务划分为分组转发和路由选择两种重要的功能。 如图所示&#xff1a;这些异构型网络如果只是需要各自内部通信&#xff0c;那它们只需要实…

分布式搜索引擎Elasticsearch

一、Elasticsearch介绍 1.Elasticsearch产生背景 大数据量的检索NoSql: not only sql,泛指非关系型的数据库Nginx的7层负载均衡和4层负载均衡2.Elasticsearch是什么 一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎 Elasticsearch使用Java开发…

stack和queue

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…

油猴(篡改猴)学习记录

第一个Hello World 注意点:默认只匹配了http网站,如果需要https网站,需要自己添加match https://*/*代码如下 这样子访问任意网站就可以输出Hello World // UserScript // name 第一个脚本 // namespace http://tampermonkey.net/ // version 0.1 // descri…

K8S-存储卷,pv,pvc

pv&#xff0c;pvc 一、emptyDir存储卷1.概述2.示例 二、hostPath存储卷1.概述 三、nfs共享存储卷1.在stor01节点上安装nfs&#xff0c;并配置nfs服务2.master节点操作3.在nfs服务器上创建index.html4.master节点操作 四、PVC 和 PV1.概述2.PV和PVC之间的相互作用遵循的生命周期…

HDLBits-Edgedetect

刚开始写的代码如下&#xff1a; module top_module (input clk,input [7:0] in,output [7:0] pedge );reg [7:0] in_pre;always (posedge clk)begin in_pre < in;endassign pedge in & ~in_pre; endmodule但是提交结果是错误的。猜想原因如下&#xff1a; assign p…

Android widget 小部件使用指南强化版

Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图&#xff0c;这些数据和功能可以直…

第十章_祖冲之_圆周率

倒数1又2/3章&#xff0c;keep_writting的一天&#xff1a; 第十章10.1.7 运行程序资源下载网站为何打不开呢&#xff1f;

Linux socket 字节序

socket介绍 字节序 验证什么字节序 #include<stdio.h> int main() {union {short value;char btypes[sizeof(short)];} test;test.value 0x0102;if(test.btypes[0] 1 && test.btypes[1] 2) {printf("大端字节序\n");}else{printf("小端字节序…

JVM111

JVM1 字节码与多语言混合编程 字节码 我们平时说的java字节码&#xff0c; 指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&#xff0c;字节码文件…

DataExcel控件读取和保存excel xlsx 格式文件

需要引用NPOI库 https://github.com/dotnetcore/NPOI 调用Read 函数将excel读取到dataexcel控件 调用Save 函数将dataexcel控件文件保存为excel文件 using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using NPOI.SS.UserModel; using NPOI.SS.Util; using System; using …

canvas-绘图库fabric.js简介

一般情况下简单的绘制&#xff0c;其实canvas原生方法也可以满足&#xff0c;比如画个线&#xff0c;绘制个圆形、正方形、加个文案。 let canvas document.getElementById(canvas);canvas.width 1200;canvas.height 600;canvas.style.width 1200px;canvas.style.height 6…

【算法基础】栈和队列及常见变种与使用,双栈、动态栈、栈的迭代器,双端队列、优先队列、并发队列、延迟队列的使用

目录 一、栈&#xff08;Stack&#xff09; 二、 队列&#xff08;Queue&#xff09; 三、栈和队列的常见变种与使用 3.1 栈的常见的变种与使用 3.1.1 最小栈&#xff08;Min Stack&#xff09; 3.1.2 双栈&#xff08;Two Stacks&#xff09; 3.1.3 固定大小栈&#xf…

eclipse svn插件安装

1.进入eclipse的help->Eclipse Marketplace,如下图所示&#xff1a; 2.输入“svn”,再按回车&#xff0c;如下图&#xff1a; 3.这我选择的是 Subversive,点击后面的“install”按钮&#xff0c;如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…

开源C# Winform Scada 上位机系统

开源Winform Scada系统 功能展示C#源码程序说明下载程序源码获取 功能展示 本软件目前包含: 常用PLC通讯控件, 常用IO读写控件, 权限过滤, 用户管理, 日志记录, 报警记录. 使用方式: 在VS2022里面拖放控件, 填写控件属性,完成组态.即可成为一个完整的上位机. C#源码 程序说明…

弱信号的采样与频谱分析(修订中...)

1.频谱混叠效应 - 波形数据抽样 这是一组经过抽样的数据的频谱&#xff0c;红圈圈出的两条谱线&#xff0c;是我们需要关注的特征谱线。这个信号与右侧的临近信号比较&#xff0c;求频率比值&#xff0c;比值恒定与理论推导相符。再5取1降低采样率后&#xff0c;大致相同的频率…

宝塔nginx搭建Ftp文件服务器

一&#xff1a;创建FTP 填入账号密码后&#xff0c;选择根目录&#xff0c;这个根目录就是nginx要代理的目录 二&#xff1a;配置nginx root的地址就是上面填的FTP根目录 三&#xff1a;http访问 服务器ip端口号加图片 例如我放了一个320.jp 我服务器ip是110.120.120.120 那…

使用MySQL聚合函数来聚合数据,结果发现有刺客...

问题&#xff1a; 使用MySQL聚合函数 group_concat 的坑&#xff01; 现象&#xff1a; 我有个业务&#xff0c;需要将表中符合条件的数据行的id聚合成一个字符串&#xff0c;以供另外一张表的查询过滤。 SELECTx FROMt_A WHEREFIND_IN_SET(guan_lian,(SELECTgroup_concat( i…