1# BearPi-HM_Nano开发板基础外设开发——UART数据读写 2本示例将演示如何在BearPi-HM_Nano开发板上使用UART进行数据的收发。 3 4## UART API分析 5本示例主要使用了以下API完成UART数据读写。 6### IoTUartInit() 7```c 8unsigned int IoTUartInit(unsigned int id, const IotUartAttribute *param); 9 10``` 11 **描述:** 12 13配置一个UART设备。 14**参数:** 15 16|参数名|描述| 17|:--|:------| 18| id | UART端口号。 | 19| param |表示基本UART属性。| 20 21### IoTUartWrite() 22```c 23int IoTUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen); 24 25``` 26 **描述:** 27将数据写入UART设备。 28 29 30**参数:** 31 32|参数名|描述| 33|:--|:------| 34| id | UART端口号。 | 35| data |表示指向待写入的数据的起始地址的指针。| 36| dataLen |表示待写入数据的长度。| 37 38### IoTUartRead() 39```c 40int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen); 41``` 42 **描述:** 43 44从UART设备读取数据。 45 46 47**参数:** 48 49|参数名|描述| 50|:--|:------| 51| id | UART端口号。 | 52| data |表示指向要读取的数据的起始地址的指针。| 53| dataLen |表示要读取数据的长度。| 54 55 56## 硬件设计 57本案例将用 BearPi-HM_Nano 开发板 E53 接口的 UART 作为测试,如原理图所示第 18 和 19 脚分别为 TXD 和 RXD ,连接了主控芯片的 GPIO_6 和 GPIO_5 ,所以在编写软件的时候需要将 GPIO_6 和 GPIO_5 分别复用为 TXD 和 RXD 。 58 59 60 61## 软件设计 62 63**主要代码分析** 64 65这部分代码为UART初始化的代码,首先要在 `uart_attr` 结构体中配置波特率、数据位、停止位、奇偶检验位,然后通过 `IoTUartInit()` 函数对串口1进行配置。 66 67```c 68IotUartAttribute uart_attr = { 69 70 //baud_rate: 9600 71 .baudRate = 9600, 72 73 //data_bits: 8bits 74 .dataBits = 8, 75 .stopBits = 1, 76 .parity = 0, 77}; 78 79//Initialize uart driver 80ret = IoTUartInit(WIFI_IOT_UART_IDX_1, &uart_attr); 81if (ret != IOT_SUCCESS) { 82 printf("Failed to init uart! Err code = %d\n", ret); 83 return; 84} 85``` 86这部分的代码主要实现通过 `IoTUartWrite()` 函数在串口1发送一串数据,然后通过 `IoTUartRead()` 函数从串口1将数据读回来,并通过 `debug` 串口打印出来。 87```c 88//send data through uart1 89IoTUartWrite(WIFI_IOT_UART_IDX_1, (unsigned char *)data, strlen(data)); 90 91//receive data through uart1 92IoTUartRead(WIFI_IOT_UART_IDX_1, uart_buff_ptr, UART_BUFF_SIZE); 93 94printf("Uart1 read data:%s\n", uart_buff_ptr); 95``` 96 97 98## 编译调试 99 100### 修改 BUILD.gn 文件 101 102 103修改 `device\board\bearpi\bearpi_hm_nano\app` 路径下 BUILD.gn 文件,指定 `uart_example` 参与编译。 104 105```r 106#"B1_basic_led_blink:led_example", 107#"B2_basic_button:button_example", 108#"B3_basic_pwm_led:pwm_example", 109#"B4_basic_adc:adc_example", 110#"B5_basic_i2c_nfc:i2c_example", 111"B6_basic_uart:uart_example", 112``` 113 114### 运行结果 115 116示例代码编译烧录后,按下开发板的RESET按键,通过串口助手查看日志,串口1实现自发自收。`将开发板上E53接口的UART_TX和UART_RX用杜邦线短接或断开`可以实时观察`debug`串口的打印信息。 117```c 118======================================= 119*************UART_example************** 120======================================= 121Uart1 read data:Hello, BearPi! 122======================================= 123*************UART_example************** 124======================================= 125Uart1 read data:Hello, BearPi! 126``` 127