• Home
Name Date Size #Lines LOC

..--

BUILD.gnD12-May-2024840 2219

README.mdD12-May-20243.4 KiB12792

uart_example.cD12-May-20242.6 KiB9955

README.md

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![](../../docs/figures/B6_basic_uart/E53InterfaceCircuit.png "E53接口电路")
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