STM32 HAL库 UART串口发送数据实验

news/2025/2/21 10:39:53/

一、实验目标

通过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            // 超时时间(单位:毫秒)
);

参数解析

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

返回值

返回值为 HAL_StatusTypeDef 枚举类型:

  • HAL_OK : 数据发送成功。

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

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

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


七、常见问题排查

  1. 无数据接收

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

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

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

  2. 代码未执行

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


http://www.ppmy.cn/news/1573544.html

相关文章

Docker 安全基础:权限、用户、隔离机制

Docker 是一个强大的容器化平台,广泛用于开发、部署和运行应用。由于 Docker 提供了强大的隔离性和便捷的容器管理功能,它成为了现代 DevOps 和微服务架构的重要组成部分。然而,随着 Docker 在生产环境中的广泛应用,容器的安全性也…

开题报告——基于Spring Boot的垃圾分类预约回收系统

关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾驭能…

使用verilog 实现 cordic 算法 ----- 旋转模式

1-设计流程 ● 了解cordic 算法原理,公式,模式,伸缩因子,旋转方向等,推荐以下链接视频了解 cordic 算法。哔哩哔哩-cordic算法原理讲解 ● 用matlab 或者 c 实现一遍算法 ● 在FPGA中用 verilog 实现,注意…

调用deepseek接口

首次调用 http请求 curl https://api.deepseek.com/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer <DeepSeek API Key>" \-d {"model": "deepseek-chat","messages": [{"…

day53 第十一章:图论part04

110.字符串接龙 bfs: 求最短路径长度 # bfs from collections import deque from collections import defaultdict def bfs(beginStr, endStr, strDict):que deque()que.append(beginStr)strDict[beginStr] 1while que:curStr que.popleft()curList list(curStr)for i in …

@Autowired注解(springboot)

Autowired 注解的说明 Autowired 是 Spring 框架中的一个重要注解&#xff0c;用于实现依赖注入&#xff08;Dependency Injection, DI&#xff09;。它可以让 Spring 容器自动将所需的依赖项注入到类中&#xff0c;而无需手动创建或查找这些依赖项。这有助于减少代码耦合&…

【Docker】容器被停止/删除的方式及命令:全面解析与实践指南

文章目录 引言一、容器的生命周期二、停止容器的命令及方式1. docker stop 命令2. docker kill 命令3. docker pause 和 docker unpause 命令4. docker restart 命令 三、删除容器的命令及方式1. docker rm 命令2. docker container prune 命令3. docker rm 与 docker rmi 的区…

NetCDF数据处理

NetCDF 文件格式在气象数据工程领域占据着举足轻重的地位&#xff0c;其结构灵活、强兼容性等优势使其成为该领域的一个标准。无论是从事学术研究还是工程实践&#xff0c;掌握这种数据格式变得越发重要。其次&#xff0c;我注意到气象编程大多数课程都聚焦于某个特定库的使用方…