STM32的I/O口的8种工作模式

2023-11-17

转自http://www.openedv.com/posts/list/21980.htm

浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了.  

开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能实现了.  
推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻. 


(1)GPIO_Mode_AIN 模拟输入 
(2)GPIO_Mode_IN_FLOATING 浮空输入 
(3)GPIO_Mode_IPD 下拉输入 
(4)GPIO_Mode_IPU 上拉输入 
(5)GPIO_Mode_Out_OD 开漏输出 
(6)GPIO_Mode_Out_PP 推挽输出 
(7)GPIO_Mode_AF_OD 复用开漏输出 
(8)GPIO_Mode_AF_PP 复用推挽输出 

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 

开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 
开漏形式的电路有以下几个特点: 
1. 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。 
2. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。) 
3. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。 
4. 可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。补充:什么是“线与”?: 
在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑. 
其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。 

由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。 
上拉输入/下拉输入/模拟输入:这几个概念很好理解,从字面便能轻易读懂。 
复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用) 
最后总结下使用情况: 
在STM32中选用IO模式 
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 
(2)带上拉输入_IPU——IO内部上拉电阻输入 
(3)带下拉输入_IPD—— IO内部下拉电阻输入 
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电 
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的 
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA) 
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS) 
STM32设置实例: 
(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0); 
(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32的I/O口的8种工作模式 的相关文章

  • 使用 x64 汇编代码的基本输入

    我正在编写有关汇编中基本输入和输出的教程 我使用的是 64 位 Linux 发行版 Ubuntu 在教程的第一部分中 我讨论了基本输出并创建了一个简单的程序 如下所示 global start section text start mov
  • MIPS 与火星模拟。 - 如何自动从键盘输入读取值(即 - 无需按 Enter 键即可获取值)

    为了完成此任务 是否有特定的系统调用或我缺少的东西 您必须使用系统调用 12 来读取字符 看MARS 系统调用表 http courses missouristate edu KenVollmar MARS Help SyscallHelp
  • 强制“git status”在终端上输出颜色(在脚本内)

    EDIT 我想提出一个建议 解析颜色通常是一个考虑不周的想法 我想要它的部分原因是我可以解析它并在我自己的脚本输出中传递它 这是 好吧 但使用瓷器或类似的东西并自己重新构建彩色部件可能会更明智 原始问题如下 我喜欢看到颜色 因为我的脚本足够
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • BufferedReader会将整个文件加载到内存中吗?

    class LogReader public void readLogFile String path BufferedReader br new BufferedReader new FileReader path String curr
  • 如何判断一个文件是否可以删除?

    我怎么能够check我可以用Java删除文件吗 例如 如果一个文件test txt在另一个程序中打开我无法删除它 我必须在实际删除之前知道它 所以我不能这样做 if file delete And srcFile canWrite 也不工作
  • 如何使用C读取文件夹中的所有文件

    我希望读取特定文件夹中的所有文本文件 这些文件的名称没有任何共同的模式 否则任务会更容易 read a file from the directory Perform a common operation write output to a
  • 如何从 Vec 或 Slice 读取 (std::io::Read)?

    Vec支持std io Write 因此可以编写需要File or Vec 例如 从 API 参考来看 两者都不是Vec也不支持切片std io Read 有没有方便的方法来实现这一目标 是否需要编写包装结构 这是一个工作代码的示例 它读取
  • 在 Swift 中,如何将现有的二进制文件读入数组?

    作为我的项目的一部分 我有一个二进制数据文件 其中包含大量 32 位整数 我的一个类在初始化时读入该文件 在我的 C 库中 我使用以下初始化程序读入它 Evaluator Evaluator m HandNumbers resize 324
  • 下载文件 java spring Rest api

    我想制作一个rest api控制器 spring boot 当用get请求时将允许我下载一个excel文件 目前我有这个端点 RequestMapping value download xls method RequestMethod GE
  • 保持java套接字打开?

    我正在制作一个会自动更新的程序 游戏 我有更新部分 但没有检查版本 我本以为这会很容易 这就是我所做的 我为游戏编写了一个更新程序 并且编写了一个服务器 每次客户端 更新程序连接时 服务器都会启动一个线程 线程处理一切 游戏更新程序读取一个
  • 将 InputStream 转换为固定长度字符串的 Stream

    Like in 将 InputStream 转换为给定字符集的 Stream https stackoverflow com questions 30336257 convert inputstream into streamstring
  • Hadoop setInputPathFilter错误

    我正在使用 Hadoop 0 20 2 无法更改 并且我想向我的输入路径添加一个过滤器 数据如下 path1 test a1 path1 test a2 path1 train a1 path1 train a2 我只想处理所有文件trai
  • Python 3:资源警告:未关闭的文件 <_io.TextIOWrapper name='PATH_OF_FILE'

    当我在 python 中运行测试用例时 python 规范化器 setup py 测试 我收到以下异常 ResourceWarning unclosed file lt io TextIOWrapper name Users workspa
  • 从相对路径读取文件

    我知道这个问题之前已经被问过 1000 次了 我确实尝试了所有解决方案 Java项目中如何从相对路径读取文件 java io File 找不到指定的路径 https stackoverflow com questions 3844307 h
  • 按广度优先顺序列出目录所有内容导致效率低下

    我编写了一个 Haskell 模块来按广度优先顺序列出目录的所有内容 下面是源代码 module DirElements dirElem where import System Directory getDirectoryContents
  • Lisp 格式和强制输出

    我不明白为什么这段代码在不同的实现中表现不同 format t asdf setq var read 在 CLISP 中 它的行为与预期一致 先打印提示 然后读取 但在 SBCL 中 它显示 then输出 我在网上查了一下 修改了一下 fo
  • java IO将一个文件复制到另一个文件

    我有两个 Java io File 对象 file1 和 file2 我想将 file1 的内容复制到 file2 有没有一种标准方法可以做到这一点 而无需我创建一个读取 file1 并写入 file2 的方法 不 没有内置方法可以做到这一
  • 对在 C++ 应用程序中作为函数参数传递的文件运行“iconv”命令

    我正在尝试将 Windows 文件 CP1252 格式 转换为 Linux 应用程序的 UTF 8 格式 我想在我的 C 应用程序中运行以下命令 iconv f CP1252 t UTF 8 file ldf dos2unix gt out
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua

随机推荐

  • 51单片机按键控制数码管0~9_单片机电子时钟的设计

    单片机电子时钟的设计 摘 要 单片机自20世纪70年代问世以来 以其极高的性能价格比 受到人们的重视和关注 应用很广 发展很快 单片机体积小 重量轻 抗干扰能力强 环境要求不高 价格低廉 可靠性高 灵活性好 开发较为容易 由于具有上述优点
  • Qt实现引导界面UITour

    介绍 最近做了一款键鼠自动化 想第一次安装打开后搞一个引导界面 找了好多资料没啥参考 偶然发现qt有引导界面如下图 Qt整挺好 但是未找到源码 真的不想手撸 源码找到了但是Qt整起来太复杂 没法拿来直接用 还是得撸 地地址 下图是仿照qt实
  • sql行转列三个方法

    1 行转列sum if case when 由多行变一行 group by聚合 由一列变多列 衍生提前 select uid sum if course 语文 score NULL as 语文 sum if course 数学 score
  • [网络安全自学篇] 八十八.基于机器学习的恶意代码检测技术详解

    这是作者网络安全自学教程系列 主要是关于安全工具和实践操作的在线笔记 特分享出来与博友们学习 希望您喜欢 一起进步 前文分享了传统的恶意代码检测技术 包括恶意代码检测的对象和策略 特征值检测技术 校验和检测技术 启发式扫描技术 虚拟机检测技
  • 服务器网站iis如何关闭,IIS7如何关闭WebDAV扩展服务

    在上一篇文章中 介绍了开启WebDAV扩展服务的危害性 必须关闭 不过那篇文章是针对IIS6 0的配置 对于IIS7来说 道理也是一样的 一般网站无需用到WebDAV扩展服务 强烈建议关闭 那么IIS7如何关闭WebDAV扩展服务呢 其实方
  • element-plus Vue 3.0 Beta来了

    GitHub地址 ElementUi Beta版本文档 又要秃头一波了
  • 学渣的刷题之旅 leetcode刷题 14.最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car 输出 解释 输入不存在公共前缀 说明 所有输入只包含小写
  • 设计模式(八)----创建型模式之建造者模式与工厂模式区别

    1 工厂方法模式VS建造者模式 工厂方法模式注重的是整体对象的创建方式 而建造者模式注重的是部件构建的过程 意在通过一步一步地精确构造创建出一个复杂的对象 我们举个简单例子来说明两者的差异 如要制造一个超人 如果使用工厂方法模式 直接产生出
  • The package needs to be reinstalled,but I can't find an archive for it

    转自 http cache baiducontent com c m 9d78d513d99456ae28fa950d1a16a620430397634d9583442687c61f84642a1d1031b5fa302261428ed27
  • 云网络丢包故障定位

    引言 本期分享一个比较常见的 络问题 丢包 例如我们去 Ping 个 站 如果能 Ping 通 且 站返回信息全 则说明与 站服务器的通信是畅通的 如果 Ping 不通 或者 站返回的信息不全等 则很可能是数据被丢包了 类似情况想必 家都不
  • 2019年数学建模国赛A题

    前几天中秋节比完了 选的A题 我们学校好多组都选了A题 C题的很少 大家都怕找不到数据 我们组刚开始觉得A B都能做 就是C题可能没有数据无法下手 加上之前做小区道路的时候 用了仿真软件解题 我觉得很不靠谱 我主要是写论文的 然后一起建了数
  • WSUS服务器的详细配置和部署-转载

    WSUS服务器的详细配置和部署 一 WSUS 安装要求1 硬件要求 对于多达 500 个客户端的服务器 建议使用以下硬件 1 GHz 的处理器 1 GB 的 RAM2 软件要求 要使用默认选项安装 WSUS 必须在计算机上安装以下软件 Mi
  • 西瓜+南瓜-task1 模型评估与选择

    题外话 南瓜书是西瓜书公式的进一步深入 机器学习研究什么 对历史经验的归纳总结 预测 比如 早霞不出门晚霞行千里 通过历史累计 经验 预测第二天是晴天还是雨天 此处的 经验 类似于历史数据 通过学习数据 或者训练数据 提前预判 这就是机器学
  • 详细版mongodb下载安装教程----windows版

    一 详细下载过程 1 官网选择需要的版本 Download MongoDB Community Server MongoDB 2 然后得到这个 双击它 3 打开第一个就是这个界面 点next即可 4 第二个界面 点同意 点next 5 点c
  • 世界杯十大巨星

    随着南非世界杯开幕日期一天天临近 近日 英媒 泰晤士报 评选出了世界杯历史上10名最伟大的球星 马拉多纳力压贝利排名榜首 现役球员中 仅罗纳尔多入选并排名第八 一 马拉多纳 在这个地球上 几乎没有球员 可以让其职业生涯 甚至人生 在短短3分
  • 数字万用表的使用

    参考 连3岁小孩子都能看懂的万用表使用方法 地址 https www bilibili com video BV1Gx411z7x2 p 1 vd source cc0e43b449de7e8663ca1f89dd5fea7d 目录 万用表
  • IDEA中使用UT测试过程中的一些小问题

    当查看代码覆盖率结果 快捷键Ctrl Alt F6 当运行测试查看代码覆盖率的时候 出现如下图所示的界面 No coverage results Click Edit to fix configuration settings 解决办法就是
  • 【区块链学习】Merkle Patricia Tree (MPT) 以太坊中的默克尔树

    本篇博文是自己学习mpt的过程 边学边记录 很多原理性内容非自己原创 好的博文将会以链接形式进行共享 一 什么是mpt MPT是以太坊中的merkle改进树 基于基数树 即前缀树改进而来 大大提高了查找效率 二 前缀树 MPT中的P 就是前
  • Linux 中的 cd 命令及示例

    cd命令在Linux 中称为更改目录命令 它用于有效地从当前工作目录移动到系统中的不同目录 Linux 中 cd 命令的语法 光盘 目录 cd directory 在这里 将 directory 替换为您要导航到的目标目录的路径 cd 命令
  • STM32的I/O口的8种工作模式

    转自http www openedv com posts list 21980 htm 浮空 顾名思义就是浮在空中 上面用绳子一拉就上去了 下面用绳子一拉就沉下去了 开漏 就等于输出口接了个NPN三极管 并且只接了e b c极 是开路的 你