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

【新手小白的嵌入式学习之路】-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.xdnf.cn/news/14772.html

相关文章:

  • 第二章AIGC入门:打开人工智能生成内容的新世界大门(3/36)
  • Windows连接L2TP/IPsec 协议 VPN失败
  • QT异步操作
  • Kuikly 与 Flutter 的全面对比分析,结合技术架构、性能、开发体验等核心维度
  • QT初识-实现Hello World(2)
  • Qt Quick 与 QML(五)qml中的布局
  • 运维打铁: 数据加密与备份恢复策略制定
  • 免费版安全性缩水?ToDesk、TeamViewer、向日葵、网易UU远程访问隐私防护测评
  • 【卡尔曼滤波第一期】α−β−γ 滤波器概述
  • [CS创世SD NAND征文] 精准控制的坚固基石:CS创世SD NAND在华大HC32F4A0运动控制卡中的高可靠应用
  • 如何在Excel中每隔几行取一行
  • Foundation 5 安装使用教程
  • 【仿muduo库实现并发服务器】Poller模块
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(二)
  • UE5.6 官方文档笔记 [1]——虚幻编辑器界面
  • Qt_Creator入门基础知识
  • BFD故障检测技术之概述
  • 2025 推理技术风向标:DeepSeek-R1 揭示大模型从 “记忆” 到 “思考” 的进化路径
  • k8s将service的IP对应的不同端口分配到不同的pod上
  • day48
  • 【仿muduo库实现并发服务器】Connection模块
  • 630,百度文心大模型4.5系列开源!真香
  • mac python3.13 selenium安装使用
  • 半无界波动方程混合条件求解
  • 王道链表大题算法(部分)
  • 【记录】Word|Word创建自动编号的多级列表标题样式
  • 每日一练:找到初始输入字符串 I
  • 企业级应用技术-ELK日志分析系统
  • 矩阵的秩 线性代数
  • 具身多模态大模型在感知与交互方面的综述