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

GPIO 8种模式学习心得

前言

之前我一直跟着江科大学习标准库函数控制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肖特基触发器(模电学的施密特触发器),这里复习下原理:改造比较器形成两个参考电压,高于高参考电压的为高电平,低于低参考电压的为低电平,将模拟信号转为数字信号,经施密特触发器处理的电平信号被写入输入数据寄存器,由函数读取高低电平。

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

此时再看文章前面的八种模式,就有不一样的体会了。


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

相关推荐
StarPrayers.18 小时前
损失函数(Loss Function)、反向传播(Backward Propagation)和优化器(Optimizer)学习笔记
人工智能·笔记·深度学习·学习
兆龙电子单片机设计18 小时前
【STM32项目开源】STM32单片机智能农业大棚控制系统
stm32·单片机·物联网·开源·自动化
文火冰糖的硅基工坊19 小时前
[嵌入式系统-136]:主流AIOT智能体软件技术栈
嵌入式硬件·架构·嵌入式·cpu·gpu
DuHz19 小时前
C程序中的循环语句
c语言·嵌入式硬件·软件工程
涤生z20 小时前
list.
开发语言·数据结构·c++·学习·算法·list
励志不掉头发的内向程序员21 小时前
【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
linux·运维·服务器·开发语言·学习
三佛科技-1341638421221 小时前
智能美甲灯方案,UV/LED美甲光疗机美甲烤灯MCU控制方案开发设计
单片机·嵌入式硬件·智能家居·pcb工艺
listhi52021 小时前
基于STM32F407与FT245R芯片实现USB转并口通信时序控制
stm32·单片机·嵌入式硬件
光影少年1 天前
云计算生态及学习方向和就业领域方向
学习·云计算
好奇龙猫1 天前
[AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第四篇:代码修复]
人工智能·学习