当前位置: 首页 > 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.lryc.cn/news/579040.html

相关文章:

  • ai之RAG本地知识库--基于OCR和文本解析器的新一代RAG引擎:RAGFlow 认识和源码剖析
  • LeetCode--39.组合总和
  • Lua 安装使用教程
  • CRMEB Pro版v3.3源码全开源+PC端+Uniapp前端+搭建教程
  • 【C++】第十三节—stack、queue、priority_queue、容器适配器(介绍和使用+模拟实现+OJ题)
  • 客服机器人知识库怎么搭?智能客服机器人3种方案深度对比(含零售落地案例)
  • 去中心化身份:2025年Web3身份验证系统开发实践
  • 专题:2025AI营销市场发展研究报告|附400+份报告PDF汇总下载
  • 告别 ifconfig:openEuler 网络配置的现代化之路
  • 通俗理解JVM细节-面试篇
  • UI前端大数据处理策略优化:基于云计算的数据存储与计算
  • kotlin 通道trysend方法
  • ZYNQ学习记录FPGA(六)程序固化Vivado+Vitis
  • GO Web 框架 Gin 完全解析与实践
  • 【Unity】MiniGame编辑器小游戏(九)打砖块【Breakout】
  • 云上配送革命:亚矩云手机如何重塑Uber Eats的全球外卖生态
  • 服务器异常宕机或重启导致 RabbitMQ 启动失败问题分析与解决方案
  • 2025年Java常见面试题(持续更新)
  • Maven工具学习使用(十三)——Maven Wrapper命令解析与使用
  • 在设计提示词(Prompt)时,关于信息位置的安排z怎么 结合模型特性和任务目标
  • 量子算法:微算法科技用于定位未知哈希图的量子算法,网络安全中的哈希映射突破
  • Linux 后台启动java jar 程序 nohup java -jar
  • pytest之fixture中yield详解
  • 文心快码答用户问|Comate AI IDE专场
  • UniApp完美对接RuoYi框架开发企业级应用
  • Droplets:趣味AI课程,开启语言学习新旅程
  • 【趣谈】Android多用户导致的UserID、UID、shareUserId、UserHandle术语混乱讨论
  • AJAX 安装使用教程
  • 从零用java实现 小红书 springboot vue uniapp (12)实现分类筛选与视频笔记功能
  • 网站面临爬虫攻击waf能防护住吗