输入上拉:当IO口作为输入时,比如按键输入,而按键是与地连接,按下时为低电平,则没按下时该IO口应为高电平,上拉即是该IO口通过一个电阻与电源相连,则没按下时为高电平,按下即为低电平。

输入下拉:同理此时按键与电源相连,按下即为高电平,下拉就是该IO口通过一个电阻与地相连,没按下为低电平,按下为高电平。

    推挽输出:作为普通的IO口输出高低电平

  STM32的输入输出管脚有下面8种可能的配置:(4输入、2输出、2复用输出)

    1、浮空输入_IN_FLOATING

    2、带上拉输入_IPU

    3、带下拉输入_IPD

    4、模拟输入_AIN

    5、开漏输出_OUT_OD

    6、推挽输出_OUT_PP

    7、复用功能的推挽输出_AF_PP

    8、复用功能的开漏输出_AF_OD

上拉:输入高电平,然后接一个上拉电阻(起保护作用),上拉就表示该端口在默认情况下输入为高电平;

浮空:就相当于此端口在默认情况下什么都不接,呈高阻态;

开漏输出:就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电压电压。这种方式适合在连接的外设电压比单片机电压低的时候;

推挽输出:就是单片机引脚可以直接输出高电平电压,低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上上拉电阻。但如果输出端可以会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚;

  在stm32中如何配置片内外设使用的IO端口:

    首先:

      1、配置输入的时钟和初始化后即被激活(开启);

      2、如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则该外设对应的输入输出可以做普通GPIO管脚使用)

      3、再对外设进行详细设置。

      对应到外设的输入输出功能有下面三种情况:

        1、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出;

        2、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入;

        3、ADC对应的管脚:配置管脚为模拟输入;

  如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接,将管脚配置成输出功能后,如果外设没有被激活,那么它的输出将不确定;

STM32的GPIO输出模式就分为普通推挽输出(GPIO_Mode_Out_PP )、普通开漏输出 (GPIO_Mode_Out_OD)及复用推挽输出(GPIO_Mode_AF_PP )、复用开漏输出(GPIO_Mode_AF_OD )。 
  普通推挽输出模式一般应用在输出电平为 0和3.3伏的场合。
  而普通开漏输出一般应用在电平不匹配的场合,如需要输出 5伏的高电平,就需要在外部接一个上拉电阻,电源为 5伏,把 GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5伏的电平。
  对于相应的复用模式,则是根据 GPIO的复用功能来选择的,如 GPIO的引脚用作串口的输出,则使用复用推挽输出模式。
  如果用在IC、SMBUS这些需要线与功能的复用场合,就使用复用开漏模式。
  其它不同的复用场合的复用模式引脚配置将在具体的例子中讲解。 在使用任何一种开漏模式,都需要接上拉电阻;
从它的结构我们就可以理解,
  若 GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),读取得的 GPIO引脚数据为 1,高电平。
          而下拉模式则相反,在默认状态下其引脚数据为 0,低电平。  
  而 STM32的浮空输入模式(GPIO_Mode_IN_FLOATING)在芯片内部既没有接上拉,也没有接下拉电阻,经由触发器输入。配置成这个模式直接用电压表测量其引脚电压为 1点几伏,这是个不确定值。由于其输入阻抗较大,一般把这种模式用于标准的通讯协议如 I2C、USART的接收端。
  模拟输入模式(GPIO_Mode_AIN )则关闭了施密特触发器,不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送至给 ADC模块,由ADC采集电压信号。所以使用ADC外设的时候,必须设置为模拟输入模式。 
 
  

上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。如果没有上拉电阻,在没有外界输入的情况下输入端是悬空的,它的电平是未知的无法保证的,上拉电阻就是为了保证无信号输入时输入端的电平为高电平,同样还有下拉电阻它是为了保证无信号输入时输入端的电平为低电平。

这是上拉电阻和下拉电阻的作用!所以你在这里设置时!是没有多大的区别的!

八种模式:

(1)GPIO_Mode_AIN 模拟输入   //一般用在ADC上
(2)GPIO_Mode_IN_FLOATING 浮空输入     //高低电平不确定,一般用在数据传输,读取电平高低
(3)GPIO_Mode_IPD 下拉输入   //默认低电平,接下拉电阻
(4)GPIO_Mode_IPU 上拉输入   //默认高电平,接上拉电阻
(5)GPIO_Mode_Out_OD 开漏输出    //若接上拉电阻,为高电平,否则为低电平。吸电流能力强。实现IIC的线与,还可以通过改变上拉电阻改变输出电平。
(6)GPIO_Mode_Out_PP 推挽输出    //可输出高低电平
(7)GPIO_Mode_AF_OD 复用开漏输出    //可开启第二功能的开漏
(8)GPIO_Mode_AF_PP 复用推挽输出    //可开启第二功能的推

 

stm32之GPIO(二)的更多相关文章

  1. STM32的GPIO口的输出开漏输出和推挽输出

    本文来自cairang45的博客,讲述了STM32的GPIO口的输出开漏输出和推挽输出, 作者博客:http://blog.ednchina.com/cairang45 本文来自: 高校自动化网(Ww ...

  2. stm32定时器学习二——PWM设置

    /* STM32 嵌入式学习入门(5)——PWM的实现 上一篇博文介绍了定时器和PWM的基本的原理,本篇博文从代码层面来介绍PWM的具体实现.同样,还是以博主所用的开发板——正点原子开发板STM32F ...

  3. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

  4. STM32的GPIO使用的函数剖析

    转载http://blog.csdn.net/wuwuhuizheyisheng/article/details/8239599 STM32的GPIO总结 作者:JCY 该文是自己学习了一段STM32 ...

  5. Stm32高级定时器(二)

    Stm32高级定时器(二) 1 主从模式:主?从? 谈论主从,可知至少有两个以上的触发或者驱动信号,stm32内部有多个定时器,可以相互之间驱动或者控制. 主模式:定时器使能只受驱动时钟控制或者输出控 ...

  6. STM32配置GPIO前须先打开其时钟,否则配置失败

    @2018-5-9 17:11:38 STM32配置GPIO前须先打开其时钟,否则配置失败

  7. STM32 F4 GPIO Modes

    STM32 F4 GPIO Modes Goal: creating a visual summary of GPIO configuration modes. The summary at the ...

  8. STM32的GPIO工作原理 | 附电路图详细分析

    STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚.GPIO的引脚与外部硬件设备连接,可实现与外部通讯.控制外部硬件或者采集外部硬件数据的功能. ...

  9. 【转载】stm32的GPIO八种工作模式

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

随机推荐

  1. VIJOS 1512SuperBrother打鼹鼠(二维BIT)

    呵呵.. 二维树状数组,第二维和第一维基本一样. --------------------------------------------------------------------------- ...

  2. Hibernate学习之hibernate状态

    hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就 ...

  3. android手机关于google play商店闪退的解决办法

    部分android手机没有安装google play商店,这个可以通过类似“机锋”.“360手机助手”等应用市场下载. 安装google play商店后,点击打开却一闪而过:这个问题是因为手机没有安装 ...

  4. iter, yield与enumerate的实现

    模拟实现一个enumerate函数 def myEnumerate(seq, start=0): results = [] n = start for i in seq: results.append ...

  5. 国内外主流BI厂商对比

    BI(Business Intelligence),即商业智能或者商务智能,它是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确的提供报表并提出决策依据,帮助企业做出明智的业务经营决 ...

  6. Qt 继承QWidget setstylesheet解决

    void myMainWidget::paintEvent(QPaintEvent * e) { QStyleOption opt; opt.init(this); QPainter p(this); ...

  7. Hello China操作系统STM32移植指南(一)

    Hello China操作系统移植指南 首先说明一下,为了适应更多的文化背景,对Hello China操作系统的名字做了修改,修改为"Hello X",或者连接在一起,写为&quo ...

  8. 基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串

    编程实现:找出两个字符串中最大公共子字符串,如"abccade"和"dgcadde"的最大子字符串为"cad". 如果不考虑效率的话直接比较 ...

  9. VC编程中如何设置对话框的背景颜色和静态文本颜色

    晚上编一个小程序,涉及到如何设置对话框的背景颜色和静态文本颜色.这在VC6.0中本来是一句话就搞定的事.在应用程序类中的InitInstance()函数添加: //设置对话框背景和文本颜色 SetDi ...

  10. Linux 下的多线程编程

    随着你对编程的深入,多线程是一个免不了的话题,在这里就对多线程做一个比较详细的总结. 首先摆在我们面前的就是什么是线程,以及为么会有这个东西.记得之前学习的时候自己会画一张很大的图,在图中可以详细的写 ...