【UART控制器HAL库常用接口】

UART寄存器映射

UART控制器基址

寄存器映射

HAL库接口

UART串口初始化配置结构体

cs 复制代码
typedef struct {
  uint32_t BaudRate;        // 波特率
  uint32_t WordLength;      // 数据位长度
  uint32_t StopBits;        // 停止位
  uint32_t Parity;          // 校验位
  uint32_t Mode;            // 收发模式
  uint32_t HwFlowCtl;       // 硬件流控
  uint32_t OverSampling;    // 过采样模式(8/16倍,默认16)
} UART_InitTypeDef;

不同寄存器作用:USART_DR用于数据收发,USART_SR用于状态标志,USART_BRR用于波特率配置,USART_CR1用于控制寄存器。

HAL_UART_Init函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
返回值 含义
HAL_OK 初始化成功
HAL_ERROR 参数错误 / 硬件配置失败
HAL_BUSY 串口外设正忙(未禁用)
HAL_TIMEOUT 初始化超时(极少出现)

HAL_UART_Transmit函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
返回值 含义
HAL_OK 数据全部发送成功
HAL_ERROR 参数错误(如句柄 / 数据指针为空、Size=0)
HAL_BUSY 串口正忙(如正在 DMA / 中断发送)
HAL_TIMEOUT 发送超时(未在指定时间内完成发送)
参数名 类型 说明
huart UART_HandleTypeDef* 串口句柄(如&huart1),绑定要使用的硬件串口
pData uint8_t* 待发送数据的缓冲区指针(支持char*强制转换,因为 ASCII 码兼容 uint8_t)
Size uint16_t 要发送的字节数(注意:字符串需排除\0,否则会多发送一个空字符)
Timeout uint32_t 超时时间(单位:ms),超时后函数立即返回HAL_TIMEOUT

HAL_UART_Receive函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
返回值 含义
HAL_OK 成功接收指定Size字节的数据
HAL_ERROR 参数错误(句柄 / 缓冲区为空、Size=0
HAL_BUSY 串口正忙(如正在 DMA / 中断接收)
HAL_TIMEOUT 超时未接收到足够数据
参数名 类型 说明
huart UART_HandleTypeDef* 串口句柄(如&huart1),绑定要使用的硬件串口
pData uint8_t* 接收数据的缓冲区指针(需提前分配内存,避免空指针 / 越界)
Size uint16_t 期望接收的字节数(需≤缓冲区长度,否则数组越界)
Timeout uint32_t 超时时间(单位:ms),超时后立即返回(无论是否接收到数据)

HAL_UART_Transmit_IT函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
返回值 含义
HAL_OK 中断发送启动成功
HAL_ERROR 参数错误(句柄 / 缓冲区空、Size=0)
HAL_BUSY 串口正忙(如正在 DMA / 其他中断收发)
HAL_TIMEOUT 启动超时(极少出现)
参数名 类型 说明
huart UART_HandleTypeDef* 串口句柄(如&huart1
pData uint8_t* 待发送数据缓冲区(需全局 / 静态变量,避免局部变量被释放)
Size uint16_t 发送字节数

HAL_UART_Receive_IT函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

| 返回值 | 含义 |
| HAL_OK | 中断发送启动成功 |
| HAL_ERROR | 参数错误(句柄 / 缓冲区空、Size=0) |
| HAL_BUSY | 串口正忙(如正在 DMA / 其他中断收发) |

HAL_TIMEOUT 启动超时(极少出现)
参数名 类型 说明
huart UART_HandleTypeDef* 串口句柄
pData uint8_t* 接收缓冲区(全局 / 静态变量,避免局部变量被释放)
Size uint16_t 期望接收的字节数

HAL_UART_Transmit_DMA函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
返回值 含义
HAL_OK DMA 发送启动成功
HAL_ERROR 参数错误(句柄 / 缓冲区空、Size=0)
HAL_BUSY 串口 / DMA 正忙(如正在接收 DMA 数据)
HAL_TIMEOUT 启动超时(极少出现)
参数名 类型 说明
huart UART_HandleTypeDef* 串口句柄(如&huart1
pData uint8_t* 发送缓冲区(全局 / 静态变量,避免局部变量被释放)
Size uint16_t 发送字节数(最大 65535,DMA 硬件限制)

HAL_UART_Receive_DMA函数

cs 复制代码
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
返回值 含义
HAL_OK DMA 发送启动成功
HAL_ERROR 参数错误(句柄 / 缓冲区空、Size=0)
HAL_BUSY 串口 / DMA 正忙(如正在接收 DMA 数据)
HAL_TIMEOUT 启动超时(极少出现)
参数名 类型 说明
huart UART_HandleTypeDef* 串口句柄
pData uint8_t* 接收缓冲区(全局 / 静态变量,避免回调时内存释放)
Size uint16_t 接收字节数(最大 65535)
相关推荐
Hello_Damon_Nikola1 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
gscsded2 小时前
AUTOSAR CanTp 模块学习笔记
单片机·嵌入式硬件·汽车
Hello_Damon_Nikola2 小时前
扰流筋从原理到应用
人工智能·单片机·嵌入式硬件
某林2122 小时前
从“仿真能跑”到“真机能走”:一套轮腿机械狗强化学习系统的工程化实践
人工智能·stm32·嵌入式硬件·架构·机器人·机械狗
luiyarch3 小时前
IP8到底是什么?
嵌入式硬件·车载系统
hongmai6668883 小时前
ESP32-WROVER-B-N8R8:8MB PSRAM加持的经典双核模组,现在还值得选吗?
单片机·嵌入式硬件·物联网·智能路由器·risc-v
VALENIAN瓦伦尼安教学设备4 小时前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
0x3F(小茶)4 小时前
复位异常(Cortex-M处理器)
单片机·mcu
SilicoCode5 小时前
STM32入门教程:BKP备份寄存器 & RTC实时时钟详解
stm32·单片机·嵌入式硬件
lhbweilai5 小时前
STM32 简单认识一下FreeRTOS(纯理论)
stm32·单片机·嵌入式硬件