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的《陀飞轮》,可是一事无成怎敢听《陀飞轮》。

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

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

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

相关文章

力扣146. LRU 缓存

Problem: 146. LRU 缓存 文章目录 题目描述思路复杂度Code 题目描述 思路 主要说明大致思路,具体实现看代码。 1.为了实现题目中的O(1)时间复杂度的get与put方法,我们利用哈希表和双链表的结合,将key作为键,对应的链表的节点作为…

【前后端】django前后端交互

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、django是什么二、django前后端交互指引三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言&#x…

零售数据分析方案:深度剖析人、货、场

人,即会员分析、用户分析,通过分析获得直观的用户画像,了解目标用户群体的消费水平、喜好、频率,为销售营销决策提供必要的数据支持;货,即商品分析,包括但不限于分析商品结构、分析销售top10商品…

构建云原生湖仓:Apache Iceberg与Amoro的结合实践

随着大数据技术的快速发展,企业对数据的处理和分析需求日益增长。传统的数据仓库已逐渐无法满足现代业务对数据多样性和实时性的要求,这促使了数据湖和数据仓库的融合,即湖仓一体架构的诞生。在云原生技术的推动下,构建云原生湖仓…

Opensbi初始化分析:设备初始化

Opensbi初始化分析:设备初始化 设备初始化sbi_init函数coldinit,冷启动初始化sbi_scratch_init函数sbi_domain_init函数sbi_hsm_initsbi_platform_early_initsbi_hart_initsbi_console_initsbi_platform_irqchip_init中断控制器的初始化sbi_ipi_init函数…

C++奇迹之旅:从0开始实现日期时间计算器

文章目录 📝前言🌠 头文件Date.h🌉日期计算函数🌠前后置🌉前后置-- 🌠两对象日期相减🌉自定义流输入和输出 🌉 代码🌉 头文件Date.h🌠Date.cpp🌉 …

数据挖掘实验(Apriori,fpgrowth)

Apriori:这里做了个小优化,比如abcde和adcef自连接出的新项集abcdef,可以用abcde的位置和f的位置取交集,这样第n项集的计算可以用n-1项集的信息和数字本身的位置信息计算出来,只需要保存第n-1项集的位置信息就可以提速…

在Qt creator中使用多光标

2024年4月22日,周一下午 Qt Creator 支持多光标模式。 多光标模式允许你在同一时间在多个光标位置进行编辑,从而可以更快地进行一些重复性的编辑操作。 要启用多光标模式,请按住 Alt 键,并用鼠标左键在文本编辑器中选择多个光标…

标题Selenium IDE 常见错误笔记

Selenium IDE 常见错误笔记 错误1:Failed:Exceeded waiting time for new window to appear 2000ms 这个错误通常出现在第一次运行时,有两个原因: Firefox阻止了弹出式窗口,在浏览器设置里允许这个操作即可。 有些网站设置了反…

Elasticsearch单机部署(Linux)

1. 准备环境 本文中Elasticsearch版本为7.12.0,JDK版本为1.8.0,Linux环境部署。 扩展: (1)查看Elasticsearch对应的常用的jdk版本如下:(详情可看官网的支持一览表) Elasticsearch a…

基于51单片机的电子秤LCD1602液晶显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子秤LCD显示 1. 主要功能:2. 讲解视频:3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子秤LCD显示( proteus仿真程序设计报告讲解视频) 仿真图proteus8.9及以上 程序编译器&#xf…

基于SSM+Vue的护工预约服务小程序和后台管理系统

1、系统演示视频(演示视频) 2、需要请联系