【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)
相关推荐
VekiSon8 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
来自晴朗的明天9 小时前
14、光耦隔离电路(EL3H7)
单片机·嵌入式硬件·硬件工程
G***技9 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
czhaii10 小时前
STC AI8052U单片机特点
单片机
MAR-Sky11 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗12 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞13 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技14 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天14 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)15 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件