【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)
相关推荐
炸膛坦客5 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
华清远见IT开放实验室10 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
AI的探索之旅12 小时前
AI辅助原理图评审:电源去耦、BOOT引脚、VCAP——19项逐一核查,遗漏?不存在的
人工智能·vscode·嵌入式硬件
茯苓gao12 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
GeekArch12 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
Freedom_my13 小时前
STM32项目3
stm32·单片机·嵌入式硬件
国科安芯14 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
小李不困还能学16 小时前
基于 51 单片机的8 路抢答器设计教程
单片机·嵌入式硬件·mongodb·抢答器
CedarQR16 小时前
万字长文:从零在 RK3588 上部署 PaddleSpeech 中文 TTS 全流程(FastSpeech2 + HiFiGAN)
开发语言·c++·嵌入式硬件·ubuntu·json
萌动的小火苗16 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件