【STM32 |GPIO】GPIO结构、GPIO输出

目录

GPIO简介

GPIO的基本结构

 GPIO位结构(每一位的具体电路结构)

输入

上拉和下拉电阻

斯密特触发器

​编辑 

输出 

GPIO模式

​编辑 

浮空输入、上拉输入、下拉输入

模拟输入

 开漏输出和推挽输出

复用开漏输出和复用推挽输出 

LED和蜂鸣器介绍

LED和蜂鸣器的硬件电路

LED

蜂鸣器


GPIO简介

GPIO(General Purpose Input Output)通用输入输出口

可配置为8种输入输出模式

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

输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等


GPIO的基本结构

左边的是APB2外设总线;在stm32中所有的GPIO都是挂载在APB2外设总线上的,其中GPIO外设的名称都是按照GPIOA、GPIOB等等这样来命名的

每个GPIO外设,总共有16个引脚,编号是从0到15,GPIO的第0号引脚,我们一般把它称为PA0,接着第一号就是PA1..PA15以此来命名;

STM32是32位单片机,所以STM32内部的寄存器都是32位的,但这个端口只有16位,所以这个寄存器只有低16位对应的有端口,高16位是没有用的

在每个GPIO模块内,组要包含了寄存器和驱动器,寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了,寄存器的每一位对应一个引脚,其中,输出寄存器写1,对应的引脚就会输出高电平,写0就会输出低电平,输入寄存器读取为1,就证明对应的端口目前是高电平,读取为0,就是低电平;

驱动器是用来增加信号的驱动能力,寄存器只负责存储数据


 GPIO位结构(每一位的具体电路结构)

如下图为,stm32参考手册中的GPIO位结构的电路图。

 左边三个就是寄存器,中间部分是驱动器,右边是某一个IO口的引脚,如下三个红圈里的内容

 整体结构可以分为两个部分,上面是输入部分,下面是输出部分。

 


输入

首先是这个IO引脚,这里接了两个保护二极管,这个是对输入电压进行限幅的

上面二极管接VDD,3.3V,下面二极管接VSS,0V;

  • 如果输入电压比3.3v还要高,那上方这个二极管就会导通,输入电压产生的电流就会直接流入VDD而不会流入内部电路,这样就可以避免过高的电压对内部电路产生伤害,
  • 输入电压比0v还要低,这个电压是相对与VSS的电压,所以是可以有负电压的,那这时下方这个二极管就会导通,电流会从VSS直接流出来,电流会从VSS直接流出去,而不会从内部电路汲取电流,也是可以保护内部电路的
  • 输入电压在0-3.3v之间,那两个保护二极管均不会导通,这时二极管对电路没有影响,这就是保护二极管的用途


上拉和下拉电阻

上拉和下拉的作用是为了给输入提供一个默认的输入电平,因为对应一个数字的端口,输入不是高电平就是低电平;如果输入引脚哈都不接,这时输入就会处于一个浮空状态,引脚的输入电平极易受外界干扰而改变;为了避免引脚悬空导致的输入数据不稳定

上拉电阻至VDD,下拉电阻至VSS,这个开关是可以通过程序进行配置的。

上面导通、下面断开,就是上拉输入模式;上面断开、下面导通,就是下拉输入模式;上面断开、下面断开,就是浮空输入模式。

如果接入上拉电阻,当引脚悬空时,还有上拉电阻来保证引脚的高电平,所以上拉输入是默认为高电平的输入模式,下拉也是同理。

上拉电阻和下拉电阻的阻值都是比较大的,是一种弱上拉和弱下拉 ,目的是尽量不影响正常的输入操作。


斯密特触发器

是对输入电压进行整形,输入电压大于某一阈值,输出就会瞬间升为高电平,如果输入电压小于某一阈值,输出就会瞬间降为低电平。

 

有效的避免因信号波动造成的输出抖动现象。 

 

面还有两路线路,是连接到片上外设的一些端口;其中一个是模拟输入,这个可以连接到ADC上,因为ADC需要接受模拟量,所以这根线是接到施密特触发器前面的,另一个是复用功能输入,这个是连接到其他需要读取端口的外设上的(比如,串口的输入引脚等),这根线接受的是数字量,所以在施密特触发器后面


输出 

输出部分由输出数据寄存器或片上外设控制,两种控制方式通过这个数据选择器接到输出控制部分;如果选择通过输出数据寄存器进行控制,就是普通的IO口输出,写这个输出数据寄存器的某一位就可以操作对应的某个端口了。左边还有个叫做位设置/清除寄存器,这个可以用来单独操作输出寄存器的某一位,而不影响其它位

数据选择器

输出控制之后就接到了两个MOS管,上面是P-MOS,下面是N-MOS,这个MOS管就是一种电子开关,我们的信号来来控制开关的导通和关闭

在推挽输出模式下,P-MOS和N-MOS均有效,这种模式下,高低电平均有较强的驱动能,所以推挽输出模式也可以叫强推输出模式,在推挽输出模式下,stm32对IO口具有绝对的控制权,高低电平都由stm32说的算

数据寄存器为1时。上管导通,下管断开,输出直接接到VDD,就是输出高电平

 数据寄存器为0时。上管断开,下管导通,输出直接接到VSS,就是输出低电平。

在开漏输出模式下,这个P-MOS是无效的,只有N-MOS在工作

数据寄存器为1时。下管断开,这时输出相当于断开,也就是高阻模式

 

 数据寄存器为0时。下管导通,输出直接接到VSS,也就是输出低电平

关闭状态输出方式

这个是当引脚配置为输入模式的时候,这两个MOS管都无效,也就是输出关闭,端口的电平由外部信号来控制。


GPIO模式

 


浮空输入、上拉输入、下拉输入

这三个模式的电路结构基本是一样的,区别就是上拉电阻和下拉电阻的连接,它们都属于数字的输入口,特征就是,都可以读取端口的高低电平;当使用浮空输入时,端口一定要接上一个连续的驱动源,不能出现悬空状态。

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


模拟输入

这个模拟输入,可以说是ADC模数转换器的专属配置了,模拟输入的结构如下。

这里输出是断开的,输入的施密特触发器也是关闭的无效状态,所以整个GPIO大部分都是无效的,只有下图的红色线有效,也就是从引脚直接接入片上外设,也就是ADC。


 开漏输出和推挽输出

这两个电路结构也基本一样,数字输出,可以用于输出高低电平,区别就是开漏输出的高电平呈现的是高阻态,没有驱动能力,而推挽输出的高低电平都是具有驱动能力的

输出是由输出数据寄存器控制的,这个P-MOS无效就是开漏输出,如果P-MOS和N-MOS都有效,就是推挽输出;另外,在输出模式下,输入模式也是有效的


复用开漏输出和复用推挽输出 

这两模式和普通的开漏输出和推挽输出差不多,只不过是复用的输出,引脚电平是由片上外设控制的,模式结构如下:

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


LED和蜂鸣器介绍

 LED:发光二极管,正向通电点亮,反向通电不亮

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

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

左边是正级,右边是负极

长脚为正极,短脚为负极

有源蜂鸣器内部电路,这里用了一个三极管开关进行驱动,我们将VCC和GND分别接上正负极的供电,然后中间引脚2接低电平,蜂鸣器就会响,接高电平,蜂鸣器就关闭


LED和蜂鸣器的硬件电路

LED

限流电阻一般都是要接的,一方面它可以防止LED因为电流过大而烧毁,另一方面它可以调整LED的亮度,如果你觉得LED太亮可以适当的增大限流电阻的阻值。

高电平驱动的电路。LED负极接到GND,正极通过一个限流电阻接到PA0上,这时就是高电平点亮,低电平熄灭。

低电平驱动的电路,LED正极接3.3v,负极通过一个限流电阻接到PA0上,当PA0输出低电平时,LED两端就会产生电压差,就会形成正向导通的电流,这样LED就会点亮了;当PA0输出高电平时,因为LED两端都是3.3v的电压,不会形成电流,所以高电平LED就会熄灭。

 


蜂鸣器

这里使用了三极管开关的驱动方案,三极管开关是最简单的驱动电路了,对于功率稍微大一点的 ,直接用IO口驱动会导致STM32负担过重,这时可以用一个三极管驱动电路来完成驱动任务

需要注意,PNP的三极管最好接在上边,NPN的三极管最好接到下边,这是因为三极管的通断是需要在发射极和基极产生一定的开启电压的,如果将负载接在发射极这边,可能会导致三极管不能开启。

下图为PNP三极管的驱动电路,三极管的左边是基极,带箭头的是发射极,剩下的是集电极。左边的基极给低电平,三极管就会导通,再通过3.3V和GND就可以给 蜂鸣器提供驱动电流了。基极给高电平,三极管截止,蜂鸣器没有电流。

 下图为NPN三极管的驱动电路,同样,左边是基极,带箭头的是发射极,剩下的是集电极;它的驱动逻辑和上面的是相反的,基极给高电平导通,低电平断开。

 


希望对你有帮助

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

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

相关文章

【资源分享】完胜谷歌翻译的Deepl翻译

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

【数据结构与算法】力扣 111. 二叉树的最小深度

题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 2示例 2&#…

长事务的理解和预防

我们常常听说数据库发生了“长事务”而导致很严重的后果。那么何为长事务?长事务是如何产生的?长事务对数据库有什么影响?如何防止长事务的产生?以下对这几方面进行阐述和说明,以加深对SinoDB长事务的理解。 1&#x…

Python-VBA函数之旅-super函数

目录 一、super函数的常见应用场景 二、super函数使用注意事项 三、如何用好super函数? 1、super函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、su…

AI代理和AgentOps生态系统的剖析

1、AI代理的构成:AI代理能够根据用户的一般性指令自行做出决策和采取行动。 主要包含四个部分: (1)大模型(LLM) (2)工具:如网络搜索、代码执行等 (3&#x…

开散列哈希桶

通过上面这幅图,读者应该能较为直观地理解何为开散列,以及闭散列与开散列的区别在哪里 —— 数据的存储形式不同,至于其他的,如确定每个元素的哈希地址等一概相同。 与闭散列相比,开散列能够更好地处理发生冲突的元素 …

Transformers 加速的一些常用技巧

Transformers 是一个强大的架构,但模型因其采用的自注意力机制,虽然能够有效地处理序列数据并捕获长距离依赖关系,但同时也容易导致在训练过程中出现OOM(Out of Memory,内存不足)或者达到GPU的运行时限制。…

AI大模型探索之路-训练篇22: ChatGLM3微调实战-从原理到应用的LoRA技术全解

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

MPLAB X IDE编译attiny1616工程报错却无报错信息

MPLAB X IDE(XC-8编译器)编译报错,无具体错误内容,仅显示需要xc-8 pro的警告。 内存占用率显示为81%,未超标。 原因:软件使用了microchip的bootloader功能。应用程序起始地址(也是bootloader结束地址)设置错…

社交巨头:探索Facebook的震撼力量

Facebook作为社交媒体领域的巨头,不仅在数字化社会中占据着重要地位,更是影响了人们的生活、工作和社交方式。本文将深入探索Facebook的震撼力量,从多个角度解读其在当今社会中的重要性和影响。 1. 全球用户覆盖的壮观规模 Facebook作为全球…

docker安装时报错:Error: Nothing to do

安装docker时报以下错误 解决方法: 1.下载关于docker的相关依赖环境 yum -y install yum-utils device-mapper-persistent-data lvm22.设置下载Docker的镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3…

FMEA存在的五个主要不足及改进措施——FMEA软件

免费试用FMEA软件-免费版-SunFMEA 在制造业和产品设计领域,失效模式与影响分析(Failure Modes and Effects Analysis,简称FMEA)被广泛运用,用于预防潜在的设计或制造缺陷。然而,尽管FMEA在风险管理方面发挥…

开发者集结号:大湾区 Open Source Day 邀您共探技术前沿

开源技术正以其开放、协作的特性,引领着软件开发的新潮流,是推动社会进步的重要力量。作为开发者,您是否渴望深入了解开源项目的前沿动态?由ALC深圳与2024中国互联网发展创新与投资大赛联合举办、FISCO金链盟深度参与的大湾区 Ope…

MySQL————创建存储过程函数

存储过程使用大纲 有参数传递 delimiter $$ 声明一个名称为get_student_introduce create procedure add_student_infor( in p_userName VARCHAR(20),in p_phone VARCHAR(11),in p_sex char(2),in p_introduce VARCHAR(255)) 开始操作 BEGIN 撰写真正在操作DMLDQL都行 INSE…

CSS---复合选择器、元素显示模式和背景(三)

一、CSS的复合选择器 1.1 什么是复合选择器 在CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。 复合选择器是由两个或多个基础选择器连写组成,它…

【云原生】kubernetes核心组件

引言: Kubernetes 是为运行分布式集群而建立的,分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分,了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查应用程序故障。 一、Kubernetes的核心组件 1.1、Master组件 1.1.…

基于Springboot+Vue的Java项目-农产品直卖平台系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

可道云teamOS企业网盘实用插件介绍:实时在线流程图编辑与分享,用在线流程图打造数字化工作流程

在使用企业网盘用于日常办公的情况下,有一些实用的在线小工具能为团队效率和协作带来一定的提升。 今天要给大家介绍的可道云teamOS的在线画流程图,是很值得介绍的一个在线工具。 在线流程图:直观展示,高效便捷 以往我们想要梳理…

FANUC机器人单轴零点标定时提示无法执行零点标定,由于重力补偿已启用,所有机器人轴的脉冲计数必须有效

FANUC机器人单轴零点标定时提示无法执行零点标定,由于重力补偿已启用,所有机器人轴的脉冲计数必须有效 首先,机器人由于长时间断电未使用,6个轴的编码器数据全部丢失,上电后报警SRVO-062, 有关SRVO-062故障报警的相关内容可参考以下链接: FANUC机器人SRVO-062报警原因分…

Scratch四级:第08讲 排序算法

第08讲 排序算法 教练:老马的程序人生 微信:ProgrammingAssistant 博客:https://lsgogroup.blog.csdn.net/ 讲课目录 常考的排序算法项目制作:“三个数排序”项目制作:“成绩查询”项目制作:“排序”项目制…