GPIO的简介

目录

一、GPIO简介

二、GPIO基本结构

三、GPIO位结构 

1、整体结构和内部各结构

2、输入部分

1.保护二极管

2.输入模式

3.浮空/上拉/下拉配置

​编辑

4.模拟输入

 5.施密特触发器

3、输出部分

1.输出部分前段

2.输出模式

3.开漏/推挽输出

4.复用开漏/推挽输出

四、硬件电路

1、基础常识

2、硬件电路


一、GPIO简介

  • GPIO(General Purpose Input Output)通用输入输出口。
  • 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V(即在这个端口输入5V 的电压,也认为是高电平,但是对输入而言,最大只能输出3.3v的,因为供电只有3.3v,可以容忍5v的需要在引脚定义中带FT(Five Tolerate))。
  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

二、GPIO基本结构

         左边是APB2外设总线,在STM32中,所有的GPIO都是挂载在APB2外设总线上,GPIO的名称是按照GPIOA,B,C这样来命名的,每个GPIO外设总共有16个引脚,编号是从0~15,因为stm32中只用低16位,高16位是没有用到的,GPIO模块内,主要包含寄存器和驱动器,寄存器就是特殊的存储器,内核可以通过APB2总线对寄存器进行读写,完成输出电平和读取电平的功能,寄存器的每一位对应一个引脚(例如输出寄存器写1,对应引脚就会输出高电平,写0就会输出低电平,输入同理),驱动器是用来增加信号的驱动能力,寄存器值负责存储数据,点灯之类的操作需要驱动器来负责增加驱动能力,就是下图系统结构中红色圈起来的部分:

三、GPIO位结构 

1、整体结构和内部各结构

2、输入部分

1.保护二极管

        如上图最右边的IO引脚,接了两个保护二极管,这是对输入电压进行限幅的,上面的二极管接VDD,3.3v,下面接VSS,0v。如果输入电压比3.3v高,那上方这个二极管就会导通,输入电压产生的电流就会直接流入VDD而不流入内部电路,这样可以避免过高的电压对内部电路造成伤害,如果相对于VSS而言,比0v还低,那此时下方这个二极管就会导通,电流会从VSS直接流出去,而不会从内部电路汲取电流,也可以保护内部电路;如果输入电压在0~3.3v之间,那这两个二极管均不会导通,这个时候二极管对电路没有影响,这个就是保护二极管的用途。

2.输入模式

        由上图可知,上拉电阻连接到VDD,下拉电阻接到VSS。

  • 上面导通,下面断开,就是上拉输入模式。
  • 下面导通,上面断开,就是下拉输入模式。
  • 当两个者都断开,就是浮空输入模式。

        这三个都是为了给输入和输出提供一个默认的输入电平,因为对应一个数字的端口,输入不是高电平就是低电平。如果输入引脚啥都不接,那怎么算?如果啥都不接,此时输入就会处于一种浮空输入模式,引脚电平及其容易受外界干扰而改变,为了避免引脚悬空而导致的输入数据不确定,就需要加入上拉或者下拉。

        上拉电阻:引脚悬空时,还有上拉电阻来保证引脚的高电平,默认为高电平的输入模式。
下拉电阻默认为低电平的输入模式。上下拉电阻的阻值都是比较大的,是一种弱上拉和弱下拉,目的是不影响正常的输入操作。

模式名称性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC

        输入模式对应的库函数:

#模拟输入模式
GPIO_Mode_AIN (0x0)

#浮空输入模式
GPIO_Mode_IN_FLOATING (0x04)

#内部下拉模式
GPIO_Mode_IPD (0x28)

#内部上拉模式
GPIO_Mode_IPU (0x48)

3.浮空/上拉/下拉配置

        从上图中可以看出,在输入模式下输出驱动时断开的,端口只能输入而不能输出。

4.模拟输入

        模拟输入模式的特征从上面的表中可以知道,就是GPIO无效,引脚直接接入内部ADC,模拟输入可以说是ADC模数转换器的专属配置。

        在模拟输入中,输出也是断开的,输入的施密特触发器也是关闭的无效转态,所以在使用ADC的时候,将引脚配置为模拟输入就可以了,即在模拟输入的时候,只剩下下图红色的线可以使用

 5.施密特触发器

         肖特基触发器是翻译错误,正确的是施密特触发器,作用是对输入的电压进行整形,当执行逻辑是输入电压大于某一阈值,输出会瞬间升为高电平,如果输入电压小于某一阈值,输出会瞬间降为低电平,即高于上限输出高,低于下限输出低。如下图所示,两根红线代表的是高阈值和低阈值,黄色的线是输入电压,绿色的线是经过施密特整形之后的电压。

        经过施密特整形之后的波形就可以直接写入输入数据寄存器,再用程序读取输入数据寄存器对应某一位的数据,就可以知道端口的输入电平,
        模拟输入连接到ADC上,因为ADC需要接收模拟量,所以接到施密特触发器之前
        复用功能输入:连接到其他需要读取端口的外设上,如串口的输入引脚等,这根线接收的是数字量,所以在施密特之后。

3、输出部分

1.输出部分前段

        数字部分可以由输出数据寄存器或者片,上外设控制,两种方式通过这个数据选择器接到了输出控制部分,如果选择通过输出数据寄存器进行控制,就是普通IO口输出,写这个数据寄存器的某一位就可以操作对应的某一个端口。

        位设置清除寄存器:可以用来单独操作输出数据寄存器的某一位,而不影响其他位,因为输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写。

        如果想单独控制其中某一个端口而不影响其他端口,就需要下面的一些操作:

        第一种事先读出这个寄存器,然后按位与和按位或的方式更改某一位,最后再将更改后的数据写回去,即就是|=和&=的操作,麻烦,效率低,对IO口操作不合适。
        第二种是位设置和清除寄存器,如果要对某一位进行置1的操作,在位设置寄存器的对应位写1就可以了,剩下不需要操作的位写0,这样内部有电路自动将输出数据寄存器中对应位置为1,而剩下写0的位则保持不变,这样保证只操作了其中某一位而不影响其他位,并且一步到位,如果想对某一位进行清0操作,就在位清楚寄存器的对应位写1就可以,这样内部电路就会把某一位清0了
        第三种是读取位带操作的方式,在stm32 中专门分配的有一段地址区,这段地址映射了RAM和外设寄存器所有的位,读写这段地址中的数据,就相当于读写所映射位置的某一位库函数使用的是读写位设置和位清除寄存器。

注意:库函数使用的是读写位设置和位清楚寄存器的方式。

2.输出模式

        由上图可知,上面是P-MOS,下面是N-MOS,这个MOS管就是一种电子开关,信号来控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS。这里可以使用选择推挽、开漏或者关闭三种方式。

        推挽输出模式:P-MOS和N-MOS都是有效的,数据寄存器为1时,上管(P-MOS)导通,下管(N-MOS)断开,输出直接接到VDD,就是输出高电平;数据寄存器为0时,上管断开,下管导通,输出接到VSS,就是输出低电平。这个模式下高低电平都具有强大的驱动能力,所以推挽输出也可以叫强推输出模式。在推挽输出模式下,STM32具有对IO口绝对的控制权,高低电平都是由STM32决定。

        开漏输出模式:此时P-MOS是无效的,只有N-MOS是在工作的。数据寄存器为1时,下管断开,此时相当于断开,也就是高阻模式;数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平,这种模式下只有低电平有驱动能力,高电平是没有驱动能力的。可以作为通信协议的驱动方式,如I2C通信的引脚就是开漏输出模式,在多机通信的情况下,这个模式可以避免各个设备的相互干扰。

        另外开漏模式还可以用于输出5V的电平,比如在IO口外接一个上拉电阻到5V电源,当输出低电平的时候,由内部的N-MOS直接接VSS,当输出高电平的时,由外部的上拉电阻拉高到5V,这样就可以输出5v电平信号,如下图所示:

输出低电平时电路

       

输出高电平时电路

        剩下的一种转态就是关闭,当引脚配置为输入模式的时候,两个MOS管都是无效的,也就是输出关闭,端口的电平有外部信号控制。

        下表是输出模式的总结:

模式名称性质特征
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSS

        输出模式对应的库函数:

#开漏输出模式
GPIO_Mode_Out_OD (0x14)

#推挽输出模式
GPIO_Mode_Out_PP (0x10)

#复用开漏输出模式
GPIO_Mode_AF_OD (0x1C)

#复用推挽输出模式
GPIO_Mode_AF_PP (0x18)

3.开漏/推挽输出

         开漏输出和推挽输出的电路结构基本相同,都是数字输出端口,可以用于输出高低电平。

区别:

  • 开漏输出的高电平呈现高阻态,没有驱动能力。
  • 而推挽输出的高低电平都具有驱动能力。

         开漏和推挽输出都是由输出数据寄存器控制,如果P-MOS无效就是开漏输出,如果P-MOS和N-MOS都有效,就是推挽输出。

        同时由上图可知,当在输出模式下,输入模式是有效的,这是因为一个端口只能有一个输出,但是可以有多个输入。即当配置输出模式时,内部也可以输入,这是没有影响的,复用开漏和复用推挽与普通的开漏和推挽输出相,只是复用输出中,引脚电平有片上外设控制。

4.复用开漏/推挽输出

         在复用模式中,红色框1的部分是没有连接的,引脚的控制权转移到了片上外设,由片上外设来控制,如红线2。

        在输入部分,片上外设也可以读取引脚的电平,如红线3,同时普通的功能也是有效的,红线4。

注意:在GPIO的8中模式中,出了模拟输入这个模式会关闭数字的输入功能,其他7中模式中,所有输入都是有效的。


四、硬件电路

1、基础常识

        小灯泡正极与负极的区分:

方法一:通常情况下,引脚长的位正极,短的为负极。

方法二:看灯芯,小的是正极,长的是负极。

        两种蜂鸣器的区别:

有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定。

无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。

2、硬件电路

        方式一:低电平驱动电路

         在上图电路中,PA0输出低电平时,LED两端产生电压差,就会形成正向导通电流,LED就会亮,当PA0输出高电平时,LED两端都是3.3v,没有电压差,不会形成电流,LED就熄灭。

        方式二:高电平驱动电路

         如上图所示,正极接PA0,负极接GND,此时就是高电平点亮,低电平熄灭。

        具体选择什么方式,需要靠IO口高低电平驱动能力来判断,例如:推挽输出模式下,高低电平都有比较强的驱动能力,所以那种方式都可以实现一样的效果,但是单片机电路中,较多的是使用第一种方式,因为很多单片机或者芯片,都是使用高电平弱驱动,低电平强驱动,可以一定程度上避免高低电平出现“纠纷”。因此高电平驱动能力弱,就只能使用第一种方式了。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EasyDSS视频推拉流/直播点播平台:Mysql数据库接口报错502处理方法

视频推拉流/视频直播点播EasyDSS互联网直播平台支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访…

AI工具:免费-文字转语音TTsmaker

前言: 测试了一款好用的文字转语音工具,简单,个人用免费功能就足够了。 说明: TTSMaker(马克配音)是一款免费的文本转语音工具,提供语音合成服务,支持多种语言,包括中…

vue3 vite 两种监听pinia状态变化的方式比较:watch, $subscribe

首先搭建vue3 vite 项目 npm create vue选择pinia 或者自己安装pinia 自己安装需要 npm install pinia并在main.js中挂在上: const pinia createPinia() const app createApp(App) app.use(pinia) app.mount(#app)创建stores文件夹和counter.js文件 counter.j…

【算法学习之路】5.贪心算法

贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳!3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新&#xf…

【ThreeJS Basics 1-6】Camera

文章目录 Camera 相机PerspectiveCamera 透视相机正交相机用鼠标控制相机大幅度转动(可以看到后面) 控制组件FlyControls 飞行组件控制FirstPersonControls 第一人称控制PointerLockControls 指针锁定控制OrbitControls 轨道控制TrackballControls 轨迹球…

Java+SpringBoot+Vue+数据可视化的百草园化妆服务平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统背景 市场需求催生 在当今社会,化妆已经成为人们日常生活和各种重要场合中不可或…

React:Redux

Redux引入 Redux感觉像组件通信的中介 state存放被管理的状态 action是申请改哪些数据,传入什么参数 reducer是怎么修改数据 我的理解更像是action像一个储存方法的对象,reducer是具体的方法的实现,不同的方法实现也不一样 store是个仓库…

【AI实践】基于TensorFlow/Keras的CNN(卷积神经网络)简单实现:手写数字识别的工程实践

深度神经网络系列文章 【AI深度学习网络】卷积神经网络(CNN)入门指南:从生物启发的原理到现代架构演进【AI实践】基于TensorFlow/Keras的CNN(卷积神经网络)简单实现:手写数字识别的工程实践 引言 在深度…

学习threejs,使用LineBasicMaterial基础线材质

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.LineBasicMaterial1.…

【0010】Python流程控制结构-分支结构详解

如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 分支结构是编程中的基本控制结构之一,它允许程序根据条件判断执行不同的代码路径。通过本文&…

python网络爬虫开发实战之基本库使用

目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…

pytest框架 核心知识的系统复习

1. pytest 介绍 是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。 优点: 语法简洁(用 assert 替代 self.assertEqual)。 自动发现测试用例。 丰富的插件生态(如失败重试、并发执…

Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Electron桌面应用开发:自定义菜单

完成初始应用的创建Electron桌面应用开发:创建应用,随后我们就可以自定义软件的菜单了。菜单可以帮助用户快速找到和执行命令,而不需要记住复杂的快捷键,通过将相关功能组织在一起,用户可以更容易地发现和使用应用程序…

探索低空,旅游景区无人机应用技术详解

在低空领域,无人机技术在旅游景区中的应用已经日益广泛,为旅游业带来了前所未有的变革。以下是对旅游景区无人机应用技术的详细解析: 一、无人机景区巡检系统 1. 高清拍摄与实时监控:无人机搭载高清摄像头,能够对景区…

Python-07PDF转Word

2025-03-04-PDF转Word DeepSeek等大模型从来都不是简单的写一个静态博客这么肤浅(太多博主都只讲这个内容了)借助全网大神的奇思妙想,拓展我狭隘的思维边界。 文章目录 2025-03-04-PDF转Word [toc]1-参考网址2-学习要点3-核心逻辑4-核心代码 …

【c语言函数精选题】

c语言函数精选题 一、易错概念题1.1💡建立函数的目的1.2💡函数的定义1.3💡return语句1.4💡函数的参数1.5💡复合语句声明变量 二、代码填空题2.1💡四舍五入2.2💡二分法求方程根2.3💡输…

储油自动化革命,网关PROFINET与MODBUS网桥的无缝融合,锦上添花

储油行业作为能源供应链的关键环节,其自动化和监控系统的可靠性和效率至关重要。随着工业4.0的推进,储油设施越来越多地采用先进的自动化技术以提高安全性、降低成本并优化运营。本案例探讨了如何通过使用稳联技术PROFINET转MODBUS模块网关网桥&#xff…

不同类型光谱相机的技术差异比较

一、波段数量与连续性 ‌多光谱相机‌ 波段数:通常4-9个离散波段,光谱范围集中于400-1000nm‌。 数据特征:光谱呈阶梯状,无法连续覆盖,适用于中等精度需求场景(如植被分类)‌。 ‌高光谱相机…

Linux纯命令行界面下SVN的简单使用教程

诸神缄默不语-个人技术博文与视频目录 我用的VSCode插件是这个: 可以在文件中用色块显示代码修改了什么地方,点击色块还可以显示修改内容。 文章目录 1. SVN安装2. checkout3. update1. 将文件加入版本控制 4. commit5. 查看SVN信息:info6.…