UART-串口

本文介绍UART-串口支持函数的参数说明及示例。

硬件平台

产品型号

是否支持

硬件类型

固件版本号

HaaS600Kit

开发板

4.0.1

HaaS510

DTU

4.0.1

HaaS520

DTU

4.0.1

HaaS530

DTU

4.0.1

HaaS531

DTU

4.0.1

HaaS632-LT32V

模组

4.0.1

HaaS600-EC600S

模组

4.0.1

HaaS600-EC600N

模组

4.0.1

HaaS600-EC600U

模组

4.0.1

HaaS600-N715

模组

4.0.1

open(Object options)

打开串口,创建UART实例。

入参

Object类型,属性如下:

属性

类型

是否必填

描述

id

String

app.json中定义的UART ID名称。

mode

String

  • 配置为poll:表示为轮询主动读模式。

  • 配置为空:表示为中断监听读取模式

返回

UART串口实例,为空代表创建失败。

write(Uint8Array|String data)

发送串口数据。该函数为阻塞函数,串口发送完成后才会返回。

入参

参数

类型

是否必填

描述

data

Uint8Array或String

需要发送到串口的数据。

返回

无。

read(Uint8Array data, Number bytes, Number timeout)

轮询模式主动读取指定bytes的串口数据,读取到的串口数据为Uint8Array类型,仅串口配置为poll模式时生效。

入参

参数

类型

是否必填

描述

data

Uint8Array

保存从串口读取的数据。

bytes

Number

单次读取数据的最大长度,超出长度范围的数据在下次读取时返回。

timeout

Number

轮询读超时等待时间。

返回

读取到的串口数据,Uint8Array类型,如果没有数据,则返回空数组。

on(String event, Function cb)

中断监听读取模式,串口配置为poll模式该函数无效。当串口接收到新数据时,执行回调函数cb

入参

参数

类型

是否必填

描述

event

String

目前支持'data'事件。

cb

Function

回调函数function(onData) {}

回调函数cb:

参数

类型

是否必填

描述

onData

ArrayBuffer

单次最大接收数据长度为2048 Byte,

超出长度范围的数据分包返回。

返回

无。

close()

关闭串口实例。

入参

无。

返回

无。

示例代码

板级配置

板级详细配置说明,请参见app.json-全局配置文件

{
    "version": "1.0.0",
    "io": {
        "mainUART":{
            "type":"UART",
            "port":2,
            "dataWidth":8,
            "baudRate":115200,
            "stopBits":1,
            "flowControl":"disable",
            "parity":"none"
        }
    },
    "debugLevel": "DEBUG",
    "repl": "disable"
}

应用脚本

/* 加载 uart 模块 */
import * as uart from "uart";

/* ArrayBuffer 转字符串 */
function ArrayBufferToString(buf) {
  return String.fromCharCode.apply(null, new Uint8Array(buf));
}

/* Uint8Array 转字符串 */
function Uint8ArrayToString(arrayData) {
  var dataString = "";
  for (var i = 0; i < arrayData.length; i++) {
    dataString += String.fromCharCode(arrayData[i]);
  }
  return dataString;
}

/* ArrayBuffer 转 Uint8Array */
function ArrayBufferToUint8Array(buf) {
    return Array.prototype.slice.call(new Uint8Array(buf));
}

/* 创建串口实例 serial */
var serial = uart.open({
  id: "mainUART",
  mode: "poll",
});

/* msgArray ASC-II: ABCDabcd++ */
var msgArray = [0x41, 0x42, 0x43, 0x44, 0x61, 0x62, 0x63, 0x64, 0x2b, 0x2b];
var msgStr = "this is amp js app uart test\r\n";

/* 串口发送数据 */
for (let index = 0; index < 5; index++) {
  sleepMs(1000);
  serial.write(msgArray);
  serial.write(msgStr);
}

/* 串口轮询读取串口数据,仅配置为 poll 模式时生效 */
setInterval(() => {
  var data = [];
  serial.read(data, 2048, 100);
  if (data.length != 0) {
    console.log(data.length);
    console.log(Uint8ArrayToString(data));
  }
}, 100);

/* 串口中断读取串口数据,配置为 poll 模式时无效 */
serial.on("data", function (onData) {
  /* 打印出串口接收到的数据,数据类型为 ArrayBuffer,先转为字符串后再打印 */
  console.log("uart on: " + ArrayBufferToString(onData));

  /* 串口把接收到的数据直接回发出去 */
  serial.write(ArrayBufferToUint8Array(onData));

  /* 如果串口接收到 "exit" 字符串,测试结束 */
  if (ArrayBufferToString(onData) === "exit") {
    console.log("uart test finish");
    /* 关闭串口实例 serial */
    serial.close();
  }
});