# UART模块

## 功能描述
UART模块用于实现串口通信功能，支持数据发送和接收，提供了简单易用的API接口。

## 依赖关系
- HAL层：hal_uart

## 接口说明

### 枚举类型

#### hal_uart_parity_t
UART校验位枚举
```c
typedef enum {
    HAL_UART_PARITY_NONE = 0U,  /*!< 无奇偶校验 */
    HAL_UART_PARITY_ODD = 1U,   /*!< 奇校验 */
    HAL_UART_PARITY_EVEN = 2U   /*!< 偶校验 */
} hal_uart_parity_t;
```

#### hal_uart_stopbits_t
UART停止位枚举
```c
typedef enum {
    HAL_UART_STOPBITS_1 = 0U,   /*!< 1位停止位 */
    HAL_UART_STOPBITS_2 = 1U    /*!< 2位停止位 */
} hal_uart_stopbits_t;
```

#### hal_uart_databits_t
UART数据位枚举
```c
typedef enum {
    HAL_UART_DATABITS_8 = 0U,   /*!< 8位数据位 */
    HAL_UART_DATABITS_9 = 1U    /*!< 9位数据位 */
} hal_uart_databits_t;
```

#### hal_uart_instance_t
UART实例枚举
```c
typedef enum {
    HAL_UART_INSTANCE_1 = 0U,   /*!< UART1实例 */
    HAL_UART_INSTANCE_2,        /*!< UART2实例 */
    HAL_UART_INSTANCE_3,        /*!< UART3实例 */
    HAL_UART_INSTANCE_4,        /*!< UART4实例 */
    HAL_UART_INSTANCE_5,        /*!< UART5实例 */
    HAL_UART_INSTANCE_6,        /*!< UART6实例 */
    HAL_UART_INSTANCE_MAX       /*!< 实例数量最大值 */
} hal_uart_instance_t;
```

### 数据结构

#### uart_config_t
UART配置结构体，用于初始化UART模块
```c
typedef struct {
    hal_uart_instance_t instance;    /*!< UART实例 */
    uint32_t baudrate;               /*!< 波特率 */
    hal_uart_parity_t parity;        /*!< 校验位 */
    hal_uart_stopbits_t stopbits;    /*!< 停止位 */
    hal_uart_databits_t databits;    /*!< 数据位 */
} uart_config_t;
```

#### uart_t
UART实例结构体，用于管理UART状态
```c
typedef struct {
    uart_config_t config;    /*!< UART配置 */
    uint8_t initialized;     /*!< 初始化状态 */
} uart_t;
```

### 函数接口

#### uart_init
```c
void uart_init(void);
```
初始化UART模块，设置默认配置

**参数**：无

**返回值**：无

**默认配置**：
- 实例：HAL_UART_INSTANCE_1
- 波特率：115200
- 校验位：HAL_UART_PARITY_NONE
- 停止位：HAL_UART_STOPBITS_1
- 数据位：HAL_UART_DATABITS_8

#### uart_config
```c
void uart_config(const uart_config_t *config);
```
配置UART参数

**参数**：
- config: UART配置结构体指针

**返回值**：无

#### uart_send
```c
void uart_send(const uint8_t *data, size_t length);
```
发送数据

**参数**：
- data: 数据缓冲区指针
- length: 数据长度

**返回值**：无

#### uart_send_string
```c
void uart_send_string(const char *str);
```
发送字符串

**参数**：
- str: 字符串指针

**返回值**：无

#### uart_receive
```c
size_t uart_receive(uint8_t *data, size_t length);
```
接收数据

**参数**：
- data: 数据缓冲区指针
- length: 要接收的数据长度

**返回值**：实际接收的数据长度

#### uart_is_tx_ready
```c
uint8_t uart_is_tx_ready(void);
```
检查UART是否准备好发送

**参数**：无

**返回值**：
- 1: 准备好
- 0: 未准备好

#### uart_is_rx_ready
```c
uint8_t uart_is_rx_ready(void);
```
检查UART是否有数据可读

**参数**：无

**返回值**：
- 1: 有数据可读
- 0: 无数据可读

## 使用示例

```c
/* 初始化UART模块 */
uart_init();

/* 配置UART参数 */
uart_config_t config = {
    .instance = HAL_UART_INSTANCE_1,
    .baudrate = 115200,
    .parity = HAL_UART_PARITY_NONE,
    .stopbits = HAL_UART_STOPBITS_1,
    .databits = HAL_UART_DATABITS_8
};
uart_config(&config);

/* 发送字符串 */
uart_send_string("Hello, UART!\r\n");

/* 发送数据 */
uint8_t data[] = {0x01, 0x02, 0x03};
uart_send(data, sizeof(data));

/* 接收数据 */
uint8_t buffer[10];
size_t len = uart_receive(buffer, sizeof(buffer));
```