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

2024-03-08 10:53 浏览 2462人

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相关资料。