补充:

N、P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS)

GPIO的八种工作模式详解

浮空输入_IN_FLOATING
带上拉输入_IPU
带下拉输入_IPD
模拟输入_AIN
开漏输出_OUT_OD
推挽输出_OUT_PP
开漏复用输出_AF_OD
推挽复用输出_AF_PP
4输入 + 2 输出 + 2 复用输出,一共是8种模式,以下是八种模式的工作原理:

GPIO浮空输入_IN_FLOATING模式工作原理

以上截图就是浮空输入模式的原理图,
图中阴影的部分在浮空输入模式下是处于不工作状态的,尤其是下半部分的输出电路
实际上这时的输出电路与输入的端口处于隔离状态。
黄色的高亮部分显示了数据传输通道,
外部的电平信号通过左边编号1的I/O 端口进入STM32内部
经过编号2的施密特触发器整形以后送入编号为3的“输入数据寄存器”
在“输入数据寄存器”的另一端(编号4) ,CPU通过内部的数据总线可以随时读出I/O 端口的电平变化的状态。

GPIO带上拉输入_IPU 模式工作原理:

上图是STM32的GPIO带上拉输入模式的原理图。
与前面介绍的浮空输入模式相比,仅仅是在数据通道上面,接入了一个上拉电阻,
根据STM32的数据手册,这个上拉电阻阻值介于30K~50K 欧姆。
同样,CPU可以随时在“输入数据寄存器”的另一端,通过内部的数据总线读出I/O 端口的电平变化的状态。

GPIO带下拉输入_IPD 模式工作原理:

对于输入下拉模式的输入,是在数据通道的下部,接入了一个下拉电阻。
根据STM32的数据手册,这个下拉电阻阻值也是介于30K~50K 欧姆。

对于要加上拉或下拉电阻:
1.当作单片机作为输入时,假设我们直接在IO端口接一个按键到地(或电源)。
因为按键按,于不按管脚都是悬空的。单片机就很难检测按键是否按下。
所以人为的接一个上拉(或下拉)。以确定未按下的时候IO输入电平的状态
2.可以提高芯片的抗干扰能
3.当单片机的IO口作输出时,如果不接上拉电阻只能提供灌电流。无法输出电流驱动外接设备。这时也需要考虑上拉电阻。这样才可以使IO输出高电平

GPIO模拟输入_AIN 模式工作原理:

如果把STM32配置为模拟输入模式时,工作原理就比较简单了,信号从左边编号为1 的端口进
从右边编号为2的一端直接进入STM32单片机的AD模块。
细心的朋友可以看到数据通道中上拉、下拉电阻和施密特触发器,这时均处于关断的状态,
“输入数据寄存器”就不能反映IO端口上的电平变化的状态了
换句话说,也就是在模拟输入状态下,CPU不能通过“输入数据寄存器”读到IO端口变化的数据了

以上分析的是GPIO模块IO引脚的输入模式的工作原理,下面介绍一下GPIO输出模式的工作原理

GPIO开漏输出_OUT_OD 模式工作原理

上图是GPIO开漏输出模式的工作原理图
当CPU 在编号1 端通过“位设置/ 清除寄存器”或“输出数据寄存器”写入数据后
该数据位将通过编号2的输出控制电路传送到编号4 的I/O端口。
如果CPU 写入的是逻辑“1 ”,则编号3 的N-MOS管将处于关闭状态
此时I/O 端口的电平将由外部的上拉电阻决定
如果CPU 写入的是逻辑“0 ”,则编号3的N-MOS管将处于开启状态
此时I/O端口的电平被编号3 的N-MOS管拉到了“地”的零电位。

在图中的上半部,施密特触发器处于开启状态
这意味着CPU 可以在“输入数据寄存器”的另一端,随时可以监控I/O端口的状态
通过这个特性,还可以实现了虚拟的I/O端口双向通信:假如CPU 输出逻辑“1 ”
由于编号3 的N-MOS管处于关闭状态,I/O 端口的电平将完全由外部电路决定
因此,CPU 可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1 ”

GPIO口的输出模式下,有3 种输出速度可选(2MHz 、10MHz和50MHz) 
这个速度是指GPIO口驱动电路的响应速度,而不是输出信号的速度
输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路
用户可以根据自己的需要选择合适的驱动电路)。
通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
高频的驱动电路,噪声很高  
当我们的项目不需要比较高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI 性能。
当然如果我们的项目要求输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到比较失真的输出信号
有关具体信息可参考:http://www.51hei.com/bbs/dpj-40309-1.html

GPIO推挽输出_OUT_PP模式工作原理

GPIO的推挽输出模式是在开漏输出模式的基础上,在“输出控制电路”之后,增加了一个P-MOS管
当CPU输出逻辑“1 ”时,编号3 处的P-MOS管导通,而下方的N-MOS管截止,达到输出高电平的目的
当CPU输出逻辑“0 ”时,编号3 处的P-MOS管截止,而下方的N-MOS管导通,达到输出低电平的目的
在这个模式下,CPU 仍然可以从“输入数据寄存器”读到该IO端口电压变化的信号

GPIO开漏复用输出_AF_OD模式工作原理

GPIO的开漏复用输出模式与开漏输出模式的工作原理基本相同
不同的是编号为2 的输入的源不同,它是和复用功能的输出端相连
此时的“输出数据寄存器”被输出通道给断开了。
从上面的这个图,我们还可以看到CPU同样可以从“输入数据寄存器”读取到外部IO端口变化的电平信号。

GPIO推挽复用输出_AF_PP模式工作原理

最后介绍一下GPIO推挽复用输出模式的工作原理
编号2“输出控制电路” 输入是与复用功能的输出端相连
此时“输出数据寄存器”被从输出通道断开了,片上外设的输出信号直接与“输出控制电路”的输入端想连接。
我们将GPIO配置成复用输出功能后,假如相应的外设模块没有被激活,那么此时IO端口的输出将不确定。
其它部分原理与前面叙述的模式一样,包括对“输入数据寄存器”的读取方式也是一样的。

ST MCU_GPIO的八种工作模式详解。的更多相关文章

  1. apache两种工作模式详解

    prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...

  2. Apache三种工作模式详解

    Apache HTTP服务器被设计为一个强大的.灵活的能够在多种平台以及不同环境下工作的服务器.这种模块化的设计就叫做“多进程处理模块”(Multi-Processing Module,MPM),也叫 ...

  3. Apache 工作模式详解

    Apache 工作模式详解 Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择, ...

  4. STM32——GPIO口的八种工作模式

    GPIO的输入工作模式1——输入浮空模式: GPIO_Mode_IN_FLOATING =0x04 工作原理:配置完相应寄存器为此工作模式后,高低电平信号通过1处的IO口输入进去,由于寄存器配置了的缘 ...

  5. vmware虚拟机三种网络模式详解_转

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 由于L ...

  6. Vmware虚拟机三种网络模式详解

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...

  7. 四、Vmware虚拟机三种网络模式详解

    转载自: http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 1. ...

  8. 【转】VMware虚拟机三种网络模式详解

    由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很浪费.那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有VMware Workstations ...

  9. Vmware虚拟机三种网络模式详解(转)

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...

随机推荐

  1. pytorch实现AlexNet网络

    直接上图吧 写网络就像搭积木

  2. DELPHI中完成端口(IOCP)的简单分析(1)

    DELPHI中完成端口(IOCP)的简单分析(1)   用DELPHI开发网络代码已经有一段时间了! 我发现在网上用VC来实现完成端口(IOCP)的代码很多,但是使用DELPHI来实现的就比较少了.对 ...

  3. C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解

    http://blog.csdn.net/gmstart/article/details/7046140 在C++的类定义里面,可以看到类似下面的定义: 01 class List { 02 priv ...

  4. qemu对虚拟机的内存管理(二)

    上篇文章主要分析了qemu中对虚拟机内存管理的关键数据结构及他们之间的联系,这篇文章则主要分析在地址空间发生变化时,如何将其更新至KVM中,保持用户空间与内核空间的同步. 这一系列操作与之前说的Add ...

  5. java框架之SpringCloud(3)-Eureka服务注册与发现

    在上一章节完成了一个简单的微服务案例,下面就通过在这个案例的基础上集成 Eureka 来学习 Eureka. 介绍 概述 Eureka 是 Netflix 的一个子模块,也是核心模块之一.Eureka ...

  6. Hadoop生态集群MapReduce详解

    一.概述 MapReduce是一种编程模型,这点很重要,仅仅是一种编程的模型,而不是具体的软件.在hadoop中,HDFS是分布式的文件存储系统,而MapReduce是一个分布式的计算框架.用于大规模 ...

  7. 解决Windows下文件在Linux下打开出现乱码的问题

    目录 问题 原理 解决 总结 参考资料 问题 前几天生病了,Java一直在看代码但是没跟着打,于是决定偷一波小小的懒,直接把教材的代码从Windows通过共享文件夹放到了Linux里面.但是编译的时候 ...

  8. MySQL Backup mysqldump 常用选项与主要用法

    The mysqldump client utility performs logical backups, producing a set of SQL statements that can be ...

  9. json.dumps与json.dump的区别 json.loads与json.load的区别

    json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块>>&g ...

  10. form提交xml文件

    --为何ajax提交不了xml?--原因:Request.Form["Data"]这种获取参数方式,原本就不是mvc路由参数获取方式,这是Asp.net中webfrom页面获取参数 ...