如何在STM32上配置和使用UART串口通信

1. 硬件連接:點擊此處黃色字體領取文章配套資料

首先,需要將UART串口相關的引腳連接好。不同型號的STM32微控制器會有不同的引腳分配,需要查看對應型號的數據手冊或開發板資料以確定使用的串口引腳連接情況。一般來說,UART通信需要連接TX(發送)和RX(接收)引腳。

2. 初始化串口:

在使用UART串口之前,需要進行串口的初始化配置。這包括波特率、數據位、停止位、校驗位等參數的設置。這些參數需要與通信對端設備匹配才能正確通信。在STM32中,我們通常使用STM32Cube庫進行初始化配置。以下是一個初始化USART1串口的示例代碼:

```c
#include "stm32f4xx_hal.h"

UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  while (1)
  {
    // 在此處添加你的代碼
  }
}

void MX_USART1_UART_Init(void)
{
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
}
```

在上述代碼中,我們使用了STM32 HAL庫的函數來初始化UART。通過`HAL_UART_Init`函數,設置了串口1 (USART1) 的波特率為115200,數據位數為8位,停止位為1位,無校驗位,使能了發送和接收模式。

3. 發送數據:

發送數據可以使用查詢方式或中斷方式。使用查詢方式時,可以使用`HAL_UART_Transmit`函數發送數據;使用中斷方式時,可以使用`HAL_UART_Transmit_IT`函數發送數據。

以下是一個使用查詢方式發送數據的示例代碼:

```c
uint8_t data[] = "Hello, World!";

HAL_UART_Transmit(&huart1, data, sizeof(data), HAL_MAX_DELAY);
```

以上代碼通過`HAL_UART_Transmit`函數發送了一個字符串 "Hello, World!",`sizeof(data)`參數表示要發送的數據長度,`HAL_MAX_DELAY`表示發送數據時不設置超時。

4. 接收數據:

接收數據也可以使用查詢方式或中斷方式。使用查詢方式時,可以使用`HAL_UART_Receive`函數接收數據;使用中斷方式時,可以使用`HAL_UART_Receive_IT`函數接收數據。

以下是一個使用查詢方式接收數據的示例代碼:

```c
uint8_t buffer[32];

HAL_UART_Receive(&huart1, buffer, sizeof(buffer), HAL_MAX_DELAY);
```

以上代碼通過`HAL_UART_Receive`函數接收數據,并將接收到的數據存儲在`buffer`數組中。`sizeof(buffer)`表示要接收的數據長度,`HAL_MAX_DELAY`表示接收數據時不設置超時。

5. 中斷處理:

如果使用中斷方式進行數據的發送和接收,還需要實現相應的中斷處理函數。HAL庫提供了針對UART串口的中斷回調函數,可以在中斷發生時執行相應的處理。

以下是一個接收中斷回調函數的示例代碼:

```c
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if (huart->Instance == USART1)
  {
    // 在此處添加你的代碼
  }
}
```

在上面的代碼中,我們使用了HAL庫提供的UART接收完成回調函數`HAL_UART_RxCpltCallback`,在其中可以處理接收到的數據。

通過以上步驟,我們可以在STM32微控制器上配置和使用UART串口通信。通過STM32Cube庫提供的函數,我們可以方便地進行串口初始化、發送和接收數據。在實際應用中,還需要根據具體需求做錯誤處理、數據處理等工作。UART串口通信是嵌入式系統中常用的通信方式,掌握其原理和使用方法對于嵌入式系統的開發非常重要。希望以上內容對您有所幫助。


如果對嵌入式、人工智能等相關領域感興趣,可以加入我創建的嵌入式交流群,內有150G相關資料。

the end

評論(0)