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) |