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

如何使用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元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發哦


the end

評論(0)