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 58## 硬件设计 59本案例将用 BearPi-HM_Nano 开发板 E53 接口的 UART 作为测试,如原理图所示第 18 和 19 脚分别为 TXD 和 RXD ,连接了主控芯片的 GPIO_6 和 GPIO_5 ,所以在编写软件的时候需要将 GPIO_6 和 GPIO_5 分别复用为 TXD 和 RXD 。 60 61 62 63## 软件设计 64 65**主要代码分析** 66 67这部分代码为UART初始化的代码,首先要在 `uart_attr` 结构体这配置波特率、数据位、停止位、奇偶检验位,然后通过 `IoTUartInit()` 函数对串口1进行配置。 68 69```c 70IotUartAttribute uart_attr = { 71 72 //baud_rate: 9600 73 .baudRate = 9600, 74 75 //data_bits: 8bits 76 .dataBits = 8, 77 .stopBits = 1, 78 .parity = 0, 79}; 80 81//Initialize uart driver 82ret = IoTUartInit(WIFI_IOT_UART_IDX_1, &uart_attr); 83if (ret != IOT_SUCCESS) { 84 printf("Failed to init uart! Err code = %d\n", ret); 85 return; 86} 87``` 88这部分的代码主要实现通过 `IoTUartWrite()` 函数在串口1发送一串数据,然后通过 `IoTUartRead()` 函数将数据读回来,并通过 `debug` 串口打印出来。 89```c 90//send data through uart1 91IoTUartWrite(WIFI_IOT_UART_IDX_1, (unsigned char *)data, strlen(data)); 92 93//receive data through uart1 94IoTUartRead(WIFI_IOT_UART_IDX_1, uart_buff_ptr, UART_BUFF_SIZE); 95 96printf("Uart1 read data:%s\n", uart_buff_ptr); 97``` 98 99 100## 编译调试 101 102### 修改 BUILD.gn 文件 103 104 105修改 `device\bearpi\bearpi_hm_nano\app` 路径下 BUILD.gn 文件,指定 `uart_example` 参与编译。 106 107```r 108#"B1_basic_led_blink:led_example", 109#"B2_basic_button:button_example", 110#"B3_basic_pwm_led:pwm_example", 111#"B4_basic_adc:adc_example", 112#"B5_basic_i2c_nfc:i2c_example", 113"B6_basic_uart:uart_example", 114``` 115 116 117### 运行结果 118 119示例代码编译烧录代码后,按下开发板的RESET按键, `将开发板上E53接口的UART_TX和UART_RX用杜邦线短接` 通过串口助手查看日志,串口1实现自发自收。 120```c 121======================================= 122*************UART_example************** 123======================================= 124Uart1 read data:Hello, BearPi! 125======================================= 126*************UART_example************** 127======================================= 128Uart1 read data:Hello, BearPi! 129``` 130 131