如何使用STM32的GPIO控制输入输出

2023-10-24 13:46 浏览 1645人

如何使用STM32的GPIO控制输入输出

GPIO(General Purpose Input/Output)是STM32微控制器的通用输入输出引脚。通过配置GPIO引脚的模式和设置电平值,您可以实现对外部设备的输入和输出控制。在本篇文章中,我们将介绍如何使用STM32的GPIO控制输入输出。

1. 硬件连接:

在使用STM32的GPIO之前,首先确保正确连接您的硬件设备。例如,如果您想要控制LED,将LED的正极连接到GPIO引脚,负极连接到GND。如果您希望读取按钮的状态,将按钮一个端口连接到GPIO引脚,另一个端口连接到VCC或GND。

2. 引脚模式设置:

在STM32中,每个GPIO引脚都有多个模式可供选择,例如输入模式、输出模式、复用模式等。要设置引脚的模式,您需要使用相应的寄存器和位操作。

首先,确定引脚所属的端口和引脚号。例如,PB0引脚属于端口B的第0个引脚。然后,找到正确的寄存器和位来配置引脚的模式。

对于STM32F1系列微控制器,可以使用C语言的寄存器操作进行配置。以下代码示例将PB0配置为输出模式:

```c
#include "stm32f10x.h"

int main(void) {
  // 使能端口B的时钟
  RCC->APB2ENR |= RCC_APB2Periph_GPIOB;

  // 设置PB0引脚为推挽输出模式,最大输出速度为50MHz
  GPIOB->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);  // 清除原来的配置
  GPIOB->CRL |= GPIO_CRL_MODE0_1;  // 设置输出速度为50MHz
  GPIOB->CRL |= GPIO_CRL_MODE0_0;  // 设置输出速度为50MHz
  GPIOB->CRL &= ~GPIO_CRL_CNF0;  // 推挽输出模式

  // 设置PB0引脚的输出电平为高电平
  GPIOB->BSRR |= GPIO_BSRR_BS0;

  while (1) {
    // 此处可以进行其他操作
  }
}
```

对于其他系列的STM32微控制器,操作方法可能略有不同。建议您参考相应系列的参考手册或使用CubeMX等工具来进行配置。

3. 输入控制:

如果需要读取外部设备的输入状态,您需要配置GPIO引脚为输入模式,并使用相关的寄存器和位进行读取。

以下是一个读取按钮状态的例子:

```c
#include "stm32f10x.h"

int main(void) {
  // 使能端口A的时钟
  RCC->APB2ENR |= RCC_APB2Periph_GPIOA;

  // 设置PA0引脚为上拉输入模式
  GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);  // 清除原来的配置
  GPIOA->CRL |= GPIO_CRL_CNF0_1;  // 上拉输入模式

  while (1) {
    // 读取PA0引脚的电平值,判断按钮状态
    if ((GPIOA->IDR & GPIO_IDR_IDR0) == 0) {
      // 按钮被按下
      // 执行相应的操作
    } else {
      // 按钮未被按下
      // 执行相应的操作
    }
  }
}
```

通过以上配置,PA0引脚将被设置为上拉输入模式,意味着当按钮未被按下时,引脚电平为高电平;当按钮被按下时,引脚电平为低电平。

通过以上步骤,您可以使用STM32的GPIO控制外部设备的输入输出。请注意,不同型号的STM32微控制器可能会有略微不同的寄存器和位配置方式,所以在使用时,请参考正确的参考手册或使用相关的工具来辅助配置。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击这里,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦