STM32了解GPIO设置


41

在STM32标准外设库中,我们需要配置GPIO。

但是我不确定有3种功能如何配置它们;

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

GPIO_Speed中,有4种设置可供选择

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

我怎么知道我要选择哪种速度?使用高速或低速是否有优点或缺点?(例如:功耗?)

GPIO_OType中,有2种设置可供选择

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

如何知道从中选择?什么是开漏和推拉?

GPIO_PuPd中,有3种设置可供选择

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

我认为此设置与推拉的初始设置有关。


相关文章:如何在非本机支持的微控制器(例如AVR / Arduino,PIC等)上明确强制采用“开漏”模式:electronics.stackexchange.com/a/354993/26234
Gabriel Staples

Answers:


45
  • GPIO_PuPd(上拉/下拉)

    在数字电路中,重要的是切勿让信号线“浮动”。也就是说,它们必须始终处于高状态或低状态。浮动时,状态不确定,并且会导致几种不同类型的问题。

    纠正此问题的方法是在信号线与Vcc或Gnd之间增加一个电阻。这样,如果未将线路主动驱动为高电平或低电平,则电阻器将导致电势漂移到已知水平。

    ARM(和其他微控制器)具有内置电路来执行此操作。这样,您无需在电路中添加其他零件。例如,如果选择“ GPIO_PuPd_UP”,则等同于在信号线和Vcc之间添加一个电阻。

  • GPIO_OType(输出类型):

    推挽式:这是大多数人认为是“标准”的输出类型。当输出变低时,它会主动“拉”到地。相反,当输出设置为高电平时,它会主动“推”向Vcc。简化后,它看起来像这样:

    推拉

    另一方面,漏极开路输出仅在一个方向上有效。它可以将引脚拉向地面,但不能将其拉高。想象一下上一个图像,但是没有上MOSFET。当它不接地时,MOSFET就是不导通的,这会导致输出浮动:

    开漏

    对于这种类型的输出,需要在电路中添加一个上拉电阻,如果不将其驱动为低电平,则会导致线路变为高电平。您可以通过外部或通过将GPIO_PuPd值设置为GPIO_PuPd_UP来执行此操作。

    该名称源于MOSFET的漏极内部未连接任何东西的事实。当使用BJT代替MOSFET时,这种类型的输出也称为“集电极开路”。

  • GPIO_速度

    基本上,这控制了输出信号的转换速率(上升时间和下降时间)。压摆率越快,电路发出的噪声就越大。最好保持缓慢的摆率,只有在有特殊原因时才增加摆率。


谢谢!对于一个很好的答案;),您是否介意在浮动状态下对其他问题进行更多说明?
蒂姆(Tim)

3
这个想法是,在中间输入电压下停留任何时间长度,都可能会部分打开输入模块中的上部和下部FET并使部分电源通过它们短路,从而导致功耗过大或(在特别严重的情况下) )潜在的损坏。
克里斯·斯特拉顿

@Tim是的,克里斯·斯特拉顿(Chris Stratton)刚才说的:)
bitsmack 2015年

3
@Tim此外,当线路浮动时,很容易扰乱电压电平。由于电容性相互作用,只是在电路上挥舞
着手

1
@Tim确实取决于应用程序。如果您正在阅读一个开关(或按钮),那并不重要。如果要连接其他组件,则取决于接口。例如,对于SPI通信,CS线为低电平有效。在这种情况下,您需要一个上拉电阻,因此CS不会无意间变低。如果您始终使用微控制器积极驱动线路,您可能会认为这是不必要的。但是在微控制器初始化之前呢?还是重置?上拉电阻器消除了任何歧义……
bitmack

5

GPIO速度是GPIO可以产生的最大频率。较低的设置可以节省电量。

输出类型是引脚是否定义为高电平和低电平(推挽),或者输出是否打开与漏极相连的FET的栅极(漏极开路)。如果您需要任何连接的引脚以将总线拉低而又不使其他引脚短路,则这将很方便。

上拉电阻将引脚输出连接到电源轨,下拉电阻通过电阻将其接地。除其他事项外,即使位处于高阻抗状态,该线也将控制引脚的电压。做诸如使用点开关更改数字输入值之类的事情非常重要。即使开关打开,输入也是可预测的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.