打印
[STM32F1]

深入探索 STM32F103:实现 UART 通信的详细教程

[复制链接]
54|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
帛灿灿|  楼主 | 2025-1-15 07:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 通信功能

    • 初始化 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 通信功能。这种基础应用在嵌入式开发中非常常见,掌握后可以拓展至更多复杂应用场景,如与传感器或上位机的通信。




使用特权

评论回复
沙发
公羊子丹| | 2025-1-15 07:43 | 只看该作者
原来 STM32 的 UART 配置这么简单,看完觉得很有信心!

使用特权

评论回复
板凳
周半梅| | 2025-1-15 07:43 | 只看该作者
STM32CubeMX 确实是神器,一键生成代码省了好多时间。

使用特权

评论回复
地板
童雨竹| | 2025-1-15 07:43 | 只看该作者
接收回显这个功能不错,调试的时候太方便了。

使用特权

评论回复
5
万图| | 2025-1-15 07:43 | 只看该作者
我遇到过波特率不匹配的坑,看完这个帖子明白怎么解决了。

使用特权

评论回复
6
Wordsworth| | 2025-1-15 07:44 | 只看该作者
UART 的初始化代码写得很规范,学习了!

使用特权

评论回复
7
Bblythe| | 2025-1-15 07:44 | 只看该作者
能不能写一篇关于 STM32F103 多串口通信的帖子?感觉更实用。

使用特权

评论回复
8
Pulitzer| | 2025-1-15 07:44 | 只看该作者
这篇文章让我瞬间入门了 STM32 的串口通信,感谢!

使用特权

评论回复
9
Uriah| | 2025-1-15 07:44 | 只看该作者
有没有推荐的串口调试工具?我现在用的稳定性一般。

使用特权

评论回复
10
Clyde011| | 2025-1-15 07:44 | 只看该作者
希望再多讲一些关于中断方式接收串口数据的实现。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

3837

帖子

0

粉丝