STM32 理解 GPIO 设置

电器工程 微控制器 电路分析 stm32 GPIO
2022-01-10 04:26:46

在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

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

2个回答
  • GPIO_PuPd(上拉/下拉)

在数字电路中,绝不允许信号线“浮动”,这一点很重要。也就是说,它们需要始终处于高状态或低状态。浮动时,状态是不确定的,会导致一些不同类型的问题。

纠正这个问题的方法是在信号线上添加一个电阻到 Vcc 或 Gnd。这样,如果线路没有被主动驱动为高电平或低电平,电阻器将导致电位漂移到已知水平。

STM32(和其他微控制器)具有执行此操作的内置电路。这样,您无需在电路中添加另一部分。比如选择“GPIO_PuPd_UP”,相当于在信号线和Vcc之间加了一个电阻。

  • GPIO_OType(输出类型):

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

推拉

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

开漏

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

这个名字来源于 MOSFET 的漏极在内部没有连接到任何东西。当使用 BJT 而不是 MOSFET 时,这种类型的输出也称为“集电极开路”。

  • GPIO_速度

基本上,这控制了输出信号的转换速率(上升时间和下降时间)。压摆率越快,电路辐射的噪声就越多。保持压摆率缓慢是一种很好的做法,并且只有在您有特定原因时才增加它。

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

输出类型是引脚是否断言高电平和低电平(推挽),或者输出是否打开连接到漏极引脚的 FET 的栅极(漏极开路)。如果您需要任何连接的引脚能够在不短接其他引脚的情况下将总线拉低,这会很方便。

上拉电阻器将引脚输出连接到电源轨,下拉电阻器通过电阻器将其连接到地。除其他功能外,即使该位处于高阻抗状态,它也可以控制引脚的电压。这对于使用点开关更改数字输入值等操作很重要。即使开关打开,输入也是可预测的。