深入解析 STM32 GPIO:结构、配置与应用实践

        理解 GPIO 的工作原理和配置方法是掌握 STM32 开发的基础,后续的外设(如定时器、ADC、通信接口)都依赖于 GPIO 的正确配置。

目录

一、GPIO 的基本概念

二、GPIO 的主要功能

三、GPIO 的内部结构

四、GPIO 的工作模式

1. 输入模式

2. 输出模式

3. 复用功能模式

4. 模拟模式

五、GPIO 的配置寄存器

六、GPIO 的配置步骤(以点亮 LED 为例)

1. 使能 GPIO 时钟

2. 配置 GPIO 模式

3. 控制电平

七、GPIO 的应用场景

八、注意事项

九、总结


 

一、GPIO 的基本概念

        GPIO(General Purpose Input/Output,通用输入输出)是 STM32 微控制器上的一种多功能引脚,可以通过软件配置为输入或输出模式,用于与外部设备进行数字信号交互。每个 GPIO 引脚都可以独立配置,支持多种工作模式和功能。


二、GPIO 的主要功能

  1. 数字输入:读取外部信号的电平状态(高电平或低电平)。

  2. 数字输出:控制引脚输出高电平或低电平。

  3. 复用功能:将引脚配置为特殊功能(如串口、SPI、I2C 等)。

  4. 模拟功能:将引脚配置为模拟输入(用于 ADC)或模拟输出(用于 DAC)。


三、GPIO 的内部结构

STM32 的 GPIO 内部结构较为复杂,但可以简化为以下几个关键部分:

  1. 输入驱动器

    • 通过施密特触发器将外部信号转换为数字信号(0 或 1)。

    • 支持上拉/下拉电阻,用于稳定电平。

  2. 输出驱动器

    • 推挽输出:通过 PMOS 和 NMOS 管实现高电平和低电平输出。

    • 开漏输出:仅通过 NMOS 管实现低电平输出,高电平需要外部上拉电阻。

  3. 复用功能选择器

    • 将引脚连接到内部外设(如 USART、SPI 等)。

  4. 模拟开关

    • 将引脚连接到 ADC 或 DAC。


四、GPIO 的工作模式

STM32 的 GPIO 支持多种工作模式,具体如下:

1. 输入模式

  • 浮空输入(Floating Input)

    • 引脚电平完全由外部电路决定,内部无上拉/下拉电阻。

    • 适用于外部电路已提供明确电平的场景。

  • 上拉输入(Pull-up Input)

    • 内部通过上拉电阻连接到 VDD,默认电平为高。

    • 适用于按键检测等场景。

  • 下拉输入(Pull-down Input)

    • 内部通过下拉电阻连接到 GND,默认电平为低。

    • 适用于按键检测等场景。

2. 输出模式

  • 推挽输出(Push-Pull Output)

    • 可以主动输出高电平或低电平,驱动能力强。

    • 适用于驱动 LED、继电器等。

  • 开漏输出(Open-Drain Output)

    • 只能输出低电平或“悬空”,高电平需要外部上拉电阻。

    • 适用于 I2C 等总线通信。

3. 复用功能模式

  • 将引脚连接到内部外设(如 USART、SPI、I2C 等)。

  • 需要同时配置 GPIO 和外设寄存器。

4. 模拟模式

  • 模拟输入:将引脚连接到 ADC,用于读取模拟信号。

  • 模拟输出:将引脚连接到 DAC,用于输出模拟信号。


五、GPIO 的配置寄存器

STM32 的 GPIO 配置通过以下寄存器实现:

  1. GPIO 模式寄存器(GPIOx_MODER)

    • 配置引脚为输入、输出、复用或模拟模式。

  2. GPIO 输出类型寄存器(GPIOx_OTYPER)

    • 配置输出模式为推挽或开漏。

  3. GPIO 输出速度寄存器(GPIOx_OSPEEDR)

    • 配置输出速度(低速、中速、高速、超高速)。

  4. GPIO 上拉/下拉寄存器(GPIOx_PUPDR)

    • 配置上拉、下拉或浮空输入。

  5. GPIO 输入数据寄存器(GPIOx_IDR)

    • 读取引脚的电平状态。

  6. GPIO 输出数据寄存器(GPIOx_ODR)

    • 设置引脚的输出电平。

  7. GPIO 置位/复位寄存器(GPIOx_BSRR)

    • 原子操作,用于设置或清除引脚电平。

  8. GPIO 复用功能寄存器(GPIOx_AFRH/GPIOx_AFRL)

    • 配置引脚的复用功能。


六、GPIO 的配置步骤(以点亮 LED 为例)

假设使用 PA5 引脚控制 LED,步骤如下:

1. 使能 GPIO 时钟

STM32 的外设需要先开启时钟才能使用:

RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;  // 使能 GPIOA 的时钟

2. 配置 GPIO 模式

将 PA5 设置为推挽输出:

GPIOA->MODER &= ~GPIO_MODER_MODER5;    // 清除原有模式
GPIOA->MODER |= GPIO_MODER_MODER5_0;   // 设置为输出模式(01)
GPIOA->OTYPER &= ~GPIO_OTYPER_OT5;     // 推挽输出(0)
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5; // 设置输出速度

3. 控制电平

GPIOA->BSRR = GPIO_BSRR_BS5;  // 输出高电平(点亮 LED)
GPIOA->BSRR = GPIO_BSRR_BR5;  // 输出低电平(熄灭 LED)

七、GPIO 的应用场景

  1. 输出模式

    • 控制 LED、蜂鸣器、继电器等。

    • 驱动数码管、LCD 屏幕。

  2. 输入模式

    • 检测按键、开关状态。

    • 接收传感器数字信号(如红外避障)。

  3. 复用功能

    • 作为串口(UART)、SPI、I2C 的通信引脚。

    • 连接 PWM 输出(控制电机速度)。

  4. 模拟功能

    • 读取模拟信号(如温度传感器)。

    • 输出模拟信号(如音频信号)。


八、注意事项

  1. 电平兼容

    • STM32 的 GPIO 是 3.3V 电平,直接连接 5V 设备可能损坏芯片。

  2. 驱动能力

    • 单个 GPIO 的电流有限(如 20mA),驱动大功率设备需加三极管或 MOSFET。

  3. 复用功能

    • 使用特殊功能(如串口)时,需同时配置外设和 GPIO。

  4. 引脚锁定

    • 某些引脚可能被默认配置为特殊功能(如 JTAG),需手动释放。


九、总结

STM32 的 GPIO 是其与外部世界交互的核心接口,通过灵活配置可以实现多种功能:

  • 输入模式:读取外部信号。

  • 输出模式:控制外部设备。

  • 复用功能:实现复杂通信协议。

  • 模拟功能:处理模拟信号。

 

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

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

相关文章

使用DeepSeek建立一个智能聊天机器人0.1

我对代码进行进一步的完善,增加更多的节点连接及功能运用,并确保配置文件 config.json 的内容更加丰富和详细。以下是完善后的代码和 config.json 文件内容。 完善后的代码 import tkinter as tk from tkinter import scrolledtext, filedialog, messa…

【人工智能】人工智能学习基础知识汇总

第1章初识人工智能 本章主要介绍人工智能的概念、诞生和发展历程。具体包括人工智能概念的提出和涉及 的相关重要人物,以及人工智能发展过程中的几个阶段,包括诞生、两次浪潮与寒冬、稳健 阶段和ABC 新时代。 本章的主要知识点如下: 人工智能概念 1. 人工智能英文名为“…

Promise的三种状态

目录 代码示例 HTML JavaScript 代码: 代码解释 总结 在 JavaScript 中,Promise 是一种异步编程的解决方案,它用于表示异步操作的最终完成(或失败)及其结果值。Promise 主要有三种状态: Pending&#…

排序之选择排序(C# C++)

目录 1 选择排序 2 排序原理 3 排序步骤 4 代码示例 4-1 C#代码示例 4-2 C代码示例 1 选择排序 选择排序(Selection Sort)是一种简单直观的排序算法,它的基本思想是每一轮从待排序的数据元素中选出最小(或最大&#xff09…

达梦 跟踪日志诊断

目录标题 参考连接**性能诊断:跟踪日志诊断****总结** 参考连接 性能诊断 -> 跟踪日志诊断 性能诊断:跟踪日志诊断 备份现有的日志配置文件 在修改文件之前,建议先备份原始文件,以防万一需要恢复。 cp /opt/dmdbms/dmdata/DA…

nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作

要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁,可以按以下步骤操作: 步骤 1:查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于: -> v18.17.1v16.20…

算法与数据结构(多数元素)

题目 思路 方法一:哈希表 因为要求出现次数最多的元素,所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大,则替换。 方法二:摩尔算法 摩尔的核心算法就是对抗,因为存在次数多…

《open3d qt 网格采样成点云》

open3d qt 网格采样成点云 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionMeshUniformSample_triggered();//均匀采样 void MainWindow::

windows平台上 oracle简单操作手册

一 环境描述 Oracle 11g单机环境 二 基本操作 2.1 数据库的启动与停止 启动: C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期五 7月 31 12:19:51 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. 连接到:…

mybatis mapper java.uti.Date 与 jdbcType.TIMESTAMP相差8小时

Java实体类 给类型是 Date mybatis中配置的 jdbcType“TIMESTAMP” 最后通过mapper查询出的数据,比数据库中一直少8个小时。网上查询以及深度学习 问答系统,都说是时区问题导致的。 检查了数据库连接字符串 已经添加了 asia/shanghai 采用select sysdat…

【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法

最开始引入了1.7.5版本的slf4j-log4j依赖包,但是控制台不报错也不显示日志 在https://mvnrepository.com/找到最新的2.0.16版本之后出现报错: 进入提示的slf4j网站中可以找到从2.0.0版本开始,slf4j-log4j已经被slf4j-reload4j取代&#xff1…

C语言交换排序之快速排序

文章目录 概要代码输出分析优缺点 概要 快速排序(Quick Sort): 是一种非常高效的排序算法,基于分治法(Divide and Conquer)的思想。它的基本思想是通过一个"基准"元素(pivot&#xf…

SpringMVC请求执行流程源码解析

文章目录 0.SpringMVC九大内置组件1.processRequest方法1.请求先到service方法2.然后不管是get还是post都会跳转到processRequest方法统一处理 2.doService方法3.doDispatch方法1.代码2.checkMultipart 4.核心流程 0.SpringMVC九大内置组件 1.processRequest方法 1.请求先到se…

深度学习项目--基于RNN的阿尔茨海默病诊断研究(pytorch实现)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 其实这个项目比较适合机器学习做,用XGBoost会更好,这个项目更适合RNN学习案例,测试集准确率达到百分之84.2&#xf…

华宇TAS应用中间件与因朵科技多款产品完成兼容互认证

在数字化浪潮澎湃向前的当下,信息技术的深度融合与协同发展成为推动各行业创新变革的关键力量。近日,华宇TAS应用中间件携手河北因朵科技有限公司,完成了多项核心产品的兼容互认证。 此次兼容性测试的良好表现,为双方的进一步深入…

麒麟操作系统-MySQL5.7.36二进制安装

1、创建MySQL虚拟用户 groupadd mysql useradd -g mysql -s /sbin/nologin -M mysql 2、创建目录 mkdir -p /data/file #创建文件目录 mkdir -p /opt/mysql #创建MySQL安装目录 mkdir -p /data/mysql/mysql3306/{data,logs} #创建MySQL数据及日志目录 3、安装MySQL5.7.36 …

算法学习笔记之贪心算法

导引(硕鼠的交易) 硕鼠准备了M磅猫粮与看守仓库的猫交易奶酪。 仓库有N个房间,第i个房间有 J[i] 磅奶酪并需要 F[i] 磅猫粮交换,硕鼠可以按比例来交换,不必交换所有的奶酪 计算硕鼠最多能得到多少磅奶酪。 输入M和…

Xcode证书密钥导入

证书干嘛用 渠道定期会给xcode证书,用来给ios打包用,证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中,选择系统。(选登录也行,反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥&#xff…

使用 Elastic APM 监控你的 C++ 应用程序

作者:来自 Elastic Haidar Braimaanie 在本文中,我们将使用 Opentelemetry CPP 客户端来监控 Elastic APM 中的 C 应用程序。 介绍 开发人员、SRE 和 DevOps 专业人员面临的主要挑战之一是缺乏能够为他们提供应用程序堆栈可见性的综合工具。市场上的许多…

前端骨架怎样实现

前端骨架屏(Skeleton Screen)是一种优化页面加载体验的技术,通常在内容加载时展示一个简易的占位符,避免用户看到空白页面。骨架屏通过展示页面结构的骨架样式,让用户有页面正在加载的感觉,而不是等待内容加…