【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)
相关推荐
FPGA小迷弟5 小时前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
国科安芯20 小时前
83 倍:ASC0108S 在推挽和开漏之间,差的不是速度,是回程
单片机·嵌入式硬件·架构·电平转换·抗辐射
国科安芯1 天前
从遥控到自治:ASP4644S2B支撑星载电源健康管理与容错配电
网络·单片机·嵌入式硬件·安全·dcdc·低轨卫星·商业航天
rhythm-ring1 天前
《汽车热管理系统:电子水泵单线PWM双向诊断机制》
单片机·嵌入式硬件·汽车
Dev_XH1 天前
【成品设计】基于物联网的车间安全生产监控系统设计
stm32·单片机·嵌入式硬件·物联网
xiebs_1 天前
【无标题】111
单片机
元器件BOM超人1 天前
GD32E230C8T6 兆易创新Cortex-M23超值型MCU解析:规格参数、替代选型与常见问题
单片机·嵌入式硬件
StarsGreen1 天前
Android 启动流程详解
android·linux·单片机·嵌入式硬件
en.en..1 天前
AFE:模拟前端,模拟世界通往 MCU 的信号桥梁
单片机·嵌入式硬件
小鳄鱼电气1 天前
感应电机直接转矩控制传动(AC4 200 HP)仿真说明书
单片机·嵌入式硬件