UART数据读写
本示例将演示如何在BearPi-HM_Nano 2开发板上使用UART进行数据的收发
一、准备工作
参考BearPi-HM_Nano_2十分钟上手教程完成开发环境搭建、代码获取等工作,以及熟悉代码的编译和烧录流程。
二、硬件设计
本案例将用 BearPi-HM_Nano 2 开发板 E53 接口的 UART 作为测试,如原理图所示第 18 和 19 脚分别为 TXD 和 RXD ,连接了主控芯片的 GPIO_8 和 GPIO_7 ,所以在编写软件的时候需要将 GPIO_8 和 GPIO_7 分别复用为 TXD 和 RXD 。

三、软件设计
主要代码分析
打开device\bearpi\bearpi_hm_nano2\app\B6_basic_uart\uart_example.c,这部分代码为UART初始化的代码,首先要在 uart_attr 结构体中配置波特率、数据位、停止位、奇偶检验位,然后通过 IoTUartInit() 函数对串口1进行配置。
IotUartAttribute uart_attr = {
// baud_rate: 115200
.baudRate = 115200,
// data_bits: 8bits
.dataBits = 8,
.stopBits = 1,
.parity = 0,
};
ret = IoTUartInit(WIFI_IOT_UART_IDX_1, &uart_attr);
if (ret != IOT_SUCCESS) {
printf("Failed to init uart! Err code = %d\n", ret);
return;
}
这部分的代码主要实现通过 IoTUartWrite() 函数在串口1发送一串数据,然后通过 IoTUartRead() 函数从串口1将数据读回来,并通过 debug 串口打印出来,注意IoTUartRead是阻塞读取固定长度数据。
// send data through uart1
IoTUartWrite(WIFI_IOT_UART_IDX_1, g_app_uart_tx_buff, UART_TRANSFER_SIZE);
usleep(5000);
// receive data through uart1
IoTUartRead(WIFI_IOT_UART_IDX_1, g_app_uart_rx_buff, UART_TRANSFER_SIZE); //阻塞读取固定长度数据
printf("Uart1 read data:%s\r\n", g_app_uart_rx_buff);
UART API分析
本示例主要使用了以下API完成UART数据读写。
IoTUartInit()
unsigned int IoTUartInit(unsigned int id, const IotUartAttribute *param);
描述:
配置一个UART设备。 参数:
| 参数名 | 描述 |
|---|---|
| id | UART端口号。 |
| param | 表示基本UART属性。 |
IoTUartWrite()
int IoTUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);
描述: 将数据写入UART设备。
参数:
| 参数名 | 描述 |
|---|---|
| id | UART端口号。 |
| data | 表示指向待写入的数据的起始地址的指针。 |
| dataLen | 表示待写入数据的长度。 |
IoTUartRead()
int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);
描述:
从UART设备读取数据。
参数:
| 参数名 | 描述 |
|---|---|
| id | UART端口号。 |
| data | 表示指向要读取的数据的起始地址的指针。 |
| dataLen | 表示要读取数据的长度。 |
四、编译调试
修改 BUILD.gn 文件
修改 device\bearpi\bearpi_hm_nano2\app 路径下 BUILD.gn 文件,指定 uart_example 参与编译。
#"B1_basic_led_blink:led_example",
#"B2_basic_button:button_example",
#"B3_basic_pwm_led:pwm_example",
#"B4_basic_adc:adc_example",
#"B5_basic_i2c_nfc:i2c_example",
"B6_basic_uart:uart_example",
运行结果
示例代码编译烧录代码后,按下开发板的RESET按键, 将开发板上E53接口的UART_TX和UART_RX用杜邦线短接 通过串口助手查看日志,串口1实现自发自收。
=======================================
*************UART_example**************
=======================================
Uart1 read data:Hello, BearPi!
=======================================
*************UART_example**************
=======================================
Uart1 read data:Hello, BearPi!
