STM32F103 系列微控制器以其高性价比和丰富的外设功能,被广泛应用于各种嵌入式开发项目。本文将以 STM32F103 为例,详细介绍如何配置和实现 UART 通信,包括硬件连接、软件配置以及代码实现,帮助读者快速上手并掌握 UART 的基本应用。
STM32F103 的主要特点STM32F103 基于 ARM Cortex-M3 核心,具有以下主要特性:
- 性能可靠:72 MHz 主频,支持多种低功耗模式。
- 丰富外设:包括多通道 UART、SPI、I2C 等通信接口。
- 开发资源丰富:兼容多种开发工具,社区支持活跃。
UART 是一种常用的串行通信接口,非常适合 MCU 与传感器、模块或上位机通信的场景。
硬件连接使用 STM32F103 的 UART 功能,需要如下硬件:
- STM32F103 最小系统板。
- USB 转串口模块(如 CH340)。
- 常规连接线。
典型连接方式:
- STM32F103 的 TX (PA9) 引脚连接到 USB 转串口模块的 RX 引脚。
- STM32F103 的 RX (PA10) 引脚连接到 USB 转串口模块的 TX 引脚。
- 接地(GND)相连。
软件开发流程- 开发工具
使用 STM32CubeMX 和 STM32CubeIDE 进行代码生成与开发。
- UART 配置
在 STM32CubeMX 中,选择对应的 UART 外设(如 USART1),配置波特率为 115200、8 数据位、1 停止位、无校验。
- 实现 UART 通信功能
示例代码以下是基于 HAL 库实现的 UART 通信示例代码,展示了数据发送和接收的基本操作。
#include "main.h"
#include <string.h>
UART_HandleTypeDef huart1;
// 初始化 UART
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();
}
}
// 数据发送函数
void UART_SendString(char *str) {
HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
}
// 数据接收函数
void UART_ReceiveString(char *buffer, uint16_t size) {
HAL_UART_Receive(&huart1, (uint8_t *)buffer, size, HAL_MAX_DELAY);
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
char rxBuffer[100];
char *welcomeMessage = "UART Communication Initialized\r\n";
UART_SendString(welcomeMessage);
while (1) {
// 接收数据
UART_ReceiveString(rxBuffer, sizeof(rxBuffer));
// 回显数据
UART_SendString("Received: ");
UART_SendString(rxBuffer);
UART_SendString("\r\n");
}
}
调试与验证- 串口调试工具
使用常见的串口调试工具(如 SecureCRT、Tera Term 或串口助手)验证通信功能。
- 测试步骤
- 上电运行程序,串口工具应显示初始化信息。
- 发送任意字符串,STM32F103 将接收并回显内容。
常见问题与解决方案- 波特率错误
确保 MCU 和调试工具的波特率一致。 - 数据丢失或乱码
检查线路连接及串口配置是否正确。 - 无法接收数据
确认引脚映射与 CubeMX 配置一致。
总结本文通过硬件连接、软件配置以及代码实现的详细讲解,帮助大家快速掌握 STM32F103 的 UART 通信功能。这种基础应用在嵌入式开发中非常常见,掌握后可以拓展至更多复杂应用场景,如与传感器或上位机的通信。
|