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

【新手小白的嵌入式学习之路】-STM32的学习_GPIO 8种模式学习心得

GPIO 8种模式学习心得

  • 前言
  • GPIO的简介
  • 输出驱动器
    • 推挽输出
    • 开漏输出
  • 输入驱动器

前言

  之前我一直跟着江科大学习标准库函数控制STM32,最近换个口味学习用HAL库控制STM32,发现了一个宝藏up主:keysking,两位博主可谓是我学习嵌入式的b站导师!
  经过这一阵子的持续学习,对于GPIO八种模式也有了一些理解,像是在迷雾里摸到了一点光亮,所以迫不及待的来记录一下!(声明:里面的图都是我截自两个博主的视频,无商业用途,只为了记录学习!)

在这里插入图片描述
  上面这个是STM32芯片其中一个GPIO端口的结构图,乍一看很复杂,仔细一看还是很复杂。我一开始连GPIO是什么我都不知道,更别说看懂这个结构图。
GPIO口就是芯片的部分引脚,如下所示:
在这里插入图片描述

GPIO的简介

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

  对于标准库函数的GPIO的配置
在这里插入图片描述

  STM32CubeIDE的HAL库的GPIO配置(我的理解):

  1. GPIO_Input 输入模式
  • Pull up 上拉输入
  • Pull down 上拉输入
  • No pull up and pull down 浮空输入
  1. GPIO_Output 输出模式
  • Output Push Pull 推挽输出
  • Output Open Drain 开漏输出
  1. GPIO_Analog 模拟模式

  如图GPIO的结构主要分为输入驱动器输出驱动器,对应输入和输出的两种模式。

在这里插入图片描述

输出驱动器

在这里插入图片描述
  由上图,输出控制模块控制P-MOS和N-MOS(MOS可简化理解为两个被控制的开关),VDD对应3.3v的高电平,VSS对应0v的低电压,STM32的输出分为推挽输出和开漏输出。


  为了方便理解这两种输出模式,举几个例子:

推挽输出

假设我们此时在I/O引脚连接一个普通小灯,小灯另一端接地,工作电压为3.3v,我们使用推挽输出模式。

  1. 需要I/O口输出高电平:我们通常使用函数修改寄存器,使输出控制模块控制P-MOS关闭和N-MOS断开,此时I/O口输出高电平,灯泡亮起。
    在这里插入图片描述
  2. 需要I/O口输出低电平:同理,我们使用函数修改寄存器,使输出控制模块控制P-MOS断开和N-MOS闭合,此时I/O口输出低电平,灯泡熄灭。

  总结一下:推挽输出模式下,通过函数修改寄存器的值从而使输出控制模块控制P-MOS和N-MOS的状态,达到输出高电平或低电平。

开漏输出

  冷知识,开漏输出模式下,只有N-MOS工作,P-MOS一直处于断开状态,我查了资料,原因:

在这里插入图片描述

  假设我们此时在I/O引脚连接一个普通小灯,小灯另一端接地,工作电压为5v,由于推挽输出模式驱动不了5v,所以我们使用开漏输出。

  1. 需要I/O口输出高电平:N-MOS断开,整个I/O口内部处于高阻态(或者“断路”),小灯不会亮。
    在这里插入图片描述
  2. 需要I/O口输出低电平:N-MOS闭合,I/O口与VSS相连,小灯也不会亮。

在这里插入图片描述
  倘若此时我们将小灯的另一端接一个5v的电源,那么I/O口输出高电平小灯不亮,I/O口输出低电平小灯就亮了,此时开漏输出也能控制小灯亮灭了。
在这里插入图片描述
  综上,推挽输出靠芯片内部电压驱动小灯,而开漏输出并没有驱动能力,需要依靠外部电压驱动。
在这里插入图片描述
  输出控制模块分别由函数控制寄存器以及片上外设直接控制的·,前者是推挽输出和开漏输出,后者是复用推挽和复用开漏输出。
在这里插入图片描述

输入驱动器

在这里插入图片描述
  由上图,外部输入自I/O口引脚进入,首先经过一对上拉下拉电阻,所以上拉输入就是启用上面的电阻,下拉输入启用下面的电阻,浮空输入两个电阻都不启用,然后经过一个TTl肖特基触发器(模电学的施密特触发器),这里复习下原理:改造比较器形成两个参考电压,高于高参考电压的为高电平,低于低参考电压的为低电平,将模拟信号转为数字信号,经施密特触发器处理的电平信号被写入输入数据寄存器,由函数读取高低电平。

  这里还有个模拟输入,即直接读取外部的电压值,复用功能的输入与输入数据寄存器可以同时对经施密特触发器处理的电平信号进行读取,所以也不存在复用上拉下拉输入。

此时再看文章前面的八种模式,就有不一样的体会了。
在这里插入图片描述


  以上就是我的一些学习记录,欢迎大家一起讨论学习!

http://www.dtcms.com/a/264964.html

相关文章:

  • JavaWeb笔记03
  • GC393:一款低功耗双电压比较器芯片
  • 设计模式-责任链模式
  • SpringBoot控制反转
  • vue中的toRef
  • 【Redis】StringRedisTemplate 和 RedisTemplate 的区别
  • Python 数据分析与可视化 Day 14 - 建模复盘 + 多模型评估对比(逻辑回归 vs 决策树)
  • JavaEE==网站开发
  • Liunx 安装 MySQL 8.0
  • Selenium使用教程-爬虫版(超详细)
  • 数学建模_图论
  • 重塑智能体决策路径:深入理解 ReAct 框架
  • 【前端进阶】【实战】【性能优化】前端开发中的事件监听与DOM操作优化实践
  • Linux基本命令篇 —— whereis命令
  • 利用 Claude Opus 4 自动化 GitHub 工作流:从安装到实战详解
  • 新版本AI数字人全能管家,即将推出,还是开源免费。
  • [附源码+数据库+毕业论文+答辩PPT]基于Spring+MyBatis+MySQL+Maven+vue实现的中小型企业财务管理系统,推荐!
  • 多个单片机简单通讯框架
  • GO Web 框架 Gin 完全解析与实践
  • 数据结构与算法 第三章 栈和队列
  • 第一章 快速入门
  • DPI深度检索原理和架构
  • 人脸活体识别3:C/C++实现人脸眨眼 张嘴 点头 摇头识别(可实时检测)
  • 创客匠人解构知识付费爆单密码:产品力打造与 IP 变现的深度耦合
  • Kafka高级特性深度解析:构建企业级流处理平台的核心技术
  • IP地理定位技术综述:理论、方法与应用创新(三)
  • pdf 合并 python实现(已解决)
  • Qt Quick 与 QML(五)qml中的布局
  • 基于图神经网络的ALS候选药物预测模型设计与实现
  • Point Transformer V3(PTv3)