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