GPIO(General-purpose input/output 通用目的输入/输出端口)

              电压(A模拟量)与电平(D数字量)

GPIO 8种工作模式(输入四种、输出四种)

  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 复用推挽输出

一、模拟输入

  黄色高亮部分表示数据的传输通道,阴影的部分不工作。

  模拟输入是指传统方式的输入.数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。

二、浮空输入

  图中施密特触发器是打开的,上下拉电阻断开,IO口的状态可以直接送到输入寄存器中,CPU可以直接读取输入寄存器。

三、下拉输入

  下拉输入与前面的浮空输入模式相比,仅仅是在数据通道下部,接入一个下拉电阻,STM32中,该下拉电阻的阻值介于30-50K。

  下拉输入就是把电压拉低,拉到GND。与上拉原理相似。

四、上拉输入

   上拉输入与前面的浮空输入模式相比,仅仅是在数据通道上部,接入一个上拉电阻,STM32中,该上拉电阻的阻值介于30-50K。

   上拉就是把电位拉高,比如拉到VDD。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!弱强只是上拉电阻的阻值不同,没有什么严格区分

五、开漏输出

  如图,输出控制电路控制信号来源于CPU,当输出信号1,则PMOS不被激活,NMOS高阻,输出端口的电平由外部的上下拉电阻决定,当接上拉电阻,则端口为高电平,当接下拉电阻,则端口为低电平;当输出控制电路输出0,则PMOS不被激活,NMOS导通,则端口电平拉低到VSS上。

  输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

  简言之:

    输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
    输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);可以读IO输入电平变化,此模式可以把端口作为双向IO使用。

六、推挽输出

  可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

  简言之:

    输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。
    输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。

七、八、复用开漏输出/复用推挽输出

  可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。

  复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

  如图,输出控制电路信号来源于片上外设模块,当输出信号1,则PMOS导通,NMOS截止,输出端口的电平由外部的上下拉电阻决定,当接上拉电阻,则端口为高电平,当接下拉电阻,则端口为低电平;当输出控制电路输出0,则PMOS截止,NMOS导通,则端口电平拉低到VSS上。

 输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

输入保护电路

    当输入信号电压为正时,且超过(VDD)+0.7V,D1导通,导通后,输入端的电压就稳定在(VDD)+0.7V了,而不会因输入信号电压增加而增加,就起到了保护作用。
 同理,当输入信号电压为负时,且超过了(VSS)-0.7V,D2导通,输入端的电压也稳定在(VSS)-0.7V。
   这样,只要设置VDD,VSS的电压大小,就可以确定运放输入端的保护电压大小

推挽和开漏可以参考该文章:https://blog.csdn.net/qq_27016651/article/details/83096126

嵌入式02 STM32 实验02 端口输入输出各4种模式的更多相关文章

  1. 嵌入式02 STM32 实验01 端口复用和重映射

    内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  ...

  2. 嵌入式02 STM32 实验04跑马灯

    开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...

  3. 嵌入式02 STM32 实验06 按键

    按键实验和前面的跑马灯.蜂鸣器主要的区别就是这个是读取外部的输入信号,之前的实验都是对外部输出信号. 一.硬件设计 本实验的硬件为三个按键.两个lED(LED0.LED1).一个蜂鸣器(BEEP). ...

  4. 嵌入式02 STM32 实验05 蜂鸣器

    蜂鸣器:是一种一体化结构的电子讯响器.主要分为分压式蜂鸣器和电磁式蜂鸣器两种类型. 一.有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路) 1.有源蜂鸣器:有源蜂鸣器自带震荡电路,一通电就会 ...

  5. 嵌入式02 STM32 实验11 NVIC和中断总结

    一.基础知识 1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 2.STM32只有84个中断,包括16个内核中断和68个可屏蔽中断 3.STM32F103上只有60个 ...

  6. 嵌入式02 STM32 实验10 定时器中断

    优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...

  7. 嵌入式02 STM32 实验08 外部中断

    一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家 ...

  8. 嵌入式02 STM32 实验07 串口通信

    STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中 ...

  9. 嵌入式02 STM32 实验03 时钟系统

    时钟系统是处理器的核心,所以认真学习时钟系统是必要的,有助于深入理解STM32. 由于STM32的外设很多,有的外设不需要太高的时钟频率,同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也越弱,所以对 ...

随机推荐

  1. asp.net大附件上传,支持断点续传

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  ...

  2. zzulioj - 2628: 小新的字母广场

    题目链接:http://acm.zzuli.edu.cn/problem.php?id=2628 题目描述        放假了,小新决定出去散散心,于是他来到了著名的字母广场.这个广场是由n*m块砖 ...

  3. mybatis的判定时间字段问题 java.lang.IllegalArgumentException: invalid comparison: cn.hutool.core.date.DateTime and java.lang.String

    今天听组员说: mybatis在3.30版本及以上判定时间时 <if test="date_time != null and date_time != '' "> da ...

  4. Phalcon框架的编译安装 内存不足的解决办法

    对症解决 有两种解决方法,一种是提升ECS系统内存.但是却要真金白银跟阿里云去购买的.另一种,则是手动创建swap交换文件.下面来介绍第二种方法. 第一步:首先确定系统是否已经开启swap交换分区: ...

  5. python计算1~2008中0和1的个数

    计算1~2008中所有自然数中1和0的个数总数. 通过自然数的大小划分区间,将自然数每位上的数载入列表,循环计数. list = [] onecount = 0 zerocount = 0 for i ...

  6. Linux crontab命令:循环执行定时任务(详解版)

    前面学习了 at 命令,此命令在指定的时间仅能执行一次任务,但在实际工作中,系统的定时任务一般是需要重复执行的.而 at 命令显然无法满足需求,这是就需要使用 crontab 命令来执行循环定时任务. ...

  7. 多维矩阵转一维数组(c++)【转载】

    在由二维矩阵转为一维数组时,我们有两种方式:以列为主和以行为主. 以列为主的二维矩阵转为一维数组时,转换公式为: index=column+row×行数 以行为主的二维矩阵转为一维数组时,转换公式为: ...

  8. Java中在时间戳计算的过程中遇到的数据溢出问题

    背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...

  9. Fiddler常用功能总结

    使用Fildder几年来,深深的体会到了其便利性,给工作带来了极大的便利,所以把其它常用功能总结如下 一:介绍 1.免费,支持抓取http.https协议,可独立运动 2.原理:(客户通过移动端或是P ...

  10. 关于 Javascript 学习,有哪些好的博客或者网站推荐?

    知乎社区:http://www.zhihu.com/question/19651401 Mozilla开发者网络社区:https://developer.mozilla.org/zh-CN/ moze ...