【嵌入式】手把手教你入门STM32的GPIO:初识GPIO输出

1.GPIO简介

 STM32是一系列基于ARM Cortex-M内核的32位微控制器。该系列微控制器广泛应用于计算机、通讯、工业自动化、消费电子、汽车电子、医疗仪器及家庭电器等领域。该系列控制器具有高性能、低功耗、智能化等特点。其中,GPIO就是STM32控制器中的一种重要的通用输入输出口

        GPIO全称为“General Purpose Input and Output”,即通用输入输出口。它是STM32控制器中的一种数字输入输出接口,具有广泛的应用。GPIO通常是微控制器与外围电路之间的主要通信接口。它可以通过控制逻辑电平来实现输入、输出、控制等功能。在STM32控制器中,GPIO口通常是通过引脚配置和寄存器编程进行控制的。

2.GPIO基本结构

STM32的系统结构如下图,在STM32中,所有的GPIO都是挂载在APB2外设总线上的,APB2在APB1的左边,GPIO的名称是按照GPIOA,GPIOB......的方式来命名的。

每个GPIO外设有16个引脚,从0-15,每个GPIO中包含了寄存器和驱动器,寄存器就相当于一个特殊的存储器,内核可以通过APB2总线来对寄存器进行读写,这就可以完成输出电平和读取电平了。

  • 寄存器的每一位都对应一个引脚
  • 输出寄存器写1对应的引脚就输出高电平,写0对应的引脚就输出低电平
  • 当读取1就证明对应的引脚为高电平,读取0则对应的引脚为低电平

因为STM32是32位的单片机,所以内部的寄存器都是32位的,但是端口只有16位,所以寄存器只有低16位有端口,高16位是没有端口的。

至于驱动器就是用来加强信号的驱动能力的,寄存器只负责读写数据,所以当我们需要点亮LED灯等操作时, 则需要驱动器来增大驱动能力。

2.1 GPIO位结构 

 整个GPIO位的结构可以分为3个部分,从左到右依次为寄存器,驱动器,IO引脚三部分,但是也可以分为两个部分,从上到下是输入,输出两部分

2.2 IO引脚

接下来我们来详细看一下,首先从输入部分来看,IO引脚部分有两个保护二极管,是用来对输入电压进行限幅的,上面接的VDD是3.3V的,下面的VSS是0V的。

  • 如果输入电压比3.3V还要高,那么上面的二极管会导通,输入电压产生的电流会流入上方的VDD而不会流入内部电路,可以防止电压过高对内部电路产生伤害。
  • 如果输入电压比0V还低,那么下面的二极管会被导通,电流会从VSS流出去,而不会从内部电路汲取电路,也能对内部电路进行保护.
  • 如果输入电压在0~3.3V之间,保护二极管均不会被导通,此时保护二极管无任何作用,  

2.3上拉电阻和下拉电阻

接下来这根线就到了这个地方,这里连接了两个电阻,称为上拉电阻和下拉电阻,上拉电阻至VDD,下拉电阻至VSS,这里就有三种模式:

  • 上拉输入,上面导通,下面断开。当引脚悬空时,上拉输入可以保证引脚的高电平,所以上拉输入是默认为高电平的输入模式
  • 下拉输入,上面断开,下面导通。当引脚悬空时,下拉输入可以保证引脚的低电平,所以上拉输入是默认为低电平的输入模式
  • 浮空输入,上下都断开。容易受到外界影响。

上拉和下拉有什么作用呢?就是为了给输入提供一个默认的输入电平, 因为对应一个数字的端口,输入的不是高电平就是低电平,但如果输入引脚什么都不接,就不确定是高电平还是低电平。

如果输入什么都不接,此时输入就是一种浮空的状态,引脚的输入电平容易受到影响,为了防止这种事情的发生,就有了上拉输入和下拉输入。

2.4施密特触发器,输入数据寄存器

这里应该是施密特触发器而不是肖特基触发器,施密特触发器在这里的作用就是给输入电压进行整形的,如果输入电压大于某个阈值,输入会瞬间升为高电平,输入电压小于某个阈值,输入会瞬间降为低电平

通过下图可以发现,相比较输入信号,通过施密特触发器整形的输出信号就更完美了,施密特触发器通过两个比较阈值来判断,中间留有一定的变化范围,可以有效避免信号波动产生的输出抖动现象。接下来经过施密特触发器整形的波形就能够直接写给输入数据寄存器了。

这时我们再用程序读取输入数据寄存器的某一位数据,就能知道端口的输入电平了。 

2.5片上外设端口

这里还有两条线路,是连接到片上外设的端口,包含了模拟输入和复用功能输入

  • 模拟输入是连接到ADC上的,因为ADC需要接收模拟量,所以这根线是接在施密特触发器前面的。
  • 还有一根线是复用功能输入,这个是连接到其他需要读取端口的外设上的,比如串口的输入引脚等,这根线需要的是数字量的信号,所以接在施密特触发器的后面

3.GPIO特点

  • 可配置为8种输入输出模式
  • 引脚电平:0V~3.3V,部分引脚可容忍5V
  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等


4. 8种输入输出模式


5.模拟输入 

其他三种输入模式在2.3有介绍,大家可以去看看。

在模拟输入的模式下,施密特触发器和下面的输出都是断开的,所以红圈部分都是用不到的,也就是整个电路只有一条线,也就是从IO引脚直接接到片上外设,也就是ADC,所以当我们使用ADC的时候,直接将引脚输入设置成模拟输入即可,其他时候用不到。


今天的分享到这里就结束了,下一期给大家分享GPIO的输出。

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

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

相关文章

《向量数据库指南》——Naive RAG的复杂问题困境

哈哈,各位向量数据库领域的探索者们,大家好!我是大禹智库的向量数据库高级研究员王帅旭,也是《向量数据库指南》的作者。今天,咱们就来聊聊Naive RAG(Retrieval-Augmented Generation,检索增强生成)方法的那些事儿,特别是它在处理复杂问题时的局限性。相信我,这篇文章…

ros1编译wpr_simulation库

目录 安装项目依赖包编译将环境参数加载到终端程序中运行编译好的ros程序 首先你下载好这个库以后。 安装项目依赖包 scripts库中,存放的是一些依赖项安装脚本以及python脚本。 进入到这个路径的终端。 输入 ./install_for_noetic.sh编译 输入下面命令&#xf…

轮转数组【补充】

本章概述 前情回顾方法一方法二总结彩蛋时刻!!! 前情回顾 点击:轮转数组。 在上面一章的《初阶数据结构【1】》里面,咱们通过轮转数组引出了算法复杂度的概念。咱们当时写的那个算法有点小问题,38个测试用…

SpringBoot技术在人事管理中的应用:系统开发全解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

windows下载配置CAS单点登录

下载 github下载 云盘瞎子啊 版本对应jdk,根据自身环境下载对应版本的cas。 安装 下载完成之后解压 按照.md文档执行打包命令 build.bat package配置 如果不用https,需要进行以下配置: 修改配置文件application.properties 在最后一行…

《大规模语言模型从理论到实践》第一轮学习--Fine-tuning微调

第一轮学习目标:了解大模型理论体系 第二轮学习目标:进行具体实操进一步深入理解大模型 从大语言模型的训练过程来理解微调 大预言模型训练主要包含四个阶段:预训练、有监督微调、奖励建模、强化学习。 预训练(Pretraining&…

大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

注意力机制2024持续发力!多尺度卷积+Attention一举拿下高分!模型准确率几乎100%

如何构建出更强大灵活的深度学习模型?或许我们可以考虑一个先进的方法:多尺度卷积注意力机制。 多尺度卷积先提供丰富的特征信息,注意力机制再从中筛选出关键信息,这样结合起来,不仅可以进一步提高模型的识别精度和效…

ubuntu中多cuda版本兼容问题

当ubuntu中已经有老版本的cuda时,按正常步骤直接下载新的cuda和cudnn,只需要注意在下载新的cuda版本时,出现“A symlink already exists at /usr/local/cuda. Update to this installation?”,选择“no”,之后按如下的…

redis与springBoot整合

前提 要实现,使用Redis存储登录状态 需要一个完整的前端后端的项目 前端项目搭建 解压脚手架 安装依赖 配置请求代理 选做: 禁用EsLint语法检查 Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法_lintonsave: false-CSDN博客 …

【精选】基于SpringBoot+Vue的生鲜交易系统设计与实现(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

智能健康推荐:SpringBoot技术应用

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户管理 基于智能推荐的卫生健康系统的系统管理员可以管理用户管理,可以对用户管理信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户管理信息管理界面 5.1.2 科室类型管理 系统管理员可以查看对…

C++进阶——多态

目录 一、多态的概念 二、多态的实现 1.逻辑条件 2.代码层面 3.一个经典题目 4.虚函数重写的其它问题 4.1协变(了解) 4.2析构函数重写 4.3 override和final 4.4重载、重写(覆盖)和隐藏的对比 5.纯虚函数和抽象类 三、…

k8s的部署

一、K8S简介 Kubernetes中文官网:Kubernetes GitHub:github.com/kubernetes/kubernetes Kubernetes简称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统,起源于Google 集群管理工具Borg。 Kubernetes集群组件逻辑图…

AI核身-金融场景凭证篡改检测Baseline实践

金融领域交互式自证业务中涵盖信用成长、用户开户、商家入驻、职业认证、商户解限等多种应用场景,通常都需要用户提交一定的材料(即凭证)用于证明资产收入信息、身份信息、所有权信息、交易信息、资质信息等,而凭证的真实性一直是…

柑橘缺陷病害识别数据集YOLO 1290张,xml和txt标签都有;5类别:yolov5-v10通用 包含数据集➕模型➕可视化界面

YOLO柑橘缺陷病害识别数据集 ✓图片数量1290,xml和txt标签都有; 5类 类别:Orange-Black-Spot,Orange-Canker ,Orange-Greening,Orange-Healthy,Orange-Melanose; 数据集 YOLO柑橘缺…

微信支付商家转账到零钱审核不通过解决方法

商家转账到零钱功能通常指的是微信支付提供的一项服务,允许商家将资金转账至用户的微信零钱账户。以下是商家转账到零钱的最优申请方案总结: 一、申请条件确认 1. 主体资格: a.申请主体必须为公司性质(有限公司类型)…

Apache Doris介绍

Apache Doris 的发展 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库,以高效、简单、统一的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的…

【LeetCode每日一题】——724.寻找数组的中心下标

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 724.寻找数组的中心下标 四【…

挖掘空间数据要素典型领域应用场景

空间数据要素作为数字经济的基石,正在多个领域发挥着重要作用。随着技术的发展,空间数据的应用场景不断拓展,为各行各业带来了深刻的变革。以下是几个典型的空间数据要素应用领域: 1. 城市规划与管理 空间数据在城市规划和管理中…