你真的懂吗系列——GPIO

news2024/11/24 5:51:42

你真的懂吗

文章目录

  • 你真的懂吗
  • 前言
  • 一、GPIO介绍
  • 二、GPIO基本结构
  • 三、GPIO的八种模式
    • 浮空输入
    • 输入上拉
    • 输入下拉
    • 模拟输入
    • 开漏输出
    • 推挽输出
    • 什么是推挽结构和推挽电路?
    • 开漏输出和推挽输出的区别?
    • 开漏式复用
    • 推挽式复用


前言

最近在做STM32的时候发现有些寄存器功能并不熟悉,我自己问了一下自己,你真的懂吗?于是便有了这个系列的文章。希望我你能够真的懂。

一、GPIO介绍

GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。
对于STM32来说芯片信号不同,GPIO的数量不同 但是都是叫GPIOX, STM32的大部分引脚除了当GPIO使用之外,还可以复用为外设功能引脚,这篇文章都会详细解释。

二、GPIO基本结构

在这里插入图片描述
这张图相信大家都不陌生,你有没有好好看过这张图呢,下面介绍一下各个元器件的功能。、
① 保护二极管
保护二极管共有两个,用于保护引脚外部过高或过低的电压输入。当引脚输入电压高于VDD 时,上面的二极管导通,当引脚输入电压低于 VSS 时,下面的二极管导通,从而使输入芯片内部的电压处于比较稳定的值。虽然有二极管的保护,但这样的保护却很有限,大电压大电流的接入很容易烧坏芯片。所以在实际的设计中我们要考虑设计引脚的保护电路。
② 上拉、下拉电阻
它们阻值大概在 30~50K 欧之间,可以通过上、下两个对应的开关控制,这两个开关由寄存器控制。当引脚外部的器件没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电平由引脚内部上、下拉决定,开启内部上拉电阻工作,引脚电平为高,开启内部下拉电阻工作,则引脚电平为低。同样,如果内部上、下拉电阻都不开启,这种情况就是我们所说的浮空模式。浮空模式下,引脚的电平是不可确定的。引脚的电平可以由外部的上、下拉电平决定。需要注意的是,STM32 的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还是得外部上拉。
③ 施密特触发器
对于标准施密特触发器,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;当输入在正负向阈值电压之间,输出不改变,只有当输入电压发生足够的变化时,输出才会变化,因此将这种元件命名为触发器。这种双阈值动作被称为迟滞现象,表明施密特触发器有记忆性。从本质上来说,施密特触发器是一种双稳态多谐振荡器。
施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器。
在这里插入图片描述
A是比较器 B是施密特触发器
④ P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。
开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。推挽输出:这两只对称的 MOS 管每次只有一只导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载拉电流。推拉式输出既能提高电路的负载能力,又能提高开关速度。
这里需要注意的是,在查看《STM32中文参考手册》中的GPIO的表时,会看到有“FT”一列,这代表着这个GPIO口时兼容3.3V和5V的;如果没有标注“FT”,就代表着不兼容5V。

三、GPIO的八种模式

GPIO的八种模式:四种输入((浮空输入、上拉输入、下拉输入、模拟输入))和四种输出((开漏输出、开漏复用输出、推挽输出、推挽复用输出))

浮空输入

上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO 口的电平完全是由外部电路决定。如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。。
在这里插入图片描述

输入上拉

上拉电阻导通,施密特触发器打开,输出被禁止。但是内部上拉电阻的阻值较大,所以只是“弱上拉”,不适合做电流型驱动。在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平也还是低电平。
在这里插入图片描述

输入下拉

下拉电阻导通,施密特触发器打开,输出被禁止。但是内部上拉电阻的阻值较大,所以只是“弱上拉”,不适合做电流型驱动。在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也还是高电平。
在这里插入图片描述

模拟输入

上下拉电阻断开,施密特触发器关闭,双 MOS 管也关闭。I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,该模式用于 ADC 采集或者 DAC 输出,或者低功耗下省电。
在这里插入图片描述

开漏输出

开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;P-MOS 管是一直截止的,所以 P-MOS 管的栅极一直接 VSS。如果输出数据寄存器设置为 0 时,经过“输出控制”的逻辑非操作后,输出逻辑 1 到 N-MOS 管的栅极,这时 N-MOS 管就会导通,使得 I/O 引脚接到 VSS,即输出低电平。如果输出数据寄存器设置为 1 时,经过“输出控制器”的逻辑非操作后,输出逻辑 0 到N-MOS 管的栅极,这时 N-MOS 管就会截止。因为 P-MOS 管是一直截止的,使得 I/O 引脚呈现高阻态,即不输出低电平,也不输出高电平。因此要 I/O 引脚输出高电平就必须接上拉电阻。
如果有很多开漏模式的引脚连在一起的时候,只有当所有引脚都输出高阻态,电平才为 1,只要有其中一个为低电平时,就等于接地,使得整条线路都为低电平 0。 IIC 通信(IIC_SDA)就用到这个原理。
在开漏输出模式下,施密特触发器是打开的,所以 IO 口引脚的电平状态会被采集到输入数据寄存器中,如果对输入数据寄存器进行读访问可以得到 IO 口的状态。也就是说开漏输出模式下,我们可以对 IO 口进行读数据。
在这里插入图片描述

推挽输出

推挽输出模式 P-MOS 管和 N-MOS 管都用上。如果输出数据寄存器设置为 0 时,经过“输出控制”的逻辑非操作后,输出逻辑 1 到 PMOS 管的栅极,这时 P-MOS 管就会截止,同时也会输出逻辑 1 到 N-MOS 管的栅极,这时 N-MOS 管就会导通,使得 I/O 引脚接到 VSS,即输出低电平。
如果输出数据寄存器设置为 1 时,经过“输出控制”的逻辑非操作后,输出逻辑 0 到 NMOS 管的栅极,这时 N-MOS 管就会截止,同时也会输出逻辑 0 到 P-MOS 管的栅极,这时 PMOS 管就会导通,使得 I/O 引脚接到 VDD,即输出高电平。上面的描述可以知道,推挽输出模式下,P-MOS 管和 N-MOS 管同一时间只能有一个 MOS管是导通的。当引脚高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有很大的提高。
另外在推挽输出模式下,施密特触发器也是打开的,我们可以读取 IO 口的电平状态。
由于推挽输出模式输出高电平时,是直接连接 VDD ,所以驱动能力较强,可以做电流型驱动,驱动电流最大可达 25mA。该模式也是最常用的输出模式。
在这里插入图片描述

什么是推挽结构和推挽电路?

推挽结构一般是指两个参数相同的三极管或MOS管分别受两互补信号的控制,总是在一个三极管或MOS管导通的时候另一个截止。高低电平由输出电平决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

开漏输出和推挽输出的区别?

开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内); 推挽输出:可以输出强高、低电平,连接数字器件。
在这里插入图片描述
左边的便是推挽输出模式,其中比较器输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当比较器输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平。右边的则可以理解为开漏输出形式,需要接上拉。

开漏式复用

一个 IO 口可以是通用的 IO 口功能,还可以是其他外设的特殊功能引脚,这就是 IO 口的复用功能。一个 IO 口可以是多个外设的功能引脚,我们需要选择作为其中一个外设的功能引脚。当选择复用功能时,引脚的状态是由对应的外设控制,而不是输出数据寄存器。与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。
在这里插入图片描述

推挽式复用

推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。
在这里插入图片描述

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

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

相关文章

利用 Zero-1-2-3 进行多视图 3D 重建:从单图像到多视图 3D 模型的生成

3D 模型生成在计算机视觉领域有着广泛的应用,从虚拟现实到自动驾驶,基于单张图像的 3D 重建技术正在迅速发展。这篇博客将带你深入探索如何使用 Zero-1-2-3 框架进行多视图 3D 重建,通过详细解析该框架中的代码结构和功能,帮助你理…

BUUCTF 之Basic 1(BUU LFI COURSE 1)

1、启动靶场,会生成一个URL地址,打开给的URL地址,会看到一个如下界面 可以看到是一个PHP文件,非常的简单,就几行代码,判断一下是否有一个GET的参数,并且是file名字,如果是并且加载&a…

C语言 预处理详解(二) #命令行定义 #条件编译 #文件包含 #其他预处理指令

文章目录 前言 一、命令行定义 二、条件编译 三、文件包含 什么叫做文件包含? (一)、本地文件包含 (二)、库文件包含 如何做才能避免头文件被多次包含呢? 方法一:利用条件编译: 方法二:利用 #pragma once 四、其他预处…

鸿蒙界面开发——组件(8):图形绘制

绘制几何图形——父组件Shape 绘制组件的父组件,父组件中会描述所有绘制组件均支持的通用属性。 1、绘制组件使用Shape作为父组件,实现类似SVG的效果。 2、绘制组件单独使用,用于在页面上绘制指定的图形。 Shape(value?: PixelMap) value …

指针之旅(4)—— 指针与函数:函数指针、转移表、回调函数

目录 1. 函数名的理解 1.1 “函数名”和“&函数名”的含义 1.2 函数(名)的数据类型 2. 函数指针(变量) 2.1 函数指针(变量)的创建格式 2.2 函数指针(变量)的使用格式 2.3 例子 判别 3. typedef 关键字 3.1 typedef的作用 3.2 typedef的运作逻辑 和 函数指针类型…

全球瞩目丨2024深圳秋季糖酒会火热招商中

第 111 届深圳秋季全国糖酒会 2024 年 10 月29-31日 将在深圳国际会展中心(宝安新馆)盛大举行。 这是一场备受瞩目的行业盛会, 为企业提供了一个展示产品、 拓展市场、加强合作的绝佳机会。 作为亚洲地区食品行业规模最大、最具影响力的…

stm32之硬件SPI读写W25Q64存储器应用案例

系列文章目录 1. stm32之SPI通信协议 2. stm32之软件SPI读写W25Q64存储器应用案例 3. stm32之SPI通信外设 文章目录 系列文章目录前言一、电路接线图二、应用案例代码三、应用案例代码分析3.1 基本思路3.2 相关库函数介绍3.3 MySPI模块3.3.1 模块初始化3.3.2 SPI基本时序单元模…

指挥中心操作台厂家哪家好?选择时需要注意哪些?

在构建高效、稳定的指挥中心过程中,操作台作为核心设备之一,其选择至关重要。面对市场上琳琅满目的指挥中心操作台厂家,如何挑选出既符合需求又品质卓越的合作伙伴,成为众多采购者关注的焦点。接下来就给大家从以下几个方面探讨指…

uniapp设置隐藏qiun-data-charts数据标签

隐藏前: 隐藏后: 具体代码实现: 在opts配置中传入 "dataLabel": false 即可

个性化推荐兴趣社交社交平台

1 项目介绍 社交兴趣平台是一个基于 spring boot、vue3 的社交平台,旨在为用户提供一个分享、交流和发现各种有趣内容的场所。 该平台的核心功能是让用户能够创建个人主页并发布自己的动态、经历、见解和创意。用户可以自由发表各种主题的内容,涵盖但不…

《向量数据库指南》——非结构化数据大爆发,向量数据库引领电商推荐新潮流

在当今数据驱动的时代,数据作为企业的核心资产,其价值挖掘的深度与广度直接关乎到企业的竞争力和创新能力。长久以来,结构化数据因其规整的格式和易于分析的特性,成为了数据科学家和工程师们研究的热点,其潜力在多个领域已被充分挖掘和应用。然而,随着互联网的飞速发展,…

C语言常见运算符

C语言提供了丰富的运算符,这些运算符用于执行各种类型的操作,比如算术运算、比较运算、逻辑运算、位运算等。下面是一些基本的C语言运算符分类及其示例: 1. 算术运算符 加法 (): a b 表示a和b的和。减法 (-): a - b 表示a和b的差。乘法 (*…

2024年Ai智能绘画Stable Diffusion软件+整合包+保姆式教程

前言 在2024年的科技浪潮中,一款名为Stable Diffusion的AI智能绘画软件吸引了全球的目光。它不仅为艺术家和设计师提供了无限创意的可能,也让我们每个人都能轻松体验绘画的乐趣。那么,Stable Diffusion究竟有何魅力?它又是如何工…

消息队列实现多人聊天

消息队列实现多人聊天 分析: 每个程序都有两个任务,一个任务是负责接收消息,一个任务是负责发送消息,通过 fork 创建子进程实现多任务。 一个进程负责接收信息,它只接收某种类型的消息,只要别的进程发送…

2024i春秋第四届长城杯网络安全大赛暨京津冀网络安全技能竞赛初赛wp-flowershop+easyre

flowershop 如图所示,v8是钱的数量,strncpy从src复制三个字符给dest的数组里,最后一个元素是0,相当于字符串截断,strcmp是比较c和dest中的内容,如果相等就不会exit(0);双击c进去看,c…

Pr:新建序列 - 设置

在“新建序列”对话框中,“设置” Settings选项卡的主要用途是选择预设或手动配置序列的参数,以确保与用户的素材和输出需求相匹配。 可以根据项目的具体要求自定义序列中的视频和音频格式,包括帧速率、分辨率、工作色彩空间、音频采样率等以…

nvm install 16.14.1报错“Node.js v16.14.1 is not yet released or available.”

原因: 使用命令nvm ls available,结果列出的可供下载的版本列表为空,这就是原因了 解决办法:修改镜像 nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/ 结果&#xf…

基于SpringBoot+Vue+MySQL的校园生活服务平台

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿沟,信息的…

springboot优雅停机无法关闭进程,kill无法停止springboot必须kill -9,springboot线程池使用

背景最近项目在jenkins部署的时候发现部署很慢&#xff0c;查看部署日志发现kill命令执行后应用pid还存在&#xff0c;导致必须在60秒等待期后kill -9杀死springboot进程 应用环境 springboot <dependency><groupId>org.springframework.boot</groupId>&l…