STM32 HAL库 UART串口通信数据发送实战教程

一、实验目标

通过STM32的UART串口发送字符串数据到PC端串口调试助手,验证通信功能。


二、硬件准备

  1. 主控芯片:STM32F103C8T6。

  2. 串口模块:USB转TTL模块。

  3. 接线说明

  • STM32的USART1_TX(PA9) → USB-TTL模块的RX。
  • STM32的USART1_RX(PA10) → USB-TTL模块的TX。
  • STM32的GND → USB-TTL模块的GND。
  • 开发板供电:USB或3.3V电源。

  • 三、软件配置(STM32CubeMX)

    1. 新建工程

  • 打开STM32CubeMX,选择芯片型号STM32F103C8T6。

  • 配置系统时钟

  • 2. 配置UART

    1. 启用USART1

  • 左侧引脚图找到USART1,模式选择 Asynchronous(异步通信)。
  • 模式参数清单

  • 自动分配引脚PA9(TX)和PA10(RX)。
  • 参数设置:

  • 生成代码

  • 四、代码实现

    发送数据函数

    main()中添加发送代码:

    	uint8_t Number = 0x5a;
    	uint8_t Array[] = {1,2,3,4,5};
    	char ch = 'a';
    	char *str = "Hello World";
    	
    	
    	HAL_UART_Transmit(&huart1,&Number,1,HAL_MAX_DELAY);
    	HAL_UART_Transmit(&huart1,Array,5,HAL_MAX_DELAY);
    	HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,HAL_MAX_DELAY);
    	HAL_UART_Transmit(&huart1,(uint8_t*)&str,strlen(str),HAL_MAX_DELAY);

    五、代码烧录与验证

    1. 烧录程序

  • 使用ST-Link或J-Link工具将代码烧录到STM32。

  • 2. 串口调试助手设置

    1. 打开PC端串口调试工具。

    2. 选择正确的COM口。

    3. 设置参数:波特率 115200,8数据位,无校验,1停止位。

    3. 实验结果

  • 按下复位键后调试器接收区显示如下数据。


  • 六、关键代码解析

    HAL_UART_Transmit函数

    HAL_UART_Transmit 是 STM32 HAL 库中用于通过 UART(通用异步收发器)发送数据的核心函数。它以阻塞(同步)方式工作,即函数会等待数据发送完成或超时后才返回。

    HAL_StatusTypeDef HAL_UART_Transmit(
      UART_HandleTypeDef *huart,  // UART 外设句柄
      uint8_t *pData,             // 待发送数据的缓冲区指针
      uint16_t Size,              // 待发送数据的字节数
      uint32_t Timeout            // 超时时间(单位:毫秒)
    );

    参数解析

    参数 类型 说明
    huart UART_HandleTypeDef* 指向 UART 配置结构体的指针(如 &huart1),包含波特率、数据位等配置信息。
    pData uint8_t* 待发送数据的缓冲区首地址。需确保数据在发送期间有效(如全局变量或静态数组)。
    Size uint16_t 发送数据的字节数。若为 0,函数直接返回 HAL_ERROR
    Timeout uint32_t 超时时间(毫秒)。若超时前未完成发送,函数返回 HAL_TIMEOUT

    返回值

    返回值为 HAL_StatusTypeDef 枚举类型:

  • HAL_OK : 数据发送成功。

  • HAL_ERROR : 参数错误(如 huart 未初始化或 Size=0)。

  • HAL_BUSY : UART 正忙(如上一次传输未完成)。

  • HAL_TIMEOUT : 发送超时(未在指定时间内完成)。


  • 七、常见问题排查

    1. 无数据接收

    2. 检查接线(TX/RX是否交叉连接)。

    3. 确认波特率一致(STM32与PC端均为115200)。

    4. 检查USB-TTL模块驱动是否安装。

    5. 代码未执行

    6. 确认烧录时复位模式正确(如NRST引脚接复位按钮)。

    作者:ElePower9527

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 HAL库 UART串口通信数据发送实战教程

    发表回复