STM32 GPIO

news2024/11/27 2:31:06

STM32 GPIO

GPIO简介

  • GPIO(General Purpose Input Output)通用输入输出口,也就是我们俗称的IO口

  • 根据使用场景,可配置为8种输入输出模式

  • 引脚电平:0V~3.3V,部分引脚可容忍5V

    • 数据0就是低电平,也就是0V;数据1就是高电平,也就是3.3V。
    • 容忍5V的意思是可以在这个端口输入5V的电压,也认为是高电平,但是对于输出而言,最大就只能输出3.3V,因为供电就只有3.3V。
      • 具体哪些引脚可以容忍5V,见引脚定义表I/O口电平一列带FT(Five Tolerate)的就是可以容忍5V的,不带FT的就只能接入3.3V的电压。
  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序(I2C,SPI或者某个芯片特定的协议)等

    • 在其他场景,只要是可以用高低电平来进行控制的地方,都可以用GPIO来完成,如果控制的是功率比较大的设备,只需要再假如驱动电路即可。
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

    • 输入模式最常见的就是读取按键,用来捕获我们的按键按下事件。
    • 另外也可以读取带有数字输出的一些模块,比如光敏电阻模块,热敏电阻模块。
    • 如果这个模块输出的是模拟量,那GPIO还可以配置成模拟输入模式,再配合内部的ADC外设,就能直接读取端口的模拟电压。
    • 模拟通信协议时,接受通信线上的数据,也是靠GPIO的输入来完成的。

GPIO基本结构

  • APB2外设总线,所有的GPIO都是挂载在APB2外设总线上的。
  • GPIO外设的名称是按照GPIOA、GPIOB、GPIOC等等这样来命名的,每个GPIO外设,总共有16个引脚,编号是从0~15,那GPIO的第0号引脚,我们一般把它称作PA0,接着第1号引脚就是PA1,然后PA2,以此类推,一直到PA15,GPIOB也是如此,从PB0~PB15这样来命名。
  • 在每隔GPIO模块内,主要包含了寄存器和驱动器这些东西。
    • 寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了。
      • 这个寄存器的每一位对应一个引脚
        • 输出寄存器写1,对应的引脚就会输出高电平,写0,就输出低电平。
        • 输入寄存器读取为1,就证明对应的端口目前是高电平,读取为0,就是低电平。
        • 因为STM32是32位的单片机,所以STM32内部的寄存器都是32位的。但这个端口只有16位,所以这个寄存器只有低16位有对应的端口,高16位是没有用到的。
    • 这个驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据,如果要进行点灯这样的操作的话,还是需要驱动器来负责增大驱动能力。

在这里插入图片描述

GPIO位结构

  • 三个寄存器

    • 位设置/清除寄存器
    • 输出数据寄存器
    • 输入数据寄存器
  • 两个驱动器

    • 输入驱动器
    • 输出驱动器
  • I/O引脚

  • 输入部分

    • 输入信号首先是通过I/O引脚进来,这里接了两个保护二极管,是对输入电压进行限幅的。上面这个二极管接VDD,3.3V,下面接VSS,0V。
      • 如果输入电压比3.3V还要高,那上方这个二极管就会导通,输入电压产生的电流就会直接流入VDD而不会流入内部电路,这样就可以避免过高的电压对内部这些电路产生伤害。
      • 如果输入电压比0V还要低,这个电压是相对VSS的电压,所以是可以有负电压的,那这时下方这个二极管就会导通,电流会从VSS直接流出去,而不会从内部电路汲取电流,也是可以保护内部电路的。
      • 如果输入电压在0~3.3V之间,那两个二极管均不会导通,这时二极管对电路没有影响,这就是保护二极管的用途。
    • 接下来输入信号向上,这里连接了一个上拉电阻和一个下拉电阻,上拉电阻是VDD,下拉电阻是VSS,这个开关可以通过程序进行配置。
      • 如果上面导通、下面断开,就是上拉输入模式;如果下面导通、上面断开,就是上拉输入模式,如果两个都断开,就是浮空输入模式。
      • 上拉电阻和下拉电阻其实是为了给输入提供一个默认的输入电平的,因为对于一个数字的端口,输入不是高电平就是低电平。如果输入引脚什么都不接,就无法判断此刻是高点平还是低电平,这时输入就会处于一种浮空的状态,引脚的输入电平极易守外界干扰而改变。为了避免引脚悬空导致的输入数据不确定,我们就需要在这里加上上拉电阻或者下拉电阻。
        • 如果接入上拉电阻,当引脚悬空时,还有上拉电阻来保证引脚的高电平,所以上拉输入又可以称作是默认为高电平的输入模式。
        • 下拉输入也是同理,就是默认为低电平的输入方式。
      • 这个上拉电阻和下拉电阻的阻值都是比较大的,是一种弱上拉和弱下拉,目的是尽量不影响正常的输入操作。
    • 接下来,信号通过施密特触发器(TTL肖基特触发器),这个施密特触发器的作用就是对输入电压进行整形。
      • 它的执行逻辑是
        • 如果输入电压大于某一阈值,输出就会瞬间升为高电平。
        • 如果输入电压小于某一阈值,输出就会瞬间降为低电平。
    • 举个例子,因为这个引脚的波形是外界输入的,虽然是数字信号,实际情况下可能会产生各种失真,比如一个夹杂了波动的高低变化电平信号,如果没有施密特触发器,那很有可能因为干扰而导致误判,如果有了施密特触发器,确定一个阈值上限和下限,高于上限输出高电平,低于下限输出低电平 。对于施密特触发器来说,只有高于上限或者低于下限,输出才会变化,即使信号在下限附近来回横跳,因为没有达到阈值上限,所以一直会输出低电平,知道高于上限,才会输出高电平。
    • 使用两个比较阈值来进行判断,中间留有一定的变化范围,可以有效地避免因信号波动造成的输出抖动现象。
    • 经过施密特触发器整形的波形就可以直接写入输入数据寄存器了,再用程序读取输入数据寄存器某一位的数据,就可以知道端口的输入电平了。
    • 模拟输入/复用功能输入(至片上外设),就是连接到片上外设的一些端口
      • 模拟输入,连接到ADC上,因为ADC需要接收模拟量,所以与之相连的这根线是接在施密特触发器之前的。
      • 复用功能输入,连接到其他需要读取端口的外设上,比如串口的输入引脚等,与之相连的这根线接收的是数字量,所以接在施密特触发器之后。
  • 输出部分

    • 数字部分可以由输出数据寄存器或片上外设控制,两种控制方式通过数据选择器接到了输出控制部分。
      • 通过输出数据寄存器进行控制,就是普通的IO口输出,写这个数据寄存器的某一位就可以操作对应的某个端口了。
        • 位设置/清除寄存器可以用来单独操作输出数据寄存器的某一位,而不影响其他位。
        • 因为这个输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写,所以如果想单独控制其中某一个端口而不影响其他端口的话,就需要一些特殊的操作方式。
          • 第一种方式是先读出这个寄存器,然后用按位与和按位或的方式更改某一位,最后再将更改后的数据写回去,在C语言中就是&=和|=的操作。这种方法比较麻烦,效率不高,对于IO口的操作而言不太合适。
          • 第二种方式是通过设置这个位设置/清除寄存器。
            • 如果我们要对某一位进行置1操作,在位设置寄存器的对应位写1即可,剩下不需要操作的位写0,这样内部就会有电路,自动将输出数据寄存器中对应位置为1,而剩下写0的位则保持不变,这样就保证了只操作其中某一位而不影响其他位,并且这是一步到位的操作。
            • 如果想对某一位进行清0的操作,就在位清除寄存器的对应位写1即可,这样内部电路就会把这一位清零了。
          • 第三种方式就是读写STM32中的“位带”区域,“位带”区域,专门分配的有一段地址区域,这段地址影射了RAM和外设寄存器所有的位,读写这段地址中的数据,就相当于读写所映射位置的某一位。
      • 输出控制之后接到了两个MOS管,上面是P-MOS,下面是N-MOS,MOS管就是一种电子开关,我们的信号来控制开关的导通和关闭,开关负责将IO口接到VDD或者VSS。在这里可以选择推挽、开漏或关闭三种输出方式。
        • 在推挽输出下,P-MOS和N-MOS均有效,数据寄存器为1时,上管导通,下管断开,输出直接到VDD,输出高电平;数据寄存器为0时,上管断开,下管导通,输出直接到VSS,就是输出低电平。这种模式下,高低电平均具有比较强的驱动能力,所以推挽输出模式也可以教强推输出模式。
          • 在推挽输出模式下,STM32对IO口具有绝对的控制权,输出高低电平由STM32控制。
        • 在开漏输出模式下,P-MOS无效,N-MOS有效,数据寄存器为1时,下管断开,这时输出相当于断开,也就是高阻态;数据寄存器为0时,下管导通,输出直接接到VSS,输出低电平。
          • 开漏模式下,只有低电平有驱动能力,高电平是没有驱动能力的(外接电源)。
          • 开漏模式可以作为通信协议的驱动方式,比如I2C通信的引脚,就是使用的开漏模式。在多机通信的情况下,这个模式可以避免各个设备的相互干扰。
          • 开漏模式还可以用于输出5V的电平信号,比如在IO口外界一个上拉电阻到5V的电源,当输出低电平时,由内部的N-MOS直接接VSS,当输出高电平时,由外部的上拉电阻拉高至5V,这样就可以输出5V的电平信号,用于兼容一些5V电平的设备。
        • 关闭模式,就是当引脚配置为输入模式的时候,这两个MOS管都无效,也就是输出关闭,端口的电平由外部信号来控制。

在这里插入图片描述

GPIO模式

  • 通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
  • 除了模拟输入这个模式会关闭数字的输入功能,在其他7个模式中,所有的输入都是有效的。
模式名称性质特征
浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定 (在使用浮空输入时,端口一定要接上一个连续的驱动源,不能出现悬空的状态)
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC (ADC模数转换器的专属配置)
开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS (开漏输出的高电平呈现高阻态,没有驱动能力)
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS (推挽输出的高低电平都是有驱动能力的)
复用开漏输出 (由片上外设控制)数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出 (由片上外设控制)数字输出由片上外设控制,高电平接VDD,低电平接VSS

浮空/上拉/下拉输入

  • 在输入模式下,输出驱动器是断开的,端口只能输入而不能输出。
  • 上面这两个电阻可以选择为上拉工作、下拉工作或者都不工作,对应的就是上拉输入、下拉输入和浮空输入。
  • 然后输入通过施密特触发器进行波形整形后,连接到输入数据寄存器。
  • 另外右边这个保护二极管这里,上面写的是VDD或VDD_FT,这就是3.3V端口和容忍5V端口的区别。
    • VDD_FT对5V容忍IO脚是特殊的,它与VDD不同。容忍5V的引脚,它的上边保护二极管需要做一下处理,要不然直接接VDD3.3V的话,外部再接入5V电压就会导致上边二极管开启,并且产生比较大的电流,这个是不太妥当的。

在这里插入图片描述

模拟输入

  • 输出断开,输入的施密特触发器也是关闭的无效状态。只剩下一根线,就是从引脚直接接入片上外设,也就是ADC,所以当我们使用ADC的时候,将引脚配置为模拟输入就行了,其他时候一般用不到模拟输入。

在这里插入图片描述

开漏/推挽输出

  • 输出是由输出数据寄存器控制的,这个P-MOS如果无效,就是开漏输出,如果P-MOS和N-MOS都有效,就是推挽输出。
  • 在输出模式下,输入模式也是有效的,但是在输入模式下,输出都是无效的。即输出模式的时候,也可以读取到输出引脚的电平。
    • 这是因为一个端口只能有一个输出,但可以有多个输入,所以当配置成输出模式的时候,内部也可以顺便输入一下,这个也是没什么问题。

在这里插入图片描述

复用开漏/推挽输出

  • 没有连接到输出数据寄存器,引脚的控制权转移到了片上外设,由片上外设来控制,在输入部分,片上外设也可以读取引脚的电平,同时普通的输入也是有效的,顺便接收一下电平信号。

在这里插入图片描述

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

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

相关文章

【开源三方库】Easyui:基于OpenAtom OpenHarmony ArkUI深度定制的组件框架

万冬阳 公司:中国科学院软件所 小组:知识体系工作组 简介 Easyui是一套基于ArkTS语言开发的轻量、可靠的移动端组件库,它是对OpenAtom OpenHarmony(以下简称“OpenHarmony”) ArkUI进行深度定制的组件框架。Easyui可扩…

等保测评怎么做?有哪些流程?

现在很多信息系统想要上线都需要做等保测评,如果不能通过等保测评,不仅系统不允许上线,同时一旦出现了网络安全事件,相关企业还需要承担重要的责任。目前如果是为政府、事业单位、国企等开发系统,等保测评报告也是重要…

怎么在web显示模型的动态应力图?

要在网页上显示模型的动态应力图,需要执行几个步骤。动态应力图通常涉及有限元分析 (FEA) 模拟中的应力和应变数据的可视化,可以使用 Python、JavaScript 等工具以及 Three.js、Plotly 或 D3.js 等库来渲染图一个网页。以下是该过程的概述: …

互联网是如何运作的?以前端角度出发(b站objtube的卢克儿听课笔记)

1、你是如何用你的计算机设备发送数据和接受数据的呢? 例如我们是如何访问到哔哩哔哩的数据的 当你的设备开始连接到互联网时,会被分配一个IP地址。 而哔哩哔哩的服务器也接入到互联网,它也将被分配一个IP地址。 我们常说你访问某个网站&a…

数据库|Binlog故障处理之drainer周期性罢工

目录 一、背景 二、故障现象 三、分析过程 四、解决方案 五、思考 六、总结 一、背景 最近,用户反馈我们的生产环境TiDB集群的drainer频繁发生故障。故障表现为服务崩溃无法启动,或者数据在运行过程中丢失,给我们的业务带来了很大的困扰…

uniapp刻度尺的实现(swiper)滑动打分器

实现图&#xff08;百分制&#xff09;&#xff1a;滑动swiper进行打分&#xff0c;分数加减 <view class"scoring"><view class"toggle"><view class"score"><text>{{0}}</text><view class"scoreId&quo…

GitHub金矿:一套智能制造MES的源代码,可以直接拿来搞钱的好项目

目前国内智能制造如火如荼&#xff0c;工厂信息化是大趋势。如果找到一个工厂&#xff0c;搞定一个老板&#xff0c;搞软件的小虾米就能吃几年。 中国制造业发达&#xff0c;工厂林立&#xff0c;但是普遍效率不高&#xff0c;需要信息化提高效率。但是矛盾的地方在于&#xf…

开源:特殊的垄断

免责声明&#xff1a;本博客旨在分享我对开源策略的理解和体会&#xff0c;不代表任何组织或机构的立场或观点&#xff0c;也不构成任何商业或投资的建议或担保。本博客的内容可能存在错误或遗漏&#xff0c;也可能随着时间的推移而变得过时或不适用。请在使用或依赖本博客的内…

4、FFmpeg命令行操作2

三、ffprobe命令 ffprobe命令- ffprobe用来查看多媒体文件的信息 常用命令如下所示: ffprobe -show_packets input.mp4 //获取文件信息并显示文件中每个帧的包信息(包含audio和video包),如下图所示: codec_type : 帧类型&#xff0c;如视频包、音频包等 stream_index : 多媒体的…

2023 ChinaJoy后,Flat Ads成为游戏、社交出海的新选择

今年ChinaJoy 展会&#xff0c;共吸引了来自世界各地的 500 多家企业参展&#xff0c;预计吸引超过33万人次参观。ChinaJoy年年有&#xff0c;那今年对于行业来说有什么新变化呢&#xff1f; 01 出海热潮不减&#xff0c;新增客户明显提升 据不完全统计&#xff0c;展会期间前…

雨云 宿迁 14900KF 高防云服务器性能测评

雨云游戏云上线了用I9 13900KF做CPU的VPS服务器&#xff0c;雨云游戏云VPS的14900KF和13900KF机型是纯大核的&#xff08;屏蔽小核&#xff09;保证你的VPS不会被分配到小核上而导致性能下降&#xff0c;水冷散热&#xff0c;超频至6.3Ghz&#xff0c;超高单核性能。 适合开我…

Django快速入门(一)

Django三板斧 1. 基本使用 三板斧: HttpResponse,render,redirect from django.shortcuts import HttpResponse,render,redirect# 一. 返回字符串类型的数据 return HttpResponse(字符串) # 二. 返回HTML文件 # 1. 动态HTML页面: return render(request,login.html) def ab…

Unity 3D 调整cube的颜色

1.选中Assets后&#xff0c;右键->Create->Material 2.调整Material的颜色&#xff0c;然后将Material拖到对应的cube上

家用工作站方案:ThinkBook 14 2023 版

本篇文章聊聊今年双十一&#xff0c;我新购置的家用工作站设备&#xff1a;ThinkBook 14 2023&#xff0c;一台五千元价位&#xff0c;没有显卡的笔记本。我为什么选择它&#xff0c;它又能做些什么。 写在前面 2021 年年中的时候&#xff0c;我写过一篇《廉价的家用工作站方…

【深入浅出Spring原理及实战】「夯实基础系列」360全方位渗透和探究Spring配置开发实战详解

360全方位渗透和探究Spring配置开发实战详解 Spring对于配置的转折点Xml配置 vs Java配置Xml配置模式的优点Xml配置模式的缺点Java配置模式的优点Java配置模式的缺点 Java编程配置流程配置代码案例 组件注入Bean注解配置自动扫描包路径和规则Filter常用的拦截类型FilterType.AS…

【广州华锐互动】VR安防网络综合布线仿真实训打造沉浸式的教学体验

随着科技的快速发展&#xff0c;综合布线技术在建筑、数据中心、网络基础设施等领域的应用越来越广泛。为了适应这一趋势&#xff0c;传统的教学方法已经无法满足现代教育的需求。因此&#xff0c;采用创新的教学手段&#xff0c;如虚拟现实&#xff08;VR&#xff09;技术&…

自动化测试框架 —— pytest框架入门篇

今天就给大家说一说pytest框架。 今天这篇文章呢&#xff0c;会从以下几个方面来介绍&#xff1a; 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 01、pytest框架介绍 pytest 是 pytho…

办公工具使用技巧汇总

总结下在使用办公工具时的一些技巧 1.word中自动排序 例如在表格中插入序号&#xff0c;如下图。有时候数据量较大时&#xff0c;一个一个的手动输入&#xff0c;效率不高&#xff0c;需要一种快捷的方式进行序号填充。 初级版本&#xff1a; 选择需要填写序号的列-开始工具…

从系统层到应用层,vivo 已在安全生态层

你每隔多久就会使用一次手机&#xff1f;调研结果也许会让你大吃一惊。 权威报告数据显示&#xff0c;2022年&#xff0c;24.9%的受访者每日使用手机时长超过10小时&#xff0c;其中3.8%的受访者“机不离手”&#xff0c;每日使用时长超过15小时。而真正让手机化身为时间吞金兽…

黑豹程序员-架构师学习路线图-百科:Knife4j API接口文档管理

文章目录 由来&#xff1a;接口文档第一代&#xff1a;Swagger第二代&#xff1a;Knife4j界面 由来&#xff1a;接口文档 古老编程是一个语言前后端通吃&#xff0c;ASP、JSP、PHP都是如此。 但随着项目规模变大&#xff0c;项目团队也开始壮大&#xff0c;岗位职责开始细分&a…