• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# UART概述
2
3## 简介
4
5- 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。
6- 它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
7- UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。
8- 主要参数
9  1 波特率
10  表示每秒钟传送的码元符号的个数
11  2 报文格式
12  起始位(1bit)+ 数据位(5-8bit)+ 奇偶校验位(1bit)+ 停止位(1,1.5,2bit)
13
14## 接口说明
15
16### 包含头文件:
17
18```c
19#include "lz_hardware.h"
20```
21
22#### 1. UART设备初始化接口
23
24```c
25unsigned int UartIoInit(UartBusIo io);
261) 参数说明:
27    io:  UART设备IO管脚配置
282) 返回值:
29    成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
30```
31
32#### 2. UART设备初始化接口
33
34```c
35unsigned int LzUartInit(unsigned int id, UartAttribute *param);
361) 参数说明:
37    id:  UART总线id
38    param:UART配置信息
392) 返回值:
40    成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
41```
42
43#### 3. UART设备释放接口:
44
45```c
46unsigned int LzUartDeinit(unsigned int id);
471) 参数说明:
48    id:UART总线id
492) 返回值:
50    成功返回LZ_HARDWARE_SUCCESS, 出错返回错误码
51```
52
53#### 4. UART写数据:
54
55```c
56unsigned int LzUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);
571) 参数说明:
58    id:      UART总线id
59    data:     写入数据
60    dataLen:  写入数据长度
612) 返回值:
62    成功返回写入长度 失败返回 0
63```
64
65#### 5. UART读数据:
66
67```c
68unsigned int LzUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
691) 参数说明:
70    id:      UART总线id
71    data:     写入数据
72    dataLen:  写入数据长度
732) 返回值:
74    成功返回读取长度, 失败返回 0
75```
76
77## 使用实例
78
79```c
80#include "lz_hardware.h"
81#define UART_TAG "UART0"
82
83#define UART_ID   0
84UartBusIo g_uart0m0 = {
85    .rx   = {.gpio = GPIO0_PB6,    .func = MUX_FUNC2, .type = PULL_KEEP, .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},
86    .tx   = {.gpio = GPIO0_PB7,    .func = MUX_FUNC2, .type = PULL_KEEP, .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},
87    .ctsn = {.gpio = INVALID_GPIO, .func = MUX_FUNC4, .type = PULL_UP,   .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},
88    .rtsn = {.gpio = INVALID_GPIO, .func = MUX_FUNC4, .type = PULL_UP,   .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},
89    .id = FUNC_ID_UART0,
90    .mode = FUNC_MODE_NONE,
91};
92
93UartAttribute g_uart0attr = {
94    .baudRate = 115200,
95    .dataBits = UART_DATA_BIT_8,
96    .parity   = UART_PARITY_NONE,
97    .stopBits = UART_STOP_BIT_1,
98};
99
100unsigned int uart_sample()
101{
102    unsigned int ret = LZ_HARDWARE_SUCCESS;
103    unsigned char buf[128] = {0};
104
105    //初始化uart
106    if (UartIoInit(g_uart0m0) != LZ_HARDWARE_SUCCESS)
107        return LZ_HARDWARE_FAILURE;
108    if (LzUartInit(UART_ID, &g_uart0attr) != LZ_HARDWARE_SUCCESS)
109        return LZ_HARDWARE_FAILURE;
110
111    while(1)
112    {
113        //读取串口数据
114        ret = LzUartRead(UART_ID, buf, 128);
115        if (ret)
116        {
117            LZ_HARDWARE_LOG(UART_TAG, "%s:uart0 read  cnt:%d", __func__, ret);
118            //发送串口数据
119            ret = LzUartWrite(UART_ID, buf, ret);
120            if (ret){
121                LZ_HARDWARE_LOG(UART_TAG, "%s:uart0 write cnt:%d", __func__, ret);
122                break;
123            }
124        }
125        usleep(10000);
126    }
127    if (LzUartDeinit(UART_ID) != LZ_HARDWARE_SUCCESS)
128        return LZ_HARDWARE_FAILURE;
129
130    LzGpioDeinit(g_uart0m0.tx.gpio);
131    LzGpioDeinit(g_uart0m0.rx.gpio);
132
133    return LZ_HARDWARE_SUCCESS;
134}
135```
136