第14章. GPIO简介

目录

0. 《STM32单片机自学教程》专栏

14.1 GPIO基本结构

14.1.1 保护二极管 

14.1.2 上拉、下拉电阻 

14.1.3 施密特触发器

14.1.4  P-MOS 管和 N-MOS 管

14.1.5 输出数据寄存器

14.1.6 输入数据寄存器

14.2 GPIO工作模式

14.2.1 输入模式

14.2.1.1 输入浮空模式

14.2.1.2 输入上拉模式 

14.2.1.3 输入下拉模式

14.2.1.4 模拟输入模式

14.2.2 输出模式 

14.2.2.1 推挽输出模式

14.2.2.2 开漏输出模式


0. 《STM32单片机自学教程》专栏

        本文作为专栏《STM32单片机自学教程》专栏其中的一部分,返回专栏总纲,阅读所有文章,点击Link:  

STM32单片机自学教程-[目录总纲]_stm32 学习-CSDN博客     

        从本章开始我们就要开始外设等相关模块的介绍。 我们首先要介绍的就是GPIO,因为我认为GPIO是最基础也是最重要的一个外设功能。那么后续针对每一个外设,我们大致都会从下面几个部分进行讲解:

        1.硬件结构及原理

        2.相关寄存器

        3.相关库函数

        4.实例练习

14.1 GPIO基本结构

        GPIO 有八种工作模式,为讲清楚这些模式的实现原理,我们需要先讲解GPIO的基本结构,总的框图如图14.1-1所示。右边I/O 引脚就是我们可以看到的芯片实物的引脚,其余部分均为GPIO 的内部结构。 

图14.1-1 GPIO的基本结构图

14.1.1 保护二极管 

        引脚的两个保护二级管可以防止引脚外部过高或过低的电压输入,当引脚电压高于VDD 时,上方的二极管导通,当引脚电压低于 VSS 时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。 虽然有二极管的保护,但这样的保护却很有限,大电压大电流的接入很容易烧坏芯片。

14.1.2 上拉、下拉电阻 

        上下拉电阻的阻值大概在30~50K欧之间,可以通过上、下两个对应的寄存器控制开关。当引脚外部的器件没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电平由引脚内部上、下拉决定。内部上拉电阻工作时引脚电平为高电平,内部下拉电阻工作时,则引脚电平为低电平。如果内部上、下拉电阻都不开启,这种情况就是浮空模式。浮空模式下引脚的电平是不可确定的。引脚的电平可以由外部的上、下拉电平决定。由于上下拉电阻的阻值较大,STM32的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还是得外部上拉。

14.1.3 施密特触发器

        图中的TTL肖特基触发器即为施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变。也就是说输出由高电平翻转为低电平,或是由低电平翻转为高电电平对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。这种双阈值动作被称为迟滞现象。我们软件开发种经常用到“滞环调节”,是一个道理,一个经常的应用场景是防止在边界附件来回震荡。施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波信号。

14.1.4  P-MOS 管和 N-MOS 管

        这种双MOS管结构,主要控制GPIO的开漏输出和推挽输出两种模式。这里我们只用记住,PMOS输入低电平时导通,NMOS输入高电平时导通即可。详细内容,后面还会介绍。

14.1.5 输出数据寄存器

        刚到的双MOS管结构电路的输入信号,是由GPIO“输出数据寄存器GPIOx_ODR”提供的,因此我们通过修改输出数据寄存器的值就可以修改GPIO引脚的输出电平。也可以通过“置位/复位寄存器GPIOx_BSRR”修改输出数据寄存器的值,来控制电路的输出。

14.1.6 输入数据寄存器

        GPIO引脚经过内部的上、下拉电阻,可以配置成上/下拉输入,然后再连接到施密特触发器,信号经过触发器后,模拟信号转化为0、1的数字信号,然后存储在“输入数据寄存器GPIOx_IDR”中,通过读取该寄存器就可以了解GPIO引脚的电平状态。

14.2 GPIO工作模式

        GPIO有八种工作模式,分别如下,我们分输入,输出和复用功能3个大类进行描述。

        1、输入浮空

        2、输入上拉

        3、输入下拉

        4、模拟输入

        5、开漏输出

        6、推挽输出

        7、开漏式复用功能

        8、推挽式复用功能

14.2.1 输入模式

        在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器GPIOx_IDR读取I/O状态。其中输入模式,可设置为上拉、下拉、浮空和模拟输入四种。

14.2.1.1 输入浮空模式

        上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO口的电平完全是由外部电路决定。如果IO引脚没有连接其他的设备,那么检测其输入电平是不确定的。该模式通常用于按键检测等场景。

图14.2-1 输入浮空模式 

14.2.1.2 输入上拉模式 

        上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大,所以只是“弱上拉”,不适合做电流型驱动。

图14.2-2 输入上拉模式 

14.2.1.3 输入下拉模式

        下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样可以节省一个外部电阻,但是内部下拉电阻的阻值较大,所以不适合做电流型驱动。  

图14.2-3 输入上拉模式 

14.2.1.4 模拟输入模式

        此模式下上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。其他外设可以通过模拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元单元,用于ADC/DAC等操作模拟信号的外设。  

        当GPIO引脚用于ADC采集电压的输入通道时,用作“模拟输入”功能,此时信号是不经过施密特触发器的,因为经过施密特触发器后信号只有0、1两种状态,所以ADC外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。同样,当GPIO引脚用于DAC作为模拟电压输出通道时,此时作为“模拟输出”功能,DAC的模拟信号输出就不经过双MOS管结构,模拟信号直接输出到引脚。

图14.2-4 模拟输入模式 

14.2.2 输出模式 

        输出模式主要是由双MOS管的开闭控制来实现的,画了一个示意图,如图14.2-5所示。在输出模式中,推挽模式时双MOS管以轮流方式工作,输出数据寄存器GPIOx_ODR可控制I/O输出高低电平。开漏模式时,只有N-MOS管工作,输出数据寄存器可控制I/O输出高阻态或低电平。输出速度可配置,有2MHz\10MHz\50MHz的选项。此处的输出速度即I/O支持的高低电平状态最高切换频率,支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可。

        在输出模式时施密特触发器是打开的,即可通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。

        下面我们分别进行介绍。

图14.2-5 输出模式控制示意图

14.2.2.1 推挽输出模式

图14.2-6 推挽模式等效电路 

        推挽输出模式,是根据这两个MOS管的工作方式来命名的。在该结构中输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。当引脚高低电平切换时,两个管子轮流导通,PMOS管负责灌电流-“推”,NMOS管负责拉电流-“挽”,使其负载能力和开关速度都比普通的方式有很大的提高。推挽输出的低电平为0伏,高电平为3.3伏,如上图所示推挽输出模式时的等效电路。 

        由于推挽输出模式下输出高电平时,是直接连接 V DD ,所以驱动能力较强,可以做电流型驱动,驱动电流最大可达 25mA,但是芯片的总电流有限,所以并不建议这样用,最好还是使用芯片外部的电源。 

14.2.2.2 开漏输出模式

图14.2-7 开漏输出等效电路 

        在开漏输出模式时,上方的P-MOS管完全不工作。如果我们控制输出为0低电平,N-MOS管导通,使输出接地,若控制输出为1(它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。为正常使用时必须外部接上拉电阻,等效电路如上图。它具有“线与”特性,也就是说,若有很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压。若其中一个引脚为低电平,那线路就相当于短路接地,使得整条线路都为低电平0。 

        那么开漏输出模式的应用场景是什么的?总结下来主要有2个:

        1.电平不匹配的场合 

        STM32输出的高电平是3.3V,如果外部需要更高或者更低的电压,那么推挽输出就不合适了。此时就可以在外部接一个上拉电阻,上拉电源为外部需要的电压,如5V,并且把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5伏的电平,输出低电平时则输出低电平0V,如图14.2-8。

图14.2-8 开漏模式输出5V电压 

        2.需要“线与”功能的总线电路 

        如 I2C通讯等需要“线与”功能的总线电路中一般要用开漏模式。多个控制器全部输入1高阻态时则为1,只要有一个为低电平,那么整个电路就是0.此时推挽输出模式就不可以了,因为有的控制器输入1,PMOS导通,有的控制器输入0,NMOS导通,此时双MOS管都存在导通的情况,直接就短路了。

未完待续.....

参考资料:

        【1】哔站江协科技STM32入门教程

        【2】《STM32单片机原理与项目实战》刘龙、高照玲、田华著

        【3】《ARM Cortex-M3嵌入式原理及应用》黄可亚著

        【4】《STM32嵌入式微控制器快速上手》陈志旺著

        【5】《STM32单片机应用与全案例实践》沈红卫等著

        【6】《野火STM32开发指南》

        【7】《正点原子STM32开发指南》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础名词概念

了解以下基础名词概念/定义: IP地址、子网掩码、网关、DNS、DHCP、MAC地址、网络拓扑、路由器、交换机、VPN、端口、TCP、UDP、HTTP、HTTPS、OSI模型、ARP、NAT、VLAN、FTP、SMTP、IMAP、SSL、ICMP、链路聚合、TRUNK、直连路由、静态路由、动态路由、IPV6 端口&am…

YOLOv10独家改进:BiFormer:从局部空间特征到高效的全局空间特征

目录 提出背景 子解法1: 稀疏注意力引入: 子解法2: 区域级路由: 子解法3: 令牌级注意力应用: 2.YOLOv10加入BRA 2.1新建models/attention/BiLevelRoutingAttention.py 2.2修改task.py 2.3 yolov10n-BRA.yaml 2.4 yolov10n-PSBRA.yaml 提出背景 论文:https://arxiv.org…

ABB机器人教程:工具载荷与有效载荷数据自动标定操作方法

目录 概述 工具载荷自动标定前的准备工作 进入载荷识别服务例行程序 工具载荷识别与标定操作 有效载荷识别与标定操作要点 4轴码垛类型机器人载荷数据标定说明 概述 在使用ABB机器人前需要正确标定一些关键数据,其中就包含载荷数据。理论上讲,安装…

【协议-指南】

协议-指南 ■ CAN-通讯协议 ■ CAN-通讯协议 添加链接描述

issues.sonatype.org网站废弃,Maven仓库账号被废弃问题解决

问题起因: 今天自己的项目发布了一个新版本,打算通过GitHub流水线直接推送至Maven中央仓库,结果发现报错 401,说我的账号密码认证失败。我充满了疑惑我寻思难度我的号被盗掉了吗。于是我打开Nexus Repository Manager尝试登录账号…

代码重构:解读重构概念及重构实战

一.重构是什么(what) 重构(refactoring):在不改变代码外在行为的前提下,对代码作出修改,以改进程序的内部结构。 1.本质上说,重构就是在代码写好之后改进他的设计 传统开发过程中是先设计,再开发,更像是瀑布开发模式…

【b站-湖科大教书匠】2 物理层-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 物理层 2.1 物理层的基本概念 2.2 物理层下面的传输媒…

Android Studio 安卓手机上实现火柴人动画(Java源代码—Python)

android:layout_marginLeft“88dp” android:layout_marginTop“244dp” android:text“Python” android:textSize“25sp” app:layout_constraintStart_toStartOf“parent” app:layout_constraintTop_toTopOf“parent” /> </androidx.constraintlayout.widget.…

Python - Excel查找和替换详解 (在工作表,行,列或单元格中替换数据,替换单元格部分内容)

目录 安装Python Excel库 Python在Excel工作表中查找和替换数据 Python在Excel特定行中查找和替换数据 Python在Excel特定列中查找和替换数据 Python在Excel特定单元格区域中查找和替换数据 Python查找和替换Excel单元格的部分数据 在日常工作中&#xff0c;我们经常面临…

卤货商家配送小程序商城是怎样的模式

无论生意大小、打造品牌都是必要的一步&#xff0c;只要货品新鲜、味道高、性价比高&#xff0c;其新客转化/老客复购数量都不少&#xff0c;卤货种类多且复购多个单独/聚会场景&#xff0c;以同城主要经营&#xff0c;也有部分品牌有外地食品配送需要。 想要进一步品牌传播、…

Linux PXE高效批量装机

部署PXE远程安装服务 在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢?传统的USB光驱、移动硬盘等安装方法显然已经难以满足需…

文本编辑命令和正则表达式

一、 编辑文本的命令 正则表达式匹配的是文本内容&#xff0c;Linux的文本三剑客&#xff0c;都是针对文本内容。 文本三剑客 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 &#xff08;本文不相关&#xff09; awk&#xff1a;按行取列 &#…

电子电气架构——由NRC优先级引起的反思

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

一文详解去噪扩散概率模型(DDPM)

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Django之云存储(二)

一、Django使用云存储 建立项目 django-admin startproject project_demo创建子应用 python manage.py startapp app_name修改配置文件,设置模板视图路径 settings.py TEMPLATES = [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR,…

如何在 MySQL 中导入和导出数据库以及重置 root 密码

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何导入和导出数据库 导出 要导出数据库&#xff0c;打开终端&#xff0c;确保你没有登录到 MySQL 中&#xff0c;然后输入以下命令&…

sd StableDiffusion库学习笔记

目录 torchmetrics准确率计算 ConsistencyDecoder DeepSpeed realesrgan BasicSR超分辨率&#xff0c;去噪&#xff0c;去模糊&#xff0c;去 JPEG 压缩噪声 segment_anything mmengine controlnet_aux accelerate transfersformer pytorch_fid einops compel tra…

Ike-scan一键发现通过互联网的IPsec VPN服务器(KALI工具系列二十八)

目录 1、KALI LINUX 简介 2、Ike-scan工具简介 3、信息收集 3.1 目标主机IP&#xff08;服务器&#xff09; 3.2 KALI的IP 4、操作示例 4.1 简单扫描 4.2 范围扫描 4.3 扫描多个目标 4.4 输出扫描结果 4.5 特殊扫描 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功…

基于Vue-cli脚手架搭建项目使用ElementUI组件

项目结构 node_modules 项目依赖的外部组件文件放在此处,例如vue public index.html是对外提供的唯一的html文件 src assets 存放静态文件 例如图片 css js等文件 components 里面存放的是组件 App.vue是组件 main.js是项目配置文件 package.json存放的是项目依赖的…

IEEE RAL 具有高运动性能的仿旗鱼机器人协同运动机制研究

水下机器人作为军用侦察、监测及攻击装置备受关注&#xff0c;目前传统水下机器人普遍采用螺旋桨作为推进器&#xff0c;但高噪音、高能耗等问题限制了应用范围。鱼类通过自然选择进化出优异的运动性能&#xff0c;特别是在海洋中游动速度快、机动性强的旗鱼。为了探究快速和高…