STM32(GPIO)

news2024/11/25 0:28:59

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);//输出高电平

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

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

相关文章

迄今为止最全- 前端性能优化

简介 当我们说前端性能优化的时候,指的可能是不同场景的性能优化。前端涉及性能优化的场景主要有: 项目构建性能优化 页面性能优化 加载时性能优化 运行时性能优化 构建性能主要指构建速度,优化方法和打包工具直接相关,主要…

航空科技:探索飞机引擎可视化技术的新视界

随着航空技术的飞速发展,飞机引擎作为航空器最为关键的部件之一,其性能直接影响到飞机的安全性、经济性和环保性。因此,飞机引擎可视化技术的应用日益成为航空行业研究和发展的热点。 通过图扑将复杂的飞机引擎结构和工作原理以直观、生动的…

[GXYCTF 2019]Ping Ping Ping(内联执行)、[鹤城杯 2021]EasyP ($_SERVER)

目录 [GXYCTF 2019]Ping Ping Ping 内联执行 [鹤城杯 2021]EasyP [PHP_SELF]、$_SERVER[SCRIPT_NAME] 与 $_SERVER[REQUEST_URI] RCE命令注入可参考: RCE漏洞及其绕过——[SWPUCTF 2021 新生赛]easyrce、caidao、babyrce-CSDN博客 [GXYCTF 2019]Ping Ping Pin…

有哪些网络兼职适合大学生参与?揭秘几个简单又实用的兼职机会

有哪些网络兼职适合大学生参与?揭秘几个简单又实用的兼职机会 对于大学生而言,除了专注于学业,利用空余时间参与一些网络兼职,不仅能锻炼个人技能,还能为未来的职业生涯积累宝贵的经验。想象一下,步入社会…

基于SpringBoot + Vue的学生宿舍课管理系统设计与实现+毕业论文(15000字)+开题报告

系统介绍 本系统包含管理员、宿管员、学生三个角色。 管理员:管理宿管员、管理学生、修改密码、维护个人信息。 宿管员:管理公寓资产、管理缴费信息、管理公共场所清理信息、管理日常事务信息、审核学生床位安排信息。 学生:查看公共场所清理…

标准输入输出流(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 输入三角形的三边a,b,c,计算三角形的面积。形成三角形的条件是ab>c,bc>a,ac>b,编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息…

IDEA设置 | 个性化设置

🙋大家好!我是毛毛张! 🌈个人首页:神马都会亿点点的毛毛张 文章目录 前言IDEA自动生成序列化ID 前言 本篇博客将专注于整理IDEA新UI界面的相关设置 IDEA自动生成序列化ID CtrlAltS快捷键打开设置界面 选择Editor→Inspections…

MyBatis——使用MyBatis完成CRUD

CRUD&#xff1a;Create Retrieve Update Delete 1、insert <insert id"insertCar">insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)values(null,1003,五菱宏光,30.0,2020-09-18,燃油车); </insert> 这样写显然是写死的&#…

大模型微调方法汇总

微调方法 Freeze方法P-tuning方法 prefix-tuningPrompt TuningP-tuning v1P-tuning v2Lora方法 重要相关参数LoRA 的优势Qlora方法 相关参数微调经验 模型选择模型大小选择数据处理微调方案英文模型需要做词表扩充吗&#xff1f;如何避免灾难遗忘大模型的幻觉问题微调后的输出…

2024第八季完美童模 【星光】品牌赛区 【直通】赛 完美收官

2024年5月1日&#xff0c;春风徐徐的【星光品牌赛区】热闹非凡&#xff0c;备受瞩目的第八季完美童模【星光品牌赛区】赛区【直通赛】在这一天正式拉开了帷幕。比赛现场&#xff0c;童模们身着华服&#xff0c;在舞台上演绎了“亚特兰蒂斯”的时尚主题赛。 参赛选手们身着带有海…

新店2个月盈利6万,就是因为做对了这六个步骤,教你正确起店步骤

大家好&#xff0c;我是电商花花。 2024年依然能做抖音小店&#xff0c;因为就按照我们这边团队的实操经验来看。 抖音小店不仅可以做&#xff0c;而且即便是新手小白也可以做&#xff0c;只要掌握抖音小店背后的运营方法和起店步骤&#xff0c;就能很快出单并做起来。 今天…

【Linux】Linux安装JDK

一、卸载Linux自带的JDK #查询已有的JDK rpm -qa | grep jdk ①将查询到的JDK全部卸载掉 #直接复制一整行的JDK名称 yum -y remove java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 ②卸载完第一个后再次查询 ③继续卸载&#xff0c;卸载完成后再次查询 ④查询…

如何将draw.io的图导入word

解决办法&#xff08;有点点复杂&#xff09; 先在http://draw.io导出格式为svg矢量图格式&#xff0c;然后用visio打开svg&#xff0c;调整完界面等等之后再保存&#xff0c;然后在word里面插入visio

simulink-仿真以及PID参数整定/PID tuner 的使用流程

控制器搭建与参数整定 搭建一个前馈PID控制器控制系统PID tuner使用 一个懂点控制但不多的小白&#xff0c;因为需要利用simulink仿真&#xff0c;所以不得不学习一些仿真的知识&#xff0c;这篇文章适合和我一样的新手入门&#xff0c;有理解错误的地方希望大手们能够指出来共…

volatile详解、原理

文章目录 一、Volatile的定义和作用1.1 Volatile简介1.2 Volatile作用 二、并发编程中的三个问题&#xff1a;可见性、原子性、有序性二、Java内存模型&#xff08;JMM&#xff09;三、volatile变量的特性3.1 线程可见性3.2 禁止重排序禁止重排序原理禁止重排序举例 3.3 volati…

七、e2studio VS STM32CubeIDE之显示中文编码

目录 一、概述/目的 二、查看和修改文件编码 三、eclipse编码格式 3.1 优先级 3.1.1 全局workspace 3.1.2 工程 3.1.3 文件 3.1.4 全局文件的content type 二、STM32CubeIDE设置显示中文编码 二、e2studio设置显示中文编码 七、e2studio VS STM32CubeIDE之显示中文编…

【Linux】网络接口绑定和组合的操作实例

网络接口绑定和组合的操作实例 &#xff08;一&#xff09;网卡1. 增2. 查3. 激活——设置网络接口 &#xff08;二&#xff09;网络接口绑定1. 概述2. 实验操作3. 删除绑定 &#xff08;三&#xff09;网络接口组合1. 概述2. 实验操作 &#xff08;一&#xff09;网卡 1. 增 …

第十五篇:全面防护:构建不容侵犯的数据库安全策略与实战指南

全面防护&#xff1a;构建不容侵犯的数据库安全策略与实战指南 1. 引言&#xff1a;数据库安全的现代战略 1.1 简介&#xff1a;数据库安全在当今的数字化时代中的重要性 在数字化的浪潮中&#xff0c;数据已成为企业乃至国家的核心资产&#xff0c;其价值不亚于实体世界的黄…

【JavaEE初阶系列】——博客系统(编写服务器/前后端交互代码)

目录 &#x1f6a9;部署页面需求 &#x1f6a9;准备工作 &#x1f6a9;获取博客列表页 &#x1f6a9;博客详情页 &#x1f6a9;实现登录页面 &#x1f388;强制要求登录 &#x1f388;显示用户信息 &#x1f6a9;退出登录 &#x1f6a9;发布博客 &#x1f6a9;部署页面…

5.nginx常用命令和日志定时切割

一. nginx常用的相关命令介绍 1.强制关闭nginx: ./nginx -s stop 2.优雅的关闭nginx: ./nginx -s quit 3.检查配置文件是否正确&#xff1a; ./nginx -t 4.查看nginx版本&#xff1a; ./nginx -v 5.查看nginx版本相关的配置环境信息&#xff1a;./nginx -V 6.nginx帮助信…