【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)
相关推荐
DLGXY几秒前
STM32(二十六)——WDG看门狗
stm32·单片机·嵌入式硬件
集芯微电科技有限公司5 分钟前
AD536A高性能真有效值直流转换电路替代PC2909
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
可乐鸡翅好好吃9 分钟前
关于频率(HZ)与周期(ms)的转换
单片机·嵌入式硬件
进击的横打21 分钟前
【车载开发系列】RH850常用的定时器
单片机·嵌入式硬件·rh850
2501_918126911 小时前
学习所有6502写游戏地图的语句
汇编·嵌入式硬件·学习·游戏·个人开发
szxinmai主板定制专家1 小时前
基于ZYNQ MPSOC船舶数据采集仪器设计(三)振动,流量,功耗,EMC,可靠性测试
arm开发·人工智能·嵌入式硬件·fpga开发
AI+程序员在路上1 小时前
Keil5 中安装 STM32各系列单片机开发包步骤
stm32·单片机·嵌入式硬件
xiangw@GZ2 小时前
CapSense底层逻辑:并行走线的强耦合干扰
单片机·嵌入式硬件
逐步前行2 小时前
STM32_ADC_寄存器操作
stm32·单片机·嵌入式硬件
LCG元3 小时前
STM32实战:基于STM32F103的智能门禁系统(RFID+指纹)
stm32·单片机·嵌入式硬件