STM32 HAL库 UART串口通信数据发送实战教程
一、实验目标
通过STM32的UART串口发送字符串数据到PC端串口调试助手,验证通信功能。
二、硬件准备
-
主控芯片:STM32F103C8T6。
-
串口模块:USB转TTL模块。
-
接线说明:
三、软件配置(STM32CubeMX)
1. 新建工程
打开STM32CubeMX,选择芯片型号STM32F103C8T6。
配置系统时钟
2. 配置UART
-
启用USART1:
模式参数清单
参数设置:
四、代码实现
发送数据函数
在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. 串口调试助手设置
-
打开PC端串口调试工具。
-
选择正确的COM口。
-
设置参数:波特率 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 : 发送超时(未在指定时间内完成)。
七、常见问题排查
-
无数据接收:
-
检查接线(TX/RX是否交叉连接)。
-
确认波特率一致(STM32与PC端均为115200)。
-
检查USB-TTL模块驱动是否安装。
-
代码未执行:
-
确认烧录时复位模式正确(如NRST引脚接复位按钮)。
作者:ElePower9527