【STM32】基础知识 第十二课 GPIO

news2024/12/24 11:24:32

【STM32】基础知识 第十二课 GPIO

  • 概述
  • GPIO 简介
  • GPIO 模式
  • GPIO 特点
  • GPIO 配置
  • GPIO 操作
  • 施密特触发器
  • 案例

概述

本文小白我将来介绍通用输入与输出, GPIO (General-Purpose Input/Output) 在单片机中的应用, 以及如何配合和食用 GPIO 来实现各种功能.

STM32 GPIO

GPIO 简介

GPIO 是单片机中常见的一种接口, 允许开发者通过软件配置将其用做数字输入, 数字输出或特定功能的引脚. GPIO 的灵活性使其称为现实各种功能的理想选择, 如 LED 控制, 按键输入, 传感器接口等.

GPIO

GPIO 模式

GPIO 引脚通常支持以下模式:

  • 数字输入: 在此模式下, GPIO 引脚用作数字输入, 可检测外部信号高电平或低电平
  • 数字输出: 在此模式下, GPIO 引脚用作数字输出, 可将内部信号输出为高电平或低电平
  • 特定功能: 许多微控制器将特定功能与 GPIO 引脚相关联, 比如 SPI, I2C, UART 等. 在此模式下, GPIO 引脚用于实现特定功能相关的信号传输

GPIO 特点

  1. 简单性: GPIO 接口相对简单, 只涉及数字高电平和低电平的信号. 这使得 GPIO 成为实现基本硬件接口的理想选择, 例如控制 LED, 读取开关状态等
  2. 灵活性: GPIO 引脚鱼油很高的灵活性, 因为它们可以通过软件配置为输入或输出模式. 此外, 许多单片机允许将 GPIO 引脚重新分配为特定功能. 如 I2C, SPI 或 UART
  3. 数字信号: GPIO 仅处理数字信号, 这意味着它们可以表示两个状态: 高电平和低电平. 这使得 GPIO 非常适合处理简单的数字硬件接口, 但不适合模拟信号
  4. 低速接口: 与其他高速接口 (如 PCIe, USB 等)相比, GPIO 通常用于低速, 短距离通信. 这是因为 GPIO 接口的信号传输速率受限于单片机的时钟频率和信号传输特性
  5. 低功耗: GPIO 接口通常拥有较低的功耗, 使其称为低功耗应用的理想选择. 在低速通信和简单接口中, GPIO 的功耗通常远低于其他高速接口
  6. 可配置性: 许多单片机提供了丰富的 GPIO 配置选项, 如内部上拉/下拉电阻, 输出类型 (推挽/开漏), 输出速度等. 这些选项允许开发者根据应用需求优化 GPIO 性能和功耗
  7. 易于实现中断: GPIO 可以很容易地实现中断功能, 当检测到特定条件 (如电平变化, 上升沿或下降沿) 时触发中断. 这使得 GPIO 成为实现外部事件响应的理想选择, 例如按键按下或传感器信号变化

GPIO 配置

在使用 GPIO 之前, 需要对其进行正确的配置. 常见的配置参数包括:

  • 模式: 设置 GPIO 引脚为输入, 输出或特定功能模式
  • 输出培新: 设置 GPIO 输出类型, 如推挽 (Push-pull) 或开漏 (Open-drain)
  • 上拉/下拉: 为 GPIO 引脚配置内部上拉或下拉电阻, 以确保引脚在未连接外部信号时具有稳定的电平状态
  • 速度: 设置 GPIO 引脚的输出速度, 以平衡速度和功耗之间的关系

GPIO 操作

在配置完成后, 可以使用以下方法操作 GPIO 引脚:

  1. 读取输入: 使用单片机提供的 API 或寄存器操作来读取 GPIO 引脚的当前输入状态 (高电平或低电平)
  2. 设置输出: 使用 API 或寄存器操作将 GPIO 引脚设置为高电平或低电平
  3. 翻转输出: 切换 GPIO 引脚的输出状态, 从高电平变为低电平, 或从低电平变为高电平, 或从低电平变为高电平

施密特触发器

施密特触发器 (Schmitt Trigger) 是一种具有滞回特性的电子比较器. 施密特触发器常用将模拟信号转换为数字信号, 消除信号噪声和抖动, 确保数字电路的稳定运行.

施密特触发器的基本原理是在输入信号的上升沿和下降沿分别设置不同的触发阈值. 当输入信号上升到上阈值时, 输出信号变为高电平; 当输入信号下降到下阈值时, 输出信号变为低电平. 这两个阈值之间的区间称为滞回区间. 施密特触发器可以将非标准方形波, 整形成方波.

案例

使用 STM32CubeMX 配置 GPIO 引脚. 将一个引脚配置为数字输出, 用于驱动 LED, 将另一个引脚配置为数字输入, 用于读取按键状态. 同时, 为输入引脚[位置内部上拉电阻.

代码:

#include "stm32f1xx_hal.h"

/* 定义按键输入引脚和LED输出引脚 */
#define BUTTON_PIN GPIO_PIN_0
#define BUTTON_PORT GPIOA
#define LED_PIN GPIO_PIN_1
#define LED_PORT GPIOA

int main(void)
{
  /* 初始化HAL库和系统时钟 */
  HAL_Init();
  SystemClock_Config();

  /* 初始化GPIO */
  MX_GPIO_Init();

  while (1)
  {
    /* 读取按键状态 */
    GPIO_PinState button_state = HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);

    /* 如果按键按下,点亮LED;否则熄灭LED */
    if (button_state == GPIO_PIN_RESET) // 按键按下时引脚为低电平
    {
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
    }
    else
    {
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
    }
  }
}

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

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

相关文章

十三、共享内存

文章目录 一、什么是共享内存(一)共享内存的定义(二)共享内存的原理(三)共享内存的理解 二、为什么要有共享内存三、共享内存怎么进行(一) 共享内存的数据结构(二&#x…

【Redis系列】Redis布隆过滤之8亿大数据集实战

序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级重要蓝色:用来标记二级重要 …

SPC Control Chart Tools for WPF 3.1 Crack

使用 WPF 的 SPC 控制图工具,将变量控制图(X-Bar R、X-Bar Sigma、单个范围、中值范围、EWMA、MA、MAMR、MAMS 和 CuSum 控制图)、属性控制图(p、np、c、u 和 DPMO 控制图)、频率直方图和帕累托图添加到 WPF 和 WPF We…

物理机:显卡3080 环境Centos7.9 如何检查及安装显卡驱动

环境: 硬件服务器:I5处理器, 显卡:3080 12G 等。 目标: 测试是否安装显卡。 如何找到正确的驱动版本。 安装显卡正确的显卡驱动。 一、检查是否正确安装显卡: # 检查使用什么型号的显卡: yum…

淄博烧烤,怎么就“出圈”了-也是机器视觉行业职场中的态度:少一点套路,多一些真诚,少一点计较,多一些宽容

我认为淄博烧烤之所以火爆,是因为它代表了一种淄博人的态度,一种对生活的热爱和对客人的真诚。 我认为淄博烧烤之所以火爆,是因为它代表了一种淄博人的态度,一种对生活的热爱和对客人的真诚。 我想更重要的一点,淄博烧…

使用NineData定制企业级数据库规范

1. 为什么需要数据库规范? 在企业级应用中,数据库是非常重要的一部分,它们存储着公司的核心数据,包括客户信息、订单、产品信息等等。如果这些数据没有得到妥善的管理,那么就会导致数据不一致、数据丢失、数据泄露等问…

涨知识!细数银行卡三要素 API 的 N 种验证方法

引言 银行卡三要素验证 API 是一种基于姓名、身份证号码和银行卡号等三种信息的验证服务,主要用于绑定银行卡时校验银行卡是否为该身份信息所有、手机号是否为银行卡绑定手机号。 银行卡三要素 API 的验证方法 银行卡三要素 API 的验证原理是通过与银行或银联网络…

k8s二进制搭建|ETCD + Flannel | 单节点部署 | 多节点的部署|dashbord的部署

k8s二进制搭建|ETCD Flannel | 单节点部署 | 多节点的部署|dashbord的部署 二进制搭建 Kubernetes v1.201 初始化环境2 部署 docker引擎3 在mster 192.168.10.10上操作4 在 node01 192.168.10.20节点上操作5 在 node02 192.168.10.30节点上操作6 检查etcd群集状态7 部署 Maste…

SpringBoot——入门程序的简单介绍

简单介绍: 在之前我们创建了一个基础的SpringBoot的程序,可以看到,我们只是启动了一个Java程序,但是它启动了一个Tomcat的服务器。其实在这里面他还启动了很多的服务,只不过这些服务我们都没有用到,我们就…

基于氢储能的热电联供型微电网优化调度方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【Slack+Claude保姆级安装教程】

🚀 AI破局先行者 🚀 🌲 AI工具、AI绘图、AI专栏 🍀 🌲 如果你想学到最前沿、最火爆的技术,赶快加入吧✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆&am…

探究问答系统的实现原理及其应用

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

clickhouse的嵌套数据结构Tuple、Array与Nested类型介绍和使用示例

文章目录 Tuple类型Array类型Nested类型使用示例单独使用Tuple数组嵌套 Array(Tuple)Nested类型 生产使用:分组查询 Tuple类型 Tuple是ClickHouse数据库中的一种数据类型,它允许在一个字段中存储由不同数据类型组成的元组(tuple)。元组可以包含任意数量…

RFID技术在智能制造领域的发展

RFID技术在智能制造领域的发展 RFID技术是构建智能制造的基础,自RFID技术普及以来,工业产线、零售、物流、交通、医疗、制造等领域,都能看到到RFID应用的身影。就智能制造领域来说,通过RFID技术可以帮助制造企业开展各项市场需求…

shell函数数组

shell函数数组 数组的表达方式 (30 20 10 60 50 40) #数组0 1 2 3 4 5 #下标下标从0开始,中间可以断开 一: 数组的定义方法 方法一 数组名(value0 value1 value2 ...)方法二 数组名&#xff08…

网络路径下倾斜模型生产流程-模型s3c化

网络路径下倾斜模型生产流程-模型s3c化 将osgb模型处理文件拷贝到osgb模型文件夹下 在osgb模型文件夹下,新建与工程同名文件夹,然后将原文件夹下所有文件拷贝到YNPE27文件夹下, E:\YNPE27\CC\YNPE27\Productions\Production_2\YNPE27 打开o…

Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。

ChatPDF的妙用 1、引言2、代码实战2.1 原理2.2 安装2.2 示例2.2.1 创建PDF文件2.2.2 旋转PDF文件2.2.3 拆分PDF文件2.2.4 合并PDF文件2.2.5 提取PDF文件内容 3、总结 1、引言 小屌丝:鱼哥,最近干啥了? 小鱼:最近? 你指…

基于MATLAB的无人机遥感数据预处理与农林植被性状估算

在新一轮互联网信息技术大发展的现今,无人机、大数据、人工智能、物联网等新兴技术在各行各业都处于大爆发的前夜。为了将人工智能方法引入农业生产领域。首先在种植、养护等生产作业环节,逐步摆脱人力依赖;在施肥灌溉环节构建智慧节能系统&a…

如何使用CSDN的Markdown编辑器?

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

【C++的类与对象(下)】

目录 一、细说构造函数1.1初始化列表的引入1.2初始化列表1.2关键字explicit 二、static成员2.1static成员的特性2.2题目:实现一个类,计算程序中创建出了多少个类对象2.3题目:设计一个类 只能再栈上或者堆上创建 一、细说构造函数 1.1初始化列…