stm32——GPIO学习

        对于许多刚入门stm32的同学们来说,GPIO是我们的第一课,初出茅庐的我们会对GPIO的配置感到疑惑不解,也是劝退我们的第一课,今天我们就来一起学习一下stm32的GPIO,提振一下信心。好的,发车了小卷卷们!!!

Step 1.GPIO简介

1.认识GPIO

        首先,什么是GPIO呢?我们学过51单片机的小伙伴们,肯定会知道一个概念,叫做IO口,这里的“I”其实就是input,“O”其实就是output,就是输入输出嘛。然后什么是GPIO呢?GPIO的全称是General Purpose Input Output,就是通用输入输出端口的意思。它们有什么区别呢,其实对于我们来说,二者就是一样的,就是GPIO相比于IO,听起来牛逼一点而已都是输入输出端口。

2.GPIO的作用

        GPIO的作用:负责采集外部器件的信息或者控制外部器件工作,就是输入输出。这里我们分别举两个例子来理解:

a.输入

        这里我们的IO口和VCC相连,如果按键不按下,IO口的输入就是VCC高电平,如果按键按下,IO口就变成了GND低电平,这是一个GPIO输入的例子 

 

b.输出

        这里如果IO口输出高电平,就是1,LED灯就亮,如果输出低电平,就是0,LED灯就不亮 

3.GPIO特点

【1】不同型号的芯片IO口的数量是不一样的

【2】快速翻转,每次翻转最快只需要两个时钟周期

【3】每个IO口都可以做中断(这点相比于传统的51单片机要好很多,传统的51单片机只有INT0,INT1可以做外部中断)

【4】有8中工作模式(这也是最令人头疼的) 

4.GPIO电气特性

stm32的工作电压范围是2v ≤ VDD ≤ 3.6v

GPIO的电压识别范围:

                -0.3v ≤ V低 ≤ 1.164v

                1.833v ≤ V高 ≤ 3.6v

一般要避免电压在1.164和1.833之间,这里电压到底是0还是1是不确定的 

手册里标注FT的是TTL端口的,没有标注的就是CMOS端口的

5.GPIO的输出电流

        F103系列的芯片最大输出电流是150毫安,单个IO口的电流输出最大是25毫安,而且不能保证每个IO口能同时输出这个电流

6.GPIO的引脚分布

 不多说了,就是看图吧,图上很明确了

电源引脚:V字母开头的都是电源引脚

复位引脚:NRST就是复位引脚 

下载引脚;

 晶振引脚

ROOT引脚;

GPIO引脚:P字母开头的,基本都是GPIO引脚,一般来说是16个端口,从0到15

Step 2.GPIO结构 

我们先看一幅图

 

 我们一步一步来分析这个图

1.保护二极管      

        首先我们要知道1处这两个二极管的作用,这两个二极管是保护二极管,这两个二极管的作用是什么呢?当外界输入较高的电平时VDD导通,我们都知道二极管有钳制电位的作用,所以高电平就被限制了,同理,当外界输入低电平时(这个东西可以是负的)Vss导通,同样将电平限制在了安全范围里。

2.施密特触发器       

        其次,我们去看这个施密特触发器,其实应该是肖特基触发器的,这里手册上的图翻译错了,它的特点就是当电压低于某一个值,表现为逻辑0,高于某一个值时,表现为高电平。处于中间位置时候,电平信号不变,我们可以通过一个图去理解它:

 3.几个图像

        好的下边我们来分析整个图,这个图可以分为两部分,输入部分和输出部分,那么输入和输出到底应该怎么去理解呢?其实stm32的参考手册也给出了输入和输出时候的图,我们可以研究一下 。

a.输入图像

 

当我们的IO口配置为输入时,有:

 ● 输出缓冲器被禁止

● 施密特触发输入被激活

● 根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接

● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器

● 对输入数据寄存器的读访问可得到I/O状态

b.输出图像 

 当我们的IO口配置为输出时,有:

● 输出缓冲器被激活 ─ 开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。 ─ 推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。

● 施密特触发输入被激活

● 弱上拉和下拉电阻被禁止

● 出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器

● 在开漏模式时,对输入数据寄存器的读访问可得到I/O状态

● 在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值

c.复用图像

此时,有:

● 在开漏或推挽式配置中,输出缓冲器被打开

● 内置外设的信号驱动输出缓冲器(复用功能输出)

● 施密特触发输入被激活

● 弱上拉和下拉电阻被禁止

● 在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器

● 开漏模式时,读输入数据寄存器时可得到I/O口状态

● 在推挽模式时,读输出数据寄存器时可得到最后一次写的值 下图示出了I/O端口位的复用功能配置。详见stm32f103系列参考手册8.4节-AFIO寄存器描述。 一组复用功能I/O寄存器允许用户把一些复用功能重新映象到不同的引脚。 

d.模拟输入 

此时,有: 

● 输出缓冲器被禁止;

● 禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置 为’0’;

● 弱上拉和下拉电阻被禁止;

● 读取输入数据寄存器时数值为’0

相信大家看到这里会有点懵逼,你给我一堆这,我也不知道该怎么用啊!那么下面我们就来具体看看IO口的8种输入输出模式

4.GPIO口的八种模式

首先要知道都有哪几种工作模式吧,大概就是四输入,四输出;

输入:输入浮空 ─ 输入上拉 ─  输入下拉  ─  模拟输入

输出:开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能

下面允许我先啰嗦一下,因为很多人就算知道这些东西,也会一头雾水,到底什么时候要用什么呢?因为我是暖男,我安排好了:

GPIO引脚可以根据需要配置成多种模式,以适应不同的硬件接口需求。下面详细解释您提到的各种输入和输出模式,以及它们的用途。

功能分析

a.输入模式
输入浮空 (Floating Input)

    •    描述:在此模式下,GPIO引脚既没有连接到高电平(VCC)也没有连接到低电平(GND),其状态由外部电路的输入决定,但在没有外部输入时状态不确定。
    •    用途:通常用于高阻抗传感器的接口,或者在外部电路确保将输入引脚拉高或拉低的情况下使用。但浮空输入容易受到噪声的影响,可能导致读值不稳定。

输入上拉 (Input Pull-up)

    •    描述:在此模式下,GPIO引脚通过一个上拉电阻连接到高电平,确保在外部设备未接入或开关未关闭时,GPIO引脚为高电平状态。
    •    用途:常用于按钮或开关,当按键未按下时默认读取为高电平,按下时连接到地(GND)读取为低电平。

输入下拉 (Input Pull-down)

    •    描述:与上拉输入相对,引脚通过一个下拉电阻连接到低电平,确保在外部设备未接入或开关未闭合时,GPIO引脚为低电平状态。
    •    用途:常用于按钮或开关,当按键未按下时默认读取为低电平,按下时连接到高电平(VCC)读取为高电平。

模拟输入 (Analog Input)

    •    描述:GPIO引脚配置为读取模拟信号,这通常需要芯片内部集成的模拟到数字转换器(ADC)。
    •    用途:用于读取各种类型的模拟传感器输出,如温度传感器、光照传感器、湿度传感器等的模拟信号。

b.输出模式
开漏输出 (Open Drain Output)

    •    描述:在此模式下,GPIO引脚在输出低电平时直接连接到地(GND),在输出高电平时不驱动,输出端实际上是“开放”的,需要外部上拉电阻以确保能够读取到高电平。
    •    用途:常用于I2C通讯协议的数据线和时钟线,多个设备可以共用同一条线,通过外部上拉电阻来控制线路状态。

推挽式输出 (Push-Pull Output)

    •    描述:GPIO引脚可以输出高电平和低电平,高电平时连接到电源(VCC),低电平时连接到地(GND)。
    •    用途:适合于大多数控制应用,如LED指示灯、继电器控制等,因为它可以提供足够的电流来驱动外部负载。

推挽式复用功能 (Push-Pull Alternate Function)

    •    描述:此模式与推挽式输出类似,但允许GPIO引脚用于特定的复用功能,例如USART(通用同步/异步接收/发送)的TX/RX、SPI的MOSI/MISO等。
    •    用途:用于需要GPIO引脚执行特定硬件功能的应用,使得引脚除了基本的输入输出功能外,还能承担如串行通信等特定任务。

开漏复用功能 (Open Drain Alternate Function)

    •    描述:与开漏输出相似,GPIO引脚在复用功能时也不主动驱动高电平,依赖外部上拉电阻来确定高电平状态。

    •    用途:用于那些在复用功能下需要多个设备共用单一物理连接的应用,如I2C总线的SCL和SDA线,允许多个设备连接至同一总线而不会造成信号冲突。
 

结构分析 

好的,下边我们就这些模式进行结构分析:

a.输入
 输入浮空:

 

[1]上拉电阻关闭

[2]下拉电阻关闭

[3]施密特触发器打开

[4]双MOS管都不导通

 

 输入浮空时,空闲时是高阻态,由外部的环境决定 

输入上拉:

[1]上拉电阻开启

[2]下拉电阻关闭

[3]施密特触发器打开

[4]双MOS管都不导通

 输入上拉时,空闲时是高电平,外部也是高电平,这里由于上拉电阻和下拉电阻都很大,所以是弱上拉

输入下拉: 

 

[1]上拉电阻关闭

[2]下拉电阻开启

[3]施密特触发器打开

[4]双MOS管都不导通

 

输入下拉,空闲时IO口是低电平 

模拟输入: 

[1]上拉电阻关闭

[2]下拉电阻关闭

[3]施密特触发器关闭

[4]双MOS管都不导通

专门用于模拟信号的输入或输出

b.输出 
开漏输出:

 

[1]上拉电阻关闭

[2]下拉电阻关闭

[3]施密特触发器打开

[4]P-MOS管始终不导通

[5]往ODR对应位写0,N-MOS导通,写1则不导通。

写0是外界低电平,写1时高阻态,开漏输出不能输出高电平,可以通过外部(内部F4,F7,H7型号)接上拉电阻来帮助输出高电平

开漏式复用功能:

[1]上拉电阻关闭

[2]下拉电阻关闭

[3]施密特触发器打开

[4]P-MOS管始终不导通

 特点:

1.开漏式复用不能输出高电平,可以通过外部(内部F4,F7,H7型号)接上拉电阻来帮助输出高电平

2.由其他外设控制输出

推挽输出: 

[1]上拉电阻关闭

[2]下拉电阻开启

[3]施密特触发器打开

[4]往ODR对应位写0,N-MOS导通,写1,P-MOS导通

特点:电源能直接驱动,驱动能力强

推挽式复用功能:

[1]上拉电阻关闭

[2]下拉电阻开启

[3]施密特触发器打开

特点:1.可以输出高,低电平,驱动能力强,

            2.由其他外设控制输出

Step.3结语 

        现在是2024年4月23日凌晨3:13分,已经很累了,我不知道我坚持的意义在哪里。耳机里放着Eason的《陀飞轮》,可是一事无成怎敢听《陀飞轮》。

        过去十八岁,没带表,不过有时间 ,连自己也都分清不了得到多与少。也许有一天会命中减少一秒多买一只表,我喜欢的会喜欢我,我执着的会回应我,晚安程明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis入门到通关之Redis数据结构-ZSet篇

文章目录 ZSet也就是SortedSet,其中每一个元素都需要指定一个 score 值和 member 值: 可以根据score值排序后member必须唯一可以根据member查询分数 因此,zset底层数据结构必须满足键值存储、键必须唯一、可排序这几个需求。之前学习的哪种编…

vscode ssh远程连接服务器,一直正在下载vscode服务器的解决办法

前言 为方便描述,在本教程中,发起远程连接的叫“主机”,被远程连接的叫“服务器”。 正文 如果主机是首次用vscode远程连接服务器,会在服务器上自动下载vscode服务器,但有时候因为网络问题,会卡在&#xff…

OpenCV轻松入门(九)——使用第三方库imgaug自定义数据增强器

安装命令:pip install imgaug 代码实现: import cv2 import random import matplotlib.pyplot as pltfrom imgaug import augmenters as iaa # 数据增强——缩放效果 def zoom_img(img):# 获取一个1-1.3倍的线性图像处理器,scale参数是缩放范…

物联网配网工具多元化助力腾飞——智能连接,畅享未来

随着物联网技术的迅猛发展,智能插座、蓝牙网关作为其中常见的智能物联设备,无论是功能还是外观都有很大的改进,在智能化越来越普遍的情况下,它们的应用场景也在不断拓宽。对于智能设备而言,配网方式的选择对于设备的成…

无人驾驶 自动驾驶汽车 环境感知 精准定位 决策与规划 控制与执行 高精地图与车联网V2X 深度神经网络学习 深度强化学习 Apollo

无人驾驶 百度apollo课程 1-5 百度apollo课程 6-8 七月在线 无人驾驶系列知识入门到提高 当今,自动驾驶技术已经成为整个汽车产业的最新发展方向。应用自动驾驶技术可以全面提升汽车驾驶的安全性、舒适性,满足更高层次的市场需求等。自动驾驶技术得益于人工智能技术的应用…

Arthas下载安装及使用介绍

目录 一、简介1.1 什么是 Arthas?1.2 Arthas 可以做些什么? 二、下载安装、卸载2.1 安装方式一:在线安装2.2 安装方式二:离线安装2.3 卸载 三、常见操作3.1 dashbord 信息面板3.2 thread 线程信息3.3 jad 反编译 class 文件3.4 wa…

keil把c语言函数转成汇编

汇编可以让开发人员从根源上理解程序的运行逻辑,本文介绍如何在keil环境下如何把一个c文件中的某一个函数,转换为汇编函数,并编译运行。 右击某个c文件,选择Option for File。。。 图1 然后把下图中的Generate Assembler SRC Fi…

Linux I2C(二) - I2C软硬件架构

1,I2C的总线拓扑 2,I2C S/W topology linux kernel I2C framework使用如下的软件拓扑抽象I2C硬件(我们可以一起领会一下其中的“设备模型”思想): 1)platform bus(/sys/bus/platform&#xff0…

【论文笔记 | 异步联邦】 FedBuff

1. 论文信息 Federated Learning with Buffered Asynchronous Aggregation,International Conference on Artificial Intelligence and Statistics,2022,ccfc 2. introduction 2.1.1. 背景: 同步 FL ,随训练过程中…

3D MINS 多模态影像导航系统

3D MINS多模态影像导航系统(Multimodal Image Navigation System)是SunyaTech研发的建立在DICOM(Digital Imaging and Communications in Medicine)图像基础之上的多模态影像导航系统,集二维影像PACS管理、三维影像层级…

在誉天学习云计算HCIE,担心考试考不过?

誉天定制化课程内容覆盖了所有考试重点,可以系统地掌握理论与实践知识。 对于笔试,类似于备考驾照理论学习阶段,誉天为大家提供在线模拟测试系统,帮助大家掌握云计算笔试考点。笔试通过后,18个月内(一年半…

html显示PDF并兼容IE浏览器的解决方案

方案一、vue-pdf插件 缺点&#xff1a;IE11显示空白&#xff0c;编译后的Edge测试环境可以正常线上&#xff0c;打到线上报错&#xff0c;谷歌和百分浏览器显示完美 1、vue 只显示核心代码&#xff0c;需要安装vue-pdf插件 <vue-pdf :src"ivcPdfUrl"></v…

【51单片机项目】基于51单片机自制多功能小键盘/模拟USB键盘【附源码】(STC89C52RC+CH9328)

目录 一、效果展示 二、创作灵感 三、硬件电路 注意事项 工作原理 四、源码 main.c 五、附录 CH9328工作原理 CH9328的模式选择 ​编辑 全键盘键码值表 参考链接 一、效果展示 该小键盘具有三种功能&#xff1a; 1、自动输入开机密码 2、每隔一段时间自动按下ct…

展商企业【广东伟创科技开发有限公司】| 2024水科技大会暨技术装备成果展

企业介绍 广东伟创科技开发有限公司成立于2006年&#xff0c;位于广东省江门市。公司是华南理工大学造纸与污染控制国家工程研究中心科技成果转化单位&#xff1b;是华南理工大学产学研合作单位&#xff1b;是广东省高新技术企业&#xff1b;是江门市现代信息服务业重点企业&am…

HarmonyOS ArkUI实战开发-手势密码(PatternLock)

ArkUI开发框架提供了图案密码锁 PatternLock 组件&#xff0c;它以宫格图案的方式输入密码&#xff0c;用于密码验证&#xff0c;本节读者简单介绍一下该控件的使用。 PatternLock定义介绍 interface PatternLockInterface {(controller?: PatternLockController): PatternL…

CSS中的层叠上下文

HTML 文档中的三维概念 平时我们从设备终端看到的 HTML 文档都是一个平面的&#xff0c;事实上 HTML 文档中的元素却是存在于三个维度中。除了大家熟悉的平面画布中的 x 轴和 y 轴&#xff0c;还有控制第三维度的 z 轴。 其中 x 轴通常用来表示水平位置&#xff0c;y 轴来表示…

爱普生RX-8130CE内置电池控制 RTC

特点&#xff1a;(1)封装极小&#xff0c;集成度高RX-8130CE是一个带|2C接口的实时时钟模块&#xff0c;内部集成32.768KHz晶体振荡器。实时时钟功能不仅集成了年、月、日、星期、小时、分、秒的日历和时钟计数器&#xff0c;同时也有时间闹钟、间隔定时器、时间更新中断等功能…

Qt [获取Dump] 使用WindowsAPI实现生成MiniDump文件

说明 客户现场的软件偶发崩溃是程序开发者&#xff0c;比较头疼的事情。如何更快速的定位到问题点和解决掉&#xff0c;是开发应该具备的基本能力。 Windows提供了一系列的API&#xff0c;可以记录软件崩溃前的堆栈信息。下面就实现一个生成Dump文件的程序实例。 主要代码 回…

unity读写本地excel_2024.4.22

using System.Collections; using System.Collections.Generic; using UnityEngine; using OfficeOpenXml; using System.IO; using Excel; using System.Data; using System; /// <summary> /// https://blog.csdn.net/Xz616/article/details/128893023 /// Unity3D操作…

JVM垃圾收集器--分代收集器

垃圾收集器主要分为两大类&#xff1a;分区收集器和分代收集器。分代收集器的代表是CMS&#xff0c;分区收集器的代表是G1和和ZGC。 分代收集器 CMS CMS收集器是第一个关注GC停顿时间&#xff08;stw时间)的收集器&#xff0c;采用“标记-清除”算法&#xff0c;之前的垃圾收…