STM32的GPIO端口的八种模式解析

2024-04-16 14:12

本文主要是介绍STM32的GPIO端口的八种模式解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

STM32的GPIO端口的八种模式解析

一、上拉输入模式

二、下拉输入模式

三、浮空输入模式

四、模拟输入模式

五、推挽输出模式

六、开漏输出模式

七、复用推挽输出模式

八、复用开漏输出模式


STM32的GPIO端口的八种模式解析

在学习STM32的过程中,GPIO端口是最为基础的外设接口。GPIO(general purpose input output),即通用输入输出端口。STM32芯片通过GPIO端口来与外部的各种设备进行通讯、实现控制或者采集来自外部设备输出的信号。
GPIO按照输入或者输出模式不同可以划分为以下八种模式:
输入模式四种:上拉输入模式下拉输入模式浮空输入模式模拟输入模式
输出模式四种:推挽输出模式开漏输出模式复用推挽输出模式复用开漏输出模式
这里以stm32f103系列芯片为例,依次介绍上面的每一种模式。下面的图是stm32f103中文参考手册里的GPIO端口的基本结构图。

一、上拉输入模式

1、如上图所示,GPIO工作在上拉输入模式时,上拉开关闭合,下拉开关断开,肖特基触发器打开。
2、此时,当IO引脚没有外部输入时,GPIO引脚默认会输入一个高电平。可以通过读取输入数据寄存器来读取到此时的IO电平。
3、需要注意的是,为了避免芯片内部的上下拉对外部输入的电平信号有太大的影响,在芯片内部的这两个上拉或者下拉都呈现一种弱上拉和弱下拉。这是由于内部的两个上下拉的电阻的阻值比较大(一般为几十千欧)。

二、下拉输入模式

1、如上图所示,GPIO工作在下拉输入模式时,上拉开关断开,下拉开关闭合,肖特基触发器打开。
2、此时,当IO引脚没有外部输入时,GPIO引脚默认会输入一个低电平。可以通过读取输入数据寄存器来读取到此时的IO电平。
3、需要注意的是,为了避免芯片内部的上下拉对外部输入的电平信号有太大的影响,在芯片内部的这两个上拉或者下拉都是一种弱上拉和弱下拉。这是由于内部的两个上下拉的电阻的阻值比较大(一般为几十千欧)。

三、浮空输入模式

1、如上图所示,GPIO工作在浮空输入模式时,上拉开关和下拉开关均断开,肖特基触发器打开。
2、此时,如果外部的IO引脚什么都不接(即悬空状态),可以知道GPIO引脚的电平将是一个不确定的状态。它将完全由外部的输入电平来确定。

四、模拟输入模式

1、对于模拟输入模式来说,肖特基触发器关闭,数据不在经过触发器模块。并且内部上下拉全部断开。
2、该模式一般是给芯片内部的ADC外设来使用的,用于采集来自芯片外部的模拟信号。如上图所示,来自外部的模拟信号直接进入片上ADC外设进行处理。
3、在模拟输入模式下可以知道MCU将无法通过读取输入数据寄存器获得IO引脚的电平变化状态。

五、推挽输出模式

1、如上图所示,GPIO在推挽输出模式下,方框中的输出控制模块相当于一个反相器。
2、在推挽输出模式下,输出驱动器中的P-MOS和N-MOS晶体管每次只有一个能正常工作。在介绍输出模式前我们先简单介绍下场效应管的结构及工作原理。

1、上图所示为输出驱动器中的P-MOS和N-MOS场效应晶体管的结构图,对于场效应晶体管来说,和普通三极管类似有栅极G,源极S和漏极D三个电极,它们分别对应三极管的基级B、发射极E和集电极C。N-MOS类似于NPN的三极管,P-MOS类似于PNP的三极管。
2、通俗来讲,对于N-MOS来说当栅极G的电压大于源极S的电压时,N-MOS可以导通工作,反之不能工作。
对于P-MOS来说当栅极G的电压小于源极S的电压时,P-MOS可以导通工作,反之不能工作。基本原理和三极管类似。
了解完场效应晶体管的工作原理后,我们可以知道,在推挽输出模式下:
1、如果写入逻辑1时,经过输出控制里的反相器后,将变为逻辑0,此时N-MOS不能导通而P-MOS可以导通。因此IO引脚被P-MOS拉高到VDD,因此GPIO引脚将输出一个高电平1。
2、如果写入逻辑0时,经过输出控制里的反相器后,将变为逻辑1,此时N-MOS可以导通而P-MOS不能导通。因此IO引脚被N-MOS拉低到低电平Vss,因此GPIO引脚将输出一个低电平0。
3、对于推挽输出模式来说,它最大的特点就是即便不使用外部上下拉电阻时也能正常输出高低电平。
4、在推挽输出模式下,肖特基触发器是打开的,MCU可以通过读取输入数据寄存器来读取IO引脚的电平状态。

六、开漏输出模式

在开漏输出模式下,P-MOS管会一直关闭(相当于不存在PMOS管),只有N-MOS管可以工作,同理:
1、如果写入逻辑1时,经过输出控制里的反相器后,将变为逻辑0,此时N-MOS不能导通,而P-MOS一直处于关闭状态,因此对于外部的IO引脚来说处于断路状态(相当于IO引脚连接了一个电阻值无穷大的电阻到地),IO状态呈高阻态。
2、如果写入逻辑0时,经过输出控制里的反相器后,将变为逻辑1,此时N-MOS可以导通,而P-MOS一直处于关闭状态。因此IO引脚被N-MOS拉低到低电平Vss,因此GPIO引脚将输出一个低电平0。
3、对于开漏输出来说,最大的特点是本身只能输出低电平而无法输出高电平,如果在开漏输出模式下想要IO引脚输出高电平则必须在IO引脚外部接入上拉电阻从而实现输出高电平。常用的I2C通讯就是采用这种模式。
4、在开漏模式下,肖特基触发器处于开启状态。MCU可以通过输入数据寄存器来获取IO端口的状态。通过这个特点,我们便可以实现IO端口的双向通讯:例如MCU要输出逻辑1,此时N-MOS管处于关闭状态,IO端口的电平将完全由外部电路决定。因此,MCU可以通过输入数据寄存器读到外部电路的信号,而不是它自己输出的逻辑1(外接上拉电阻的情况下)。这种方式在使用I2C总线进行主从机通讯时会用到。 
5、开漏输出还有一个特性就是可以很方便的调节输出的电平,因为输出电平完全由上拉电阻所连接的电源的电平决定。所以在需要进行电平转换的地方,非常适合使用开漏输出。
6、开漏输出模式还可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号线全部为高电平时,合在一起的总线电平为高电平;只要有任意一个或者多个信号线为低电平,则总线电平就为低电平。当多个开漏输出的IO引脚连接在一起时,如果所有开漏输出IO都输出高电平,才能输出高电平。但凡有一个开漏输出IO输出低电平,所有的IO引脚电压都会被这一个拉低。

七、复用推挽输出模式

1、对于复用推挽输出来说,和普通的推挽输出类似,只不过复用模式下,一个IO引脚不在作为普通的GPIO使用而是转而作为其他外设功能引脚使用,IO引脚的状态是由对应的外设控制而不再是输出数据寄存器控制。
2、因此在复用模式下需要打开相应外设的时钟,否则IO引脚将无法正常输出。
3、另外在开复用推挽输出模式下,肖特基触发器是打开的,我们仍然可以通过输入数据寄存器来读取IO口的电平状态。

八、复用开漏输出模式

1、在复用开漏输出模式下,引脚的状态是由对应的外设控制,而不是输出数据寄存器。
2、另外在复用开漏模式下,肖特基触发器是打开的,我们可以通过输入数据寄存器来读取IO口的电平状态。
3、和开漏输出模式一样,在使用复用开漏输出模式时,同样的需要在IO引脚外部引入上拉电阻。

这篇关于STM32的GPIO端口的八种模式解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909011

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决