193 lines
3.7 KiB
Markdown
193 lines
3.7 KiB
Markdown
# 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));
|
||
``` |