STM32F103 USART串口通信

STM32F103C8T6 最小系统开发板使用 HAL 库进行 USART 串口通信

1. 项目概述

在本项目中,我们将使用 STM32F103C8T6 最小系统开发板,通过 HAL(Hardware Abstraction Layer)库 实现 USART 串口通信,并通过 串口助手 进行数据收发。

2. 硬件设计

1. 硬件需求

  • STM32F103C8T6 最小系统开发板
  • STLink-V2 下载器(用于烧录程序)
  • USB 转 TTL 模块(如 CH340、CP2102)
  • 杜邦线

2. 硬件连接

  1. STM32F103C8T6 USART1_TX(PA9) → USB 转 TTL RX
  2. STM32F103C8T6 USART1_RX(PA10) → USB 转 TTL TX
  3. GND → GND

3. USART 协议原理

USART(通用同步/异步收发器)是一种 全双工串行通信协议,支持异步(UART)和同步通信。

  1. 波特率(Baud Rate):通信速度(常用 9600、115200)
  2. 数据位(Data Bits):通常为 8 位
  3. 停止位(Stop Bits):常见 1 位
  4. 校验位(Parity Bit):可选(无校验、偶校验、奇校验)

4. 软件设计

1. STM32 HAL 库简介

HAL 库是 ST 官方提供的 硬件抽象库,封装了底层寄存器操作,使开发更加简单。

2. 工程创建步骤(基于 STM32CubeMX)

  1. 打开 STM32CubeMX,创建新工程,选择 STM32F103C8T6
  2. 配置 USART1 串口
    • 选择 PA9 为 USART1_TX
    • 选择 PA10 为 USART1_RX
    • 配置 波特率 115200,8 数据位,1 停止位,无校验
  3. 配置时钟(默认 72MHz,无需修改)。
  4. 生成代码,选择 IDE 为 STM32CubeIDE 或 Keil

5. 代码实现

1. main.c 代码

#include "main.h"
#include <string.h>

UART_HandleTypeDef huart1;  // 定义 USART1 句柄

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

int main(void)
{
    HAL_Init();             // 1.初始化 HAL 库
    SystemClock_Config();   // 2.配置系统时钟
    MX_GPIO_Init();         // 3.初始化 GPIO
    MX_USART1_UART_Init();  // 4.初始化 USART1

    char msg[] = "Hello STM32 USART!\r\n";
    while (1)
    {
        HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 1000);   // 发送数据
        HAL_Delay(1000);                                                // 延时 1 秒
    }
}

/**
  * @brief USART1 初始化
  */
static void MX_USART1_UART_Init(void)
{
    huart1.Instance = USART1;                       // 选择 USART1
    huart1.Init.BaudRate = 115200;                  // 波特率 115200
    huart1.Init.WordLength = UART_WORDLENGTH_8B;    // 数据位 8
    huart1.Init.StopBits = UART_STOPBITS_1;         // 停止位 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;// 16 倍采样
    HAL_UART_Init(&huart1);                         // 初始化 USART1
}

2. 代码解析

  • HAL_UART_Transmit():发送字符串数据到串口助手。
  • 波特率 115200,8N1 设置适用于大多数串口通信需求。

6. 烧录与测试

  1. 连接 STLink-V2
    • STLink-V2 SWDIO → STM32 SWDIO
    • STLink-V2 SWCLK → STM32 SWCLK
    • STLink-V2 GND → STM32 GND
    • STLink-V2 3.3V → STM32 3.3V
  2. 使用 STM32CubeProgrammer 或 Keil 进行烧录
  3. 烧录完成后,按下 RESET 运行程序

2. 使用串口助手测试

  1. 连接 USB 转 TTL 模块,打开串口助手(如 SSCOM、SecureCRT、RealTerm)。
  2. 设置波特率 115200,打开串口。
  3. 观察串口助手,每秒收到 "Hello STM32 USART!"。

7. 总结

本教程介绍了 STM32F103C8T6 最小系统开发板 使用 HAL 库进行 USART 串口通信,包括 USART 协议原理、硬件设计、软件配置、代码编写、烧录步骤,适用于 STM32 HAL 库 开发。希望能帮助你快速入门 STM32 的串口通信应用!

posted @ 2025-02-07 15:03  jeikerxiao  阅读(683)  评论(0)    收藏  举报