GPIO是通用的输入输出接口,可配置8种输入模式,输出模式下可控制端口输出高低电平,用于点亮LED、控制蜂鸣器、模拟通信协议等;输入模式下可以读取端口的高低电平或者电压,用于读取按键、外接模块的电平信号、ADC的电压采集等。

一、GPIO的输出

当GPIO引脚被配置为输出模式时,其核心目的是由MUC主动控制引脚的电平状态(高电平VDD或低电平VSS/GND),从而驱动外部电路或者信号其他设备。

GPIO输出模式的主要特点

        1.可配置的输出类型:

 推挽输出:引脚内部包含一个 PMOS(上管)和一个 NMOS(下管)晶体管。当输出高电平  时,PMOS 导通,NMOS 截止,引脚连接到 VDD。当输出低电平时,PMOS 截止,NMOS 导通,引脚连接到VSS。

  • 特点:有较强的驱动能力,不依赖外部电路,输出的高低电平比较准确。

开漏输出:引脚内部仅包含一个 NMOS(下管)晶体管。当输出低电平时,NMOS 导通,引脚连接到VSS。当输出高电平时,NMOS 截止,引脚处于高阻态(相当于断开)。

  • 特点:依赖上拉,电平转换,驱动能力较弱(高电平)。

        2.可配置的输出速度:

STM32允许为输出引脚配置不同的压摆率。这决定了引脚电平从低到高或从高到低切换的速度。

一般通常分为低速、中速、高速、超高速。

低速:最低功耗、最低噪声。一般适用于不频繁切换的引脚(如LED指示灯、控制使能信号)。

中速:平衡功耗、噪声和速度。

高速:最快的切换速度。一般适用于需要高频切换的引脚(如SPI、USART时钟线、PWM输出)。

超高速:在部分高性能型号上提供,速度最快。

        3.输出数据寄存器

ODR:直接控制引脚输出电平。

  • 写1到对应的ODR位:输出高电平(在推完模式下)使输出管截止(在开漏模式下,需外部上拉才能呈现高电平)。
  • 写0到对应的ODR位:输出低电平(在推挽和开漏模式下都使输出管导通拉低)。

BSRR 位设置/复位寄存器。这是一个更高效、更常用的操作 ODR 的方式,特别适合原子操作(避免读-修改-写操作在多任务环境中的竞争条件)。

  • BSRR的低 16 位:写1将对应的 ODR 位置1(输出高/开漏截止)。

  • BSRR的高 16 位:写1将对应的 ODR 位置0(输出低/开漏导通)。

  • 写0到BSRR的任何位无效果。这允许只改变需要改变的位而不影响其他位。

        4.可选的内部上拉/下拉电阻

  • 即使在输出模式下,也可以选择启用内部的上拉或下拉电阻。

主要用途:

在MCU刚启动或者复位后、GPIO 配置完成前,内部上拉/下拉可以提供一个确定的初始电平,防止引脚悬空导致的不确定状态。

二、如何配置 GPIO 为输出模式

        1.使能GPIO端口时钟:

在RCC寄存器中使能对应GPIO端口(GPIOA,GPIOB)的时钟。这是必要的!

        2.配置引脚模式:

在GPIOx_MODER寄存器中寄存器中将对应引脚的模式位设置为01(输出模式)。

        3.配置输出类型:

在 GPIOx_OTYPER 寄存器中设置对应引脚的输出类型位:

  • 0 = 推挽输出
  • 1 = 开漏输出

       4.配置输出速度:

在 GPIOx_OSPEEDR 寄存器中设置对应引脚的速度位(选择低速、中速、高速或超高速)。

       5.(可选)配置上拉/下拉:

 在 GPIOx_PUPDR 寄存器中设置对应引脚的上拉/下拉位:

  • 00 = 无上拉下拉

  • 01 = 上拉

  • 10 = 下拉

  • 11 = 保留 (通常不用)

       6.设置初始输出电平:

通过 GPIOx_ODR 或更推荐使用 GPIOx_BSRR 寄存器设置引脚初始输出状态(高或低)。

GPIO的输出总结

STM32 的 GPIO 输出功能强大且灵活。理解 推挽 和 开漏 两种输出类型的原理、特点和应用场景是核心。合理配置 输出速度 和 上拉/下拉 电阻对于优化性能、降低功耗和噪声至关重要。熟练掌握通过 ODR 和 BSRR 寄存器(或库函数)控制引脚电平是实际编程的基础。始终牢记引脚的 电气特性限制(电压、电流)是安全可靠设计的前提。

三、GPIO的输入

当 GPIO 引脚被配置为输入模式时,其核心目的是由 MCU 读取引脚上来自外部电路的电平状态(高电平VDD或低电平VSS/GND)。MCU 不会主动驱动该引脚的电平,而是检测外部施加在引脚上的电压。

GPIO 输入模式的主要特点

        1.高输入阻抗:

  • 配置为输入模式的 GPIO 引脚呈现非常高的输入阻抗(通常在兆欧姆级别)。这意味着从外部电路汲取的电流非常微小(通常在微安级别)。
  • 优点: 不会显著加载(影响)外部信号源,适合读取传感器信号、按键状态等微弱或高阻抗信号。

        2.可配置的输入特性:

STM32 为输入引脚提供了三种主要的配置选项,用于确定引脚在无外部驱动信号时的默认状态抗干扰能力

浮空输入:内部既不上拉也不下拉。引脚完全“悬空”。

上拉输入:在引脚和VDD之间内部连接一个电阻(典型值 30KΩ - 50KΩ)。

下拉输入:在引脚和VSS之间内部连接一个电阻(典型值 30KΩ - 50KΩ)。

        3.施密特触发器:

所有 STM32 GPIO 输入引脚都包含施密特触发器

作用: 对输入信号进行整形

        4.输入数据寄存器

IDR: 输入数据寄存器。这是读取引脚当前电平状态的地方。

读取IDR寄存器中对应引脚的位:

  • 0 = 检测到低电平 (引脚电压 < V_IL)

  • 1 = 检测到高电平 (引脚电压 > V_IH)

四、如何配置GPIO为输入模式

  1. 使能 GPIO 端口时钟: 在 RCC 寄存器中使能对应 GPIO 端口(如 GPIOA, GPIOB)的时钟。必须步骤!

  2. 配置引脚模式: 在 GPIOx_MODER 寄存器中将对应引脚的模式位设置为 00 (输入模式)。

  3. 配置上拉/下拉: 在 GPIOx_PUPDR 寄存器中设置对应引脚的上拉/下拉位:

  • 00 = 浮空输入 (无上拉下拉 - 慎用)

  • 01 = 上拉输入

  • 10 = 下拉输入

  • 11 = 保留 (通常不用)

(可选) 配置模拟模式: 如果该引脚将用作 ADC、DAC 或 Comparator 的输入,除了将 MODER 设置为模拟模式 (11),通常也要求 PUPDR 配置为无上拉下拉 (00)。模拟模式会禁用施密特触发器和数字输入路径。

//直接读取 IDR 寄存器
if (GPIOA->IDR & GPIO_IDR_ID0) {  // 检查 PA0 对应位 (IDR bit0) 是否为 1// PA0 为高电平 (按键松开)
} else {// PA0 为低电平 (按键按下)
}

一般适用场景:

按键/开关检测:上拉输入 + 按键接地:松开=高电平,按下=低电平。下拉输入 + 按键接 VDD:松开=低电平,按下=高电平。

数字传感器读取:读取数字传感器(如数字温度传感器 DS18B20 - 需单总线协议、PIR 运动传感器、霍尔开关)的输出信号。

接收数字信号:

  • 通信接口:UART RX, SPI MISO, I2C SDA (作为从机接收时), CAN RX 等。这些复用功能通常会自动或要求配置相应的输入模式(浮空或上拉取决于协议)。

  • 外部中断源:配置为输入是使用外部中断/事件控制器 (EXTI) 的前提条件。

  • 数字状态监控:读取外部设备的状态信号(如就绪READY、忙BUSY、错误ERROR等)。

模拟信号采集 (ADC/DAC/COMP):当引脚配置为模拟输入模式时,它本质上是输入模式的一个特例(MODER=11, PUPDR=00),信号直接连接到 ADC 转换器、比较器或其他模拟外设,绕过施密特触发器和数字输入路径。

电平检测/监控: 监控电源状态、外部逻辑电平等。

注意事项

1、避免浮空输入: 这是导致不稳定、误触发、额外功耗的最常见原因之一。除非外部电路保证提供确定驱动(如推挽输出信号)或用于模拟输入,否则务必启用内部上拉或下拉电阻!

2、输入阻抗与信号源驱动能力: 虽然输入阻抗很高,但如果信号源阻抗也很大(如长线、高阻抗传感器),信号上升/下降时间会变慢,可能影响高速信号识别或增加噪声敏感性。必要时可考虑缓冲器(如跟随器)。

3、复用功能: 当引脚用作通信接口 (UART, SPI, I2C, CAN 等) 的输入或外部中断 (EXTI) 时,输入模式(浮空、上拉)的配置需遵循外设或中断的要求。参考参考手册和外设章节。

GPIO的输入总结

STM32 的 GPIO 输入模式是感知外部数字世界的关键。核心在于理解浮空、上拉、下拉三种配置的区别与应用场景(上拉下拉是稳定性的保障),掌握施密特触发器的抗噪作用,以及严格遵守电压限制(特别是 5V Tolerant)。通过读取 IDR 寄存器可以获取引脚状态。按键检测可以很好的理解输入模式原理和实践。一定要避免浮空输入注意电压兼容性是设计可靠系统的关键原则。

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

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

相关文章

5分钟了解OpenCV

在数字化时代&#xff0c;图像和视频已经成为信息传递的核心载体。从手机拍照的美颜功能到自动驾驶的路况识别&#xff0c;从医学影像分析到安防监控系统&#xff0c;视觉技术正深刻改变着我们的生活。而在这背后&#xff0c;OpenCV 作为一款强大的开源计算机视觉库&#xff0c…

Oracle 关闭 impdp任务

Oracle 关闭 impdp任务 执行 impdp system/123456 attachSYS_EXPORT_TABLE_01 执行 stop_jobimmediate

数据结构——链表2

1.2 实现单链表 在上一篇文章中&#xff0c;单链表的实现只有一少部分&#xff0c;这一篇接着来了解单链表剩下的接口实现。 SList.h#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定义单链表就是定义节点&#xff0c;因为单链表…

Windows和Linux应急响应以及IP封堵

目录 1、Windows入侵排查思路 1.1 检查系统账号安全 1.2 检查异常端口、进程 1.3 检查启动项、计划任务、服务 1.4 检查系统相关信息 1.5 自动化查杀 1.6 日志分析 系统日志分析 Web 访问日志 2、Linux 入侵排查思路 2.1 账号安全 2.1.1、基本使用 2.1.2、入侵排查…

MIT成果登上Nature!液态神经网络YYDS

2025深度学习发论文&模型涨点之——液态神经网络液态神经网络&#xff08;Liquid Neural Networks&#xff0c;LNN&#xff09;是一种受生物神经系统启发的连续时间递归神经网络&#xff08;RNN&#xff09;&#xff0c;其核心创新在于将静态神经网络转化为由微分方程驱动的…

AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表

- **AI与数据可视化的革命性结合**:介绍AI如何降低数据可视化门槛,提升效率。 - **Apache ECharts:专业可视化的利器**:使用表格对比展示ECharts的特点、优势和适用场景。 - **四步实现AI驱动图表生成**:通过分步指南讲解从环境准备到图表优化的全流程,包含多个代码示例及…

vue2 基础学习 day04 (结构/样式/逻辑、组件通信、进阶语法)下

一、非父子通信-event bus 事件总线1.作用非父子组件之间&#xff0c;进行简易消息传递。(复杂场景→ Vuex)2.步骤创建一个都能访问的事件总线 &#xff08;空Vue实例&#xff09;import Vue from vue const Bus new Vue() export default BusA组件&#xff08;接受方&#xf…

ubuntu 20.04 C和C++的标准头文件都放在哪个目录?

在 Ubuntu 20.04 中&#xff0c;C 和 C 标准头文件的存放目录主要由编译器&#xff08;如 GCC&#xff09;的安装路径决定&#xff0c;通常分为以下两类&#xff1a;​1. C 标准头文件​C 语言的标准头文件&#xff08;如 <stdio.h>、<stdlib.h> 等&#xff09;默认…

change和watch

是的&#xff0c;你理解得很对&#xff01; change 与 v-model 的结合&#xff1a;change 事件通常用于监听 表单元素的变化&#xff0c;但它并不一定意味着值发生了变化。它主要是当 用户与输入框交互时&#xff08;如点击选项、选择文本框内容、提交表单等&#xff09;触发的…

分布式微服务--GateWay(1)

一、什么是微服务网关&#xff08;API Gateway&#xff09; 定义&#xff1a;微服务网关是整个系统请求的统一入口&#xff0c;负责请求转发、过滤处理、安全校验等。 作用&#xff1a; 请求路由 日志记录 权限控制 参数校验 解决跨域问题 黑白名单控制 限流、熔断、降级…

大文件断点续传(vue+springboot+mysql)

断点续传vue前端代码后端代码controller 层service层持久层主表&#xff0c;初始化单次上传文件表&#xff0c;单次上传所有的文件记录文件分块表科普信息参考其他博主 流程图 vue前端代码 这里是只做了demo示例&#xff0c;主线测试没什么问题&#xff0c;前端同学可参考修…

Nodejs》》MySql

Node.js 操作MySQL数据库 文档 # 项目要先安装mysql包npm i mysqlxx // 安装指定版本npm i mysql // 默认安装最新版本 # 连接 mysq// 使用连接池连接const mysql require(mysql)# 建立连接const db mysql.createPool({host:, // 数据库的IP地址user:ro…

金仓数据库常见问题(持续更新)

目录 1.查看大小是否敏感写参数&#xff0c;提示&#xff1a;未认可的配置参数 "case_sensitive" 2.sys_backup.sh init时提示can not connect the primary node 3.设置逻辑备份运行脚本时提示错误are not allowed to use this program (crontab) 4.修改表字段类…

Docker Buildx最佳实践:多架构镜像构建指南

文章目录为什么需要 Docker Buildx安装与启用 Docker Buildx创建多架构构建器实例构建多架构镜像优化构建性能调试多架构构建实战案例&#xff1a;构建 Go 应用多架构镜像总结Docker Buildx 是 Docker 官方推出的扩展工具&#xff0c;用于支持多平台镜像构建&#xff0c;简化跨…

你用的是什么键盘?

在电竞行业飞速发展的当下&#xff0c;游戏键盘作为玩家操作的核心载体&#xff0c;其性能表现直接影响着游戏体验与竞技结果。而赛卓电子推出的磁轴键盘专用芯片 SC4823&#xff0c;凭借一系列突破性的技术特性&#xff0c;正成为游戏键盘领域的性能革新者。​对于游戏玩家而言…

Activiti 中各种 startProcessInstance 接口之间的区别

前言在用 RuntimeService 接口启动流程实例时&#xff0c;总是分不清楚不同 startProcessInstanceXXX 接口之间的区别&#xff0c;这篇文章基于 Activiti 7.0.0.GA 版本&#xff0c;对这一类接口进行一个梳理和归类。详解接口列表RuntimeService 接口中以 startProcessInstance…

新手BUG:函数中 static 变量的赋值语句只会执行一次

在 C 函数中使用 static 变量时&#xff0c;很多新手会陷入一个认知误区&#xff1a;认为变量的初始化语句会在每次函数调用时执行。比如在bool funcA() { // Q&#xff1a;多次调用funcA&#xff0c;funcB会被执行几次&#xff1f;// A&#xff1a;1次static bool value func…

Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”

一、引言&#xff1a;为什么数据类型如此重要&#xff1f;在 Python 编程中&#xff0c;数据类型决定了&#xff1a;数据的存储方式可以对数据执行的操作数据的取值范围不同类型之间的运算规则理解数据类型是编写正确、高效程序的基础。Python 是动态类型语言&#xff0c;虽然你…

WindowsLinux系统 安装 CUDA 和 cuDNN

Windows安装前的准备工作 检查硬件兼容性&#xff1a;确认电脑显卡为 NVIDIA GPU。通过快捷键 Win R 唤出“运行”&#xff0c;输入“control /name Microsoft.DeviceManager”唤出“设备管理器”&#xff0c;点击“显示适配器”查看是否有 NVIDIA 字样。 验证 CUDA 支持性&a…

工业数采引擎-通信链路SOCKET

通信库&#xff1a;DotNetty 封装实现&#xff1a;TcpServer、TcpClient、Udp TCP协议特性&#xff1a;面向连接协议&#xff1b;每个新连接都会创建独立的ChannelHandler实例&#xff1b;TcpHandler构造函数在每次客户端连接时触发 UDP协议特性&#xff1a;无连接协议&#…