当前位置: 首页 > news >正文

STM32(GPIO)

GPIO简介

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

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

在这里插入图片描述

IO结构框图

在这里插入图片描述

浮空输入

浮空输入(Floating Input)是一种引脚配置模式,用于接收外部信号,当没有外部信号输入时,引脚处于高阻抗状态。在这种状态下,引脚不连接到特定的电源或地,并且没有外部电阻将其固定在特定电平上。

浮空输入通常用于读取外部设备的信号,例如传感器或开关。当外部设备产生信号时,信号会通过电路连接到引脚上,从而改变引脚的电平状态。然而,当外部设备没有产生信号时,引脚没有被连接到特定的电平上,因此可能会受到电磁干扰的影响,导致引脚处于不确定的状态。为了避免不确定性,可以使用上拉电阻或下拉电阻来将引脚拉高或拉低,使其保持在已定义的电平上。

在这里插入图片描述
外部的电平信号通过左边编号1的I/O端口进入MCU,经过编号2的施密特触发器的整形送入编号3的“输入数据寄存器”,在“输入数据寄存器”的另一端(编号4),CPU可以随时读出I/O端口的电平状态。
【来源:https://zhuanlan.zhihu.com/p/377009763】

浮空输入在数字电路中是常见的配置模式,用于读取外部信号的状态,如按钮按下或开关状态。在使用浮空输入时,需要注意对引脚的电平状态进行适当的判断和处理,以确保正确读取外部信号并避免不确定性的影响。

上拉输入

上拉输入(Pull-Up Input)是一种引脚配置模式,用于将引脚连接到正极电源(如VCC)通过一个上拉电阻,以确保引脚在没有外部信号输入时保持在高电平(通常是逻辑高)

在上拉输入模式下,引脚的电路连接如下:

  • 引脚通过一个大约几千欧姆的上拉电阻连接到正极电源(VCC)。
  • 当没有外部信号输入时,上拉电阻将引脚拉高,使其保持在高电平状态。

上拉输入常用于读取外部设备的信号,例如开关或按钮。当外部设备没有产生信号时,引脚通过上拉电阻被拉高到逻辑高电平,从而确保引脚在没有输入时有一个已定义的状态。当外部设备通过连接到引脚来拉低引脚时,可以改变引脚的状态,例如按下按钮或改变开关状态。

在这里插入图片描述
输入上拉模式;与前面的浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,同样,CPU可以随时在“输入数据寄存器”的另一端,读出I/O端口的电平状态。
【来源:https://zhuanlan.zhihu.com/p/377009763】

需要注意的是,在使用上拉输入时,如果外部设备连接到引脚并拉低引脚,外部设备应具备足够的驱动能力以克服上拉电阻的作用,以确保引脚能够稳定地被拉低。

上拉输入是数字电路中常见的配置模式之一,用于提供引脚的默认状态和读取外部信号。在使用上拉输入时,需要根据具体的硬件和信号要求选择适当的上拉电阻值,并进行合适的信号处理和判断。

下拉输入

下拉输入(Pull-Down Input)是一种引脚配置模式,用于将引脚连接到地(GND)通过一个下拉电阻,以确保引脚在没有外部信号输入时保持在低电平(通常是逻辑低)

在下拉输入模式下,引脚的电路连接如下:

  • 引脚通过一个大约几千欧姆的下拉电阻连接到地(GND)。
  • 当没有外部信号输入时,下拉电阻将引脚拉低,使其保持在低电平状态。

下拉输入常用于读取外部设备的信号,例如开关或按钮。当外部设备没有产生信号时,引脚通过下拉电阻被拉低到逻辑低电平,从而确保引脚在没有输入时有一个已定义的状态。当外部设备通过连接到引脚来拉高引脚时,可以改变引脚的状态,例如按下按钮或改变开关状态。

在这里插入图片描述
输入下拉模式;数据通道的下部,接入了一个下拉电阻。
【来源:https://zhuanlan.zhihu.com/p/377009763】

需要注意的是,在使用下拉输入时,如果外部设备连接到引脚并拉高引脚,外部设备应具备足够的驱动能力以克服下拉电阻的作用,以确保引脚能够稳定地被拉高。

下拉输入是数字电路中常见的配置模式之一,用于提供引脚的默认状态和读取外部信号。在使用下拉输入时,需要根据具体的硬件和信号要求选择适当的下拉电阻值,并进行合适的信号处理和判断。

模拟输入

模拟输入(Analog Input)是一种引脚配置模式,用于读取外部模拟信号的电压或电流,并将其转换为数字形式以供处理。

在模拟输入模式下,引脚被连接到外部设备或传感器,以接收连续变化的模拟信号。引脚通常与一个模拟到数字转换器(ADC)相结合,该转换器将模拟信号转换为数字形式,以便后续的数字信号处理。

模拟输入可以用于测量各种类型的模拟信号,如温度、光强、声音等。外部设备或传感器将模拟信号传递给引脚,引脚通过ADC将模拟信号转换为数字值。这些数字值可以通过处理和分析,用于监测、控制或生成相应的反馈信号。

在这里插入图片描述
模拟输入模式;信号从左边编号1的端口进入,从右边编号2的一端直接进入ADC模块。这里我们看到所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此“输入数据寄存器”将不能反映端口上的电平状态,也就是说,模拟输入配置下,CPU不能在“输入数据寄存器”上读到有效的数据。
【来源:https://zhuanlan.zhihu.com/p/377009763】

在使用模拟输入时,需要考虑以下几点:

  1. 确保引脚的电压或电流范围与外部模拟信号相匹配。
  2. 选择合适的ADC分辨率和采样率,以满足应用需求。
  3. 进行适当的信号处理和滤波,以提高信号质量和减小噪声干扰。

需要注意的是,模拟输入与数字输入(Digital Input)有所不同。数字输入是读取逻辑高或逻辑低的离散信号,而模拟输入读取连续变化的模拟信号。模拟输入通常需要更高的精度和处理复杂性,以满足对模拟信号的准确测量和分析的要求。

开漏输出

开漏输出(Open-Drain Output)是一种引脚输出配置模式,其中引脚可以连接到外部负载或电路,但只能拉低(连接到地)而不能主动拉高(连接到电源)。

在开漏输出模式下,引脚的输出状态可以分为两种:

  • 拉低状态:引脚处于低电平状态,连接到地,形成一个低阻抗通路,允许电流从引脚流过,从而将外部负载拉低。
  • 高阻状态:引脚处于高阻抗状态,不连接到任何电源或地,形成一个高阻抗断路,外部负载不受引脚控制。

开漏输出常用于驱动外部负载或与其他开漏输出设备进行电平兼容的通信,如I2C总线。通过使用外部上拉电阻,可以将开漏输出与其他设备或电路相连接,以实现协调的电平转换。

在这里插入图片描述
开漏输出模式;当CPU在左边的编号1端通过位设置/清除寄存器,或输出数据寄存器写入数据后,该数据位将通过编号2的输出控制电路传送到编号4的I/O端口,如果CPU写入的是逻辑“1”,则编号3的N-MOS管将处于关闭状态,此时I/O端口的电平将由外部的上拉电阻决定,如果CPU写入的是逻辑“0”,则编号3的N-MOS管将处于开启状态,此时I/O端口的电平被编号3的N-MOS管拉到了VSS的零电位。

在图的上半部,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控I/O端口的状态;通过这个特性,还实现了虚拟的I/O端口双向通信:只要CPU输出逻辑“1”,由于编号3的N-MOS管处于关闭状态,I/O端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1”。
【来源:https://zhuanlan.zhihu.com/p/377009763】

在使用开漏输出时,需要注意以下几点:

  • 引脚在拉低状态时可以提供较大的输出电流,但在拉高状态时不能提供输出电流。因此,需要通过外部上拉电阻将引脚拉高到所需的电平。
  • 在连接多个开漏输出设备时,需要确保只有一个设备处于拉低状态,以避免短路和冲突。
  • 开漏输出可以实现电平的逻辑与或非操作,但不能直接实现逻辑与非操作,因为无法主动拉高。

总的来说,开漏输出提供了一种灵活的输出模式,适用于与其他设备或电路进行电平兼容的通信和驱动外部负载的应用场景。

推挽输出

推挽输出(Push-Pull Output)是一种引脚输出配置模式,其中引脚可以主动拉高(连接到电源)和拉低(连接到地),以提供全面的输出控制能力。

在推挽输出模式下,引脚的输出状态可以分为两种:

拉高状态:引脚处于高电平状态,连接到电源(如VCC),提供正向电压和电流输出。
拉低状态:引脚处于低电平状态,连接到地(GND),提供零电压和电流输出。
推挽输出允许引脚在不同电平之间切换,可以主动驱动外部负载或与其他设备进行电平兼容的通信。它提供了较低的输出阻抗,因此可以提供较高的输出电流能力,适用于驱动各种类型的负载。

在这里插入图片描述
推免输出模式;在开漏输出模式的基础上,推挽输出模式仅仅是在编号2的输出控制电路之后,增加了一个P-MOS管。当输出逻辑“1”时,编号3处的P-MOS管导通,而下方的N-MOS管截止,达到输出高电平的目的。当输出逻辑“0”时,编号3处的P-MOS管截止,而下方的N-MOS管导通,达到输出低电平的目的。在这个模式下,CPU仍然可以从“输入数据寄存器”读到外部电路的信号。
【来源:https://zhuanlan.zhihu.com/p/377009763】

在使用推挽输出时,需要注意以下几点:

  • 确保引脚的输出电流能力与所驱动的负载要求相匹配。
  • 在与其他设备进行通信时,确保推挽输出与相应设备的输入电平兼容。
  • 避免短路和冲突,确保在同时连接多个推挽输出设备时只有一个设备处于拉高状态。

推挽输出是最常见和常用的输出模式,可广泛应用于数字电路、微控制器和集成电路中,用于驱动各种外部负载和与其他设备进行可靠的通信。

在这里插入图片描述
推挽复用输出模式,同样的道理,编号2的输出控制电路的输入,与复用功能的输出端相连,此时输出数据寄存器被从输出通道断开了。
【来源:https://zhuanlan.zhihu.com/p/377009763】

GPIO基本结构

在这里插入图片描述

GPIO相关寄存器

4 个 32 位 配 置 寄 存 器

GPIOx_MODER 模式寄存器
GPIOx_OTYPER 输出模式寄存器
GPIOx_ OSPEEDR 输出速度寄存器
GPIOx_PUPDR 上拉下拉寄存器

2 个 32 位数据寄存器

GPIOx_IDR 输入数据寄存器
GPIOx_ODR 输出数据寄存器

1个 32 位置位 / 复位寄存器

GPIOx_BSRR 置位 / 复位寄存器

2 个 32 位复用功能寄存器

GPIOx_AFRH
GPIOx_AFRL

GPIO库函数点灯

库函数版

//1打开时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//2设置输入输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);//3输出高低电平
GPIO_ResetBits(GPIOC, GPIO_Pin_13);//输出低电平
GPIO_SetBits(GPIOC, GPIO_Pin_13);//输出高电平

相关文章:

STM32(GPIO)

GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电…...

python设计模式---观察者模式

观察者模式是一种行为设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。 from abc import ABC, abstractmethod from typing import Listclass Observable:def __init__(sel…...

【论文笔记】KAN: Kolmogorov-Arnold Networks 全新神经网络架构KAN,MLP的潜在替代者

KAN: Kolmogorov-Arnold Networks code:https://github.com/KindXiaoming/pykan Background ​ 多层感知机(MLP)是机器学习中拟合非线性函数的默认模型,在众多深度学习模型中被广泛的应用。但MLP存在很多明显的缺点:…...

【投稿资讯】区块链会议CCF C -- CoopIS 2024 截止7.10 附录用率

会议名称:CoopIS CCF等级:CCF C类学术会议 类别:人机交互与普适计算 录用率:2023年接收率21% (21 regular 10 work-in-progress papers/100) AREA 5: HUMAN-CENTRIC SECURITY AND PRIVACY IN INFORMATION SYSTEMS Access Con…...

React Native 之 开发环境搭建(一)

1. 安装Node.js: Node.js是React Native开发的基础,因此首先需要安装Node.js。强烈建议始终选择 Node 当前的 LTS (长期维护)版本,一般是偶数版本,不要选择偏实验性质的奇数版本。 如果你希望更方便地管理…...

DS高阶:B树系列

一、常见的搜索结构 1、顺序查找 时间复杂度:O(N) 2、二分查找 时间复杂度:O(logN) 要求:(1)有序 (2)支持下标的随机访问 3、二叉搜索树(BS树) 时间复杂…...

第五百零三回

文章目录 1. 概念介绍2. 使用方法2.1 普通路由2.2 命名路由 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示Dialog"相关的内容,本章回中将介绍使用get进行路由管理.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…...

[动态规划] 完美覆盖

描述 一张普通的国际象棋棋盘,它被分成 8 乘 8 (8 行 8 列) 的 64 个方格。设有形状一样的多米诺牌,每张牌恰好覆盖棋盘上相邻的两个方格,即一张多米诺牌是一张 1 行 2 列或者 2 行 1 列的牌。那么,是否能够把 32 张多米诺牌摆放…...

redis深入理解之实战

1、SpringBoot整合redis 1.1 导入相关依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId&g…...

python设计模式---工厂模式

定义了一个抽象类Animal&#xff0c;并且让具体的动物类&#xff08;Dog、Cat、Duck&#xff09;继承自它&#xff0c;并实现了speak方法。然后创建了AnimalFactory工厂类&#xff0c;根据传入的参数来决定创建哪种动物的实例。 from abc import abstractmethod, ABCclass Anim…...

探索Vue 3.0中的v-html指令

探索Vue 3.0中的v-html指令 一、什么是v-html指令&#xff1f;1、 在Vue 3.0中使用v-html2、 注意事项 二、结语 一、什么是v-html指令&#xff1f; Vue.js作为一款流行的JavaScript框架&#xff0c;不断地演进着。随着Vue 3.0的发布&#xff0c;开发者们迎来了更加强大和灵活…...

anaconda 环境配置

官方网站下载地址&#xff1a; https://www.anaconda.com/download/ 国内清华镜像下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 配置国内环境: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ …...

DS:顺序表、单链表的相关OJ题训练(2)

欢迎各位来到 Harper.Lee 的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 一、力扣--141. 环形链表 题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。如果链表中有某个…...

上传到 PyPI

将软件包上传到 PyPI&#xff08;Python Package Index&#xff09;&#xff0c;您需要遵循以下步骤&#xff1a; 准备软件包&#xff1a;确保您的软件包满足以下要求&#xff1a; 包含一个 setup.py 文件&#xff0c;用于描述软件包的元数据和依赖项。包含软件包的源代码和必要…...

盛最多水的容器(双指针)

解题思路&#xff1a; 1&#xff0c;暴力解法&#xff08;超时&#xff09; 我们可以使用两层for循环进行遍历。找到那个最大的面积即可&#xff0c;这里我就不写代码了&#xff0c;因为写了也是超时。 2&#xff0c;双指针法 先定义两个指针一个在最左端&#xff0c;一个在…...

【深度学习】实验3 特征处理

特征处理 python 版本 3.7 scikit-learn 版本 1.0.2 1.标准化 from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler from matplotlib import gridspec import numpy as np import matplotlib.pyplot as plt cps np.random.…...

MoneyPrinter国内版改造

背景&#xff1a; MoneyPrinter 是一个自动生成短视频的开源项目。只需要输入短视频主题&#xff0c;然后就可以生成视频。 在国内环境运行时&#xff0c;框架中使用的youtube、抖音文字转语音等功能无法使用&#xff0c;需要对框架进行国内版改造&#xff0c;使其使用国内网络…...

C++ 派生类的引入与特性

一 继承与派生 从上面的例子可以看出&#xff1a; 继承&#xff1a;一旦指定了某种事物父代的本质特征&#xff0c;那么它的子代将会自动具有哪些性质。这就是一种朴素的可重用的概念。 派生&#xff1a;而且子代可以拥有父代没有的特性&#xff0c;这是可扩充的概念。 1 C 的…...

Poe是什么?怎样订阅Poe?

Poe&#xff08;全称“开放探索平台”&#xff0c;Platform for Open Exploration&#xff09;是一款由Quora开发的移动应用程序&#xff0c;于2022年12月推出。该应用程序内置建基于AI技术的聊天机器人&#xff0c;可供用户向机器人询问专业知识、食谱、日常生活&#xff0c;甚…...

基于FPGA的视频矩阵切换方案

一、单个显示设备的系统方案&#xff1a;会议室只有1个显示设备 会议室的信号源有很多&#xff0c;但是显示设备只有1个&#xff0c;这个时候最佳方案是使用切换器。 &#xff08;1&#xff09;切换器&#xff08;控制方式&#xff1a;遥控器、软件、机箱面板、中控&#xff…...

.NET周刊【5月第1期 2024-05-05】

国内文章 一个开源轻量级的C#代码格式化工具&#xff08;支持VS和VS Code&#xff09; https://www.cnblogs.com/Can-daydayup/p/18164905 CSharpier是一个开源、免费的C#代码格式化工具&#xff0c;特点是轻量级且依赖Roslyn引擎重构代码格式。支持的IDE包括Visual Studio …...

springcloud -nacos实战

一、nacos 功能简介 1.1.什么是Nacos&#xff1f; 官方简介&#xff1a;一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 Nacos的关键特性包括&#xff1a; 服务发现和服务健康监测动态配置服务动态DNS服务服务及其元数…...

第十五章 数据管理成熟度评估练习

单选题 (每题1分,共19道题) 1、 [单选] 下列选项中属于数据管理成熟度2级特征的选项是? A:很少或没有治理;有限的工具集;单个竖井(系统)内定义角色;控件(如果有的话的应用完全不一致);未解决的数据质量问题 B:治理开始出现;引入一致的工具集;定义了一些角色和…...

tcpdump速查表

tcpdump 速查表 -D 列出网络设备 ~]$ sudo tcpdump -D1.eth02.nflog (Linux netfilter log (NFLOG) interface)3.nfqueue (Linux netfilter queue (NFQUEUE) interface)4.any (Pseudo-device that captures on all interfaces)5.lo [Loopback]-i 指定网卡 前面列出的设备可以…...

单元测试与集成测试:软件质量的双重保障

目录 概述 单元测试 集成测试 单元测试的方法 白盒测试 黑盒测试 白盒测试的方法和用例设计 代码审查 集成测试 单元测试工具 结语 在软件开发中&#xff0c;测试是一个不可或缺的环节&#xff0c;它能够帮助我们发现和修复缺陷&#xff0c;确保软件的质量和可靠性。…...

孙宇晨对话大公网:香港Web3政策友好环境示范意义重大

日前,全球知名华文媒体大公网发布《湾区web3大有可为》重磅系列报道。报道通过对中国香港与大湾区其他城市Web3政策、行业创新和生态建设等方面的梳理,以及对行业领袖和重要行业机构的走访,全面展现了在大湾区一体化发展的背景下,Web3等数字经济模式在该地区的长远发展潜力。 …...

Python运维之多线程!!

一、多线程 二、多线程编程之threading模块 2.1、使用threading进行多线程操作有两种方法&#xff1a; 三、多线程同步之Lock&#xff08;互斥锁&#xff09; 四、多线程同步之Semaphore&#xff08;信号量&#xff09; 五、多线程同步之Condition 六、多线程同步之Event…...

milvus插入数据时,明明不超长,但总是报长度错误?

在处理插入milvus数据时&#xff0c;设置了字段长度为512. 明明考虑了预留&#xff0c;插入的数据中没有这么长的&#xff0c;但还是会有报错 类似&#xff1a;MilvusException: (code0, messagethe length (564) of 78th string exceeds max length (512) 查找max(len(x) for …...

怎么把图片大小缩小到1M?教你几招图片你压缩

当我们的图片数量越来越多的时候&#xff0c;占用的内存也就越来越多&#xff0c;时间长了之后&#xff0c;会导致我们空间不足或者设备比较卡顿&#xff0c;为了缓解这个问题&#xff0c;很多人会选择去删除一些不必要的图片文件&#xff0c;其实还有个方法就是利用图片压缩的…...

python数据分析常见命令

前言 近些天我会整理一些我平时清理csv,excel数据经常用的常见命令来分享给大家学习&#xff0c;大家一起加油&#xff01; 第一个命令&#xff1a;引入pandas库 pandas库是一个开源的数据分析工具&#xff0c;主要用于数据处理和数据分析。 import pandas as pd 第二个命令…...