在嵌入式系统中,UART(通用异步收发传输器)是最常用的通信接口之一。它的简单性、低成本和广泛的支持使其在嵌入式应用中得到了广泛的应用。STM32F4 系列微控制器,作为一款基于 ARM Cortex-M4 内核的高性能 MCU,内置多个 UART 接口,能够轻松实现串口通信。本篇文章将介绍如何在 STM32F4 上实现基本的 UART 串口通信功能,并提供一个示例代码来展示如何使用 STM32 HAL 库配置和使用 UART。
1. STM32F4 系列简介STM32F4 系列是 STMicroelectronics 推出的基于 ARM Cortex-M4 核心的微控制器,拥有高达 180 MHz 的主频和丰富的外设接口。它广泛应用于各种嵌入式系统,如工业控制、汽车电子、通信设备等。STM32F4 系列不仅具备强大的计算能力,还集成了多个串口(USART),使其在处理通信任务时非常高效。
2. 系统设计与架构本项目的目标是使用 STM32F4 系列的 UART 串口进行数据通信。我们将 STM32F4 作为串口的主机,通过 UART 向外部设备发送数据,并接收外部设备返回的数据。此功能可以应用于串口调试、传感器数据采集、无线通信等场景。
我们将通过以下步骤实现 UART 串口通信:
- 配置 UART 外设:选择一个 UART 接口并设置其波特率、数据位、停止位等参数。
- 串口发送数据:编写代码通过 UART 发送数据。
- 串口接收数据:通过中断或轮询的方式接收 UART 数据。
- 测试与调试:使用串口调试工具进行测试,确保通信正常。
3. 硬件连接在 STM该函数等待接收一个字节,并返回接收到的字符。
4.4. 主函数在主函数中,我们可以调用上述函数进行数据发送和接收。32F4 中,UART 接口通常通过两个引脚(TX 和 RX)与外部设备连接:
- TX:STM32F4 的 TX 引脚,用于发送数据。
- RX:STM32F4 的 RX 引脚,用于接收数据。
假设我们使用的是 STM32F407VG 型号,它具有多个 UART 外设,我们可以选择其中一个(例如 UART1)进行串口通信。
4. 配置与代码实现首先,我们可以使用 STM32CubeMX 工具进行外设配置,选择 UART1,并设置适当的波特率(例如 9600 bps)、数据位(8 位)、停止位(1 位)。然后生成初始化代码框架。接下来,我们编写实际的代码,完成串口发送和接收功能。
4.1. UART 初始化代码#include "main.h"
// UART 句柄
UART_HandleTypeDef huart1;
// 初始化 UART1
void UART1_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
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();
}
}
这段代码将 UART1 配置为 9600 波特率,8 位数据,1 位停止位,并启用 TX/RX 模式。
4.2. 发送数据通过 HAL_UART_Transmit 函数,可以向 UART 发送数据。以下代码示例展示了如何通过 UART1 发送字符串数据。
// 发送字符串数据
void UART_SendString(char *str)
{
while (*str)
{
HAL_UART_Transmit(&huart1, (uint8_t *)str++, 1, HAL_MAX_DELAY);
}
}
此函数逐个字符发送字符串,直到字符串结束。
4.3. 接收数据可以通过轮询方式或中断方式接收数据。以下代码展示了使用轮询方式接收一个字符。
// 接收一个字符
char UART_ReceiveChar(void)
{
uint8_t receivedByte;
if (HAL_UART_Receive(&huart1, &receivedByte, 1, HAL_MAX_DELAY) == HAL_OK)
{
return (char)receivedByte;
}
return 0;
}
该函数等待接收一个字节,并返回接收到的字符。
4.4. 主函数在主函数中,我们可以调用上述函数进行数据发送和接收
int main(void)
{
HAL_Init();
UART1_Init();
// 发送欢迎消息
UART_SendString("Hello, STM32 UART!\r\n");
while (1)
{
// 接收数据并回显
char receivedChar = UART_ReceiveChar();
if (receivedChar != 0)
{
UART_SendString("Received: ");
UART_SendString(&receivedChar);
UART_SendString("\r\n");
}
}
}
在该主函数中,首先初始化 UART1,然后发送一个字符串“Hello, STM32 UART!”。接着,进入一个无限循环,不断接收数据并回显到串口。
5. 测试与调试为了测试 UART 串口通信功能,可以使用串口调试工具(如 PuTTY、Tera Term 或 STM32CubeProgrammer)连接到 STM32 的 UART1 接口。配置相应的波特率和参数后,观察串口的发送和接收情况,确保数据正确发送和接收。
6. 总结本文介绍了如何使用 STM32F4 系列微控制器实现 UART 串口通信。通过配置 UART 外设,编写数据发送与接收函数,我们可以轻松实现基于 UART 的数据传输。这种通信方式广泛应用于嵌入式系统中,如与外部设备通信、调试信息输出、传感器数据采集等场景。
|