• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# USB串口配置管理
2
3<!--Kit: Basic Services Kit-->
4<!--Subsystem: USB-->
5<!--Owner: @hwymlgitcode-->
6<!--Designer: @w00373942-->
7<!--Tester: @dong-dongzhen-->
8<!--Adviser: @w_Machine_cc-->
9
10## 简介
11
12USB串口配置管理中,波特率、数据位、校验位和停止位是串口通信协议的核心参数,它们共同定义了数据传输的格式和规则。通过合理配置这些参数,可以显著提升串口通信的可靠性和效率。
13
14### 基本概念
15
16在进行USB串口开发时,开发者应了解以下基本概念:
17
18- 波特率(Baud Rate)
19
20  波特率表示串口设备每秒传输的符号数(符号即二进制位,包括数据位、起始位、停止位、校验位),单位为Baud(波特),例如9600 Baud表示每秒传输9600个符号。收发双方必须使用相同的波特率,否则数据无法正确解析。
21
22
23- 数据位(Data Bit)
24
25  数据位表示每个数据包中实际传输的有效二进制位数,决定了单个字符的数据容量。常见的取值包括5位、6位、7位和8位。数据位决定单次传输的信息量,数据位越多,单次传输信息量越大,但需更多时间同步。
26
27
28- 校验位(Parity Bit)
29
30  校验位是附加在数据帧中的1位二进制值,根据数据位的内容按特定规则生成。常见的有,奇校验(Odd)数据位+校验位中“1”的总数为奇数,偶校验(Even)数据位+校验位中“1”的总数为偶数,无校验(None)不添加校验位。校验位通过验证数据位中“1”的数量,判断数据在传输过程中是否发生位翻转、噪声干扰等错误,增加校验位会略微降低传输效率,但能提高容错性。
31
32
33- 停止位(Stop Bit)
34
35  停止位位于数据帧末尾,是逻辑高电平信号,用于标识一个字符(数据包)传输的结束。典型长度有1位和2位(实际开发中1位最常用,2位多用于抗干扰场景)。其核心作用是为接收端提供时序同步容错空间,并确保数据完整性。
36
37
38## 环境准备
39
40请参考USB串口通信服务开发概述[环境准备](usbSerial-overview.md#环境准备)。
41
42## 开发指导
43
44### 接口说明
45
46| 接口名                                                                          | 描述        |
47|------------------------------------------------------------------------------|-----------|
48| getAttribute(portId: number): Readonly&lt;SerialAttribute&gt;                      | 获取串口设备配置。 |
49| setAttribute(portId: number, attribute: SerialAttribute): void               | 设置串口设备配置。 |
50
51### 开发步骤
52
53开发者可以通过上述接口获取和设置串口的配置:
54
55> **说明:**
56>
57> 以下示例代码只是获取和设置串口的配置的必要流程,需要放入具体的方法中执行。
58
591. 导入模块。
60
61    ```ts
62    // 导入serialManager模块。
63    import { serialManager } from '@kit.BasicServicesKit';
64    ```
65
662. 获取设备列表。
67
68    ```ts
69    // 获取连接主设备的USB设备列表
70    let portList: serialManager.SerialPort[] = serialManager.getPortList();
71    console.info(`usbSerial portList: ${portList}`);
72    if (portList === undefined || portList.length === 0) {
73      console.error('usbSerial portList is empty');
74      return;
75    }
76    ```
77
783. 获取设备操作权限。
79
80    ```ts
81    // 此处对列表中的第一台USB设备判断是否拥有访问权限
82    // 函数名仅作为示例,实际需要与业务结合命名
83    async function serialDefault() {
84      let portId: number = portList[0].portId;
85      if (!serialManager.hasSerialRight(portId)) {
86        await serialManager.requestSerialRight(portId).then(result => {
87          if(!result) {
88            // 没有访问设备的权限且用户不授权则退出
89            console.error('The user does not have permission to perform this operation');
90            return;
91          }
92        });
93      }
94    }
95    ```
96
974. 根据串口打开设备。
98
99    ```ts
100    try {
101      serialManager.open(portId)
102      console.info(`open usbSerial success, portId: ${portId}`);
103    } catch (error) {
104      console.error(`open usbSerial error: ${error}`);
105    }
106    ```
107
1085. 获取和修改串口配置。
109
110    ```ts
111    // 获取串口配置
112    try {
113      let attribute: serialManager.SerialAttribute = serialManager.getAttribute(portId);
114      if (attribute === undefined) {
115        console.error('getAttribute usbSerial error, attribute is undefined');
116      } else {
117        console.info(`getAttribute usbSerial success, attribute: ${attribute}`);
118      }
119    } catch (error) {
120      console.error(`getAttribute usbSerial error: ${error}`);
121    }
122
123    // 设置串口配置
124    try {
125      let attribute: serialManager.SerialAttribute = {
126        baudRate: serialManager.BaudRates.BAUDRATE_9600,
127        dataBits: serialManager.DataBits.DATABIT_8,
128        parity: serialManager.Parity.PARITY_NONE,
129        stopBits: serialManager.StopBits.STOPBIT_1
130      }
131      serialManager.setAttribute(portId, attribute);
132      console.info(`setAttribute usbSerial success, attribute: ${attribute}`);
133    } catch (error) {
134      console.error(`setAttribute usbSerial error: ${error}`);
135    }
136    ```
137
138### 调测验证
139
1401. 准备一根USB转串口线缆,线缆的USB接口连接到OpenHarmony设备USB端口(该端口需支持USB转串口),线缆的串口接口连接到目标设备的串口上。
1412. 在OpenHarmony设备上执行上述示例。
1423. 返回`getAttribute usbSerial success`和`setAttribute usbSerial success`表示相关接口调用成功,可以查看当前串口的配置。
143