Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍

@TOArduino 串口通讯参考笔记 - Serial 类库及相关函数介绍 C

声明:

本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 saner686 及包含原文出处地址 https://editor.csdn.net/md?not_checkout=1&articleId=128343606

未经本人许可,所有文章均不得用于商业用途。

前言

Arduino板通过串口(称为UART或USART串口)与其它设备进行通讯。

所有Arduino板至少有一个串口,数字引脚位为 0(RX) 和1(TX)

Arduino Mega 有三个额外的 TTL串口如下:

Serial1:19(Rx) 和 18(Tx)
Serial2:17(Rx) 和 16(Tx)
Serial3:15(Rx) 和 14(Tx)
Arduino Due 有三个额外的3.3V TTL串口,额外串口引脚排布和 Arduino Mega 相同

Arduino Leonardo 串口 Serial1直接通过 TTL 5V 通讯,占用引脚 0(Rx)和 1(Tx)

Arduino 串口通讯会用到 Stream 这个类

Stream 类是二进制数据或者字符串数据流传输的基础类,不能被直接调用,但可以被继承。

许多库包含了 Stream 类,例如 Serial;Wire;Enternet Client;Enternet Setver;SD;这些都是很常用的重要类库

Stream 类

Stream 类 包含下列函数:

available()
read()
flush()
find()
findUntil()
peek()
readBytes()
readBytesUntil()
readString()
readStringUntil()
parseInt()
parseFloat()
setTimeout()
Stream 的这些函数 都会被 Serial 库继承。

available()
说明(Description):
  该函数 available() 获取数据流中接收到的字节数
返回值(Returns):
  返回值是 int 类型

read()
说明(Description):
  该函数 read() 获取数据流中第一个字节数据,获取数据后会清除当前字节数据,与peek()函数有区别
返回值(Returns):
  返回值是 读取数据字符的第一个字节(8bit)

flush()
说明(Description):
  该函数 flush() 清除数据流所有未向外发送的数据。
返回值(Returns):
  bool 类型

find()
说明(Description):
  该函数 find() 从数据流中查找目标字符串,找到目标字符串后返回值 = true,超时则返回值 = false
返回值(Returns):
  bool 类型

findUntil()
说明(Description):
  该函数 findUntil() 从数据流中读取目标字符串或者终止目标字符串,找到目标字符串后返回值 = true,超时则返回值 = false
语法(Syntax):
  stream.findUntil(target, terminal)
  target:要搜索的字符串
  terminal:终止目标字符串
返回值(Returns):
  bool 类型

peek()
说明(Description):
  该函数 peek() 从数据流中读取当前的一个字节,不会清除数据流中当前字节数据,与 read() 函数有区别。
返回值(Returns):
  当前缓存区数据流的第一个字节数据,如果缓存区无数据时返回 -1

readBytes()
说明(Description):
  该函数 readBytes() 从数据流中读取确定字节的数据到缓存区,读取确定长度数据或超时时终止
语法(Syntax):
  stream.readBytes(buffer, length)
  stream:从 Stream 类 继承的实例
  buffer:存放数据的缓存区(可以是 char[] 或 byte[] 这样的数组)
  length:存放的字节数
返回值(Returns):
  已经存放在缓存区中的字节数

readBytesUntil()
说明(Description):
  该函数 readBytesUntil() 从数据流中读取确定字节的数据到指定缓存地址,读取确定长度数据、或读取到终止字符、或超时时终止和 readBytes() 相比多了终止字符串
语法(Syntax):
  stream.readBytesUntil(character, buffer, length)
  stream:从 Stream 类 继承的实例
  character:终止字符(char 类型)
  buffer:存放数据的指定缓存地址(可以是 char[] 或 byte[] 这样的数组)
  length:存放的字节数(int 类型)
返回值(Returns):
  已经存放在缓存区中的字节数

readString()
说明(Description):
  该函数 readString() 从数据流中读取字符到字符串中,超时时终止
返回值(Returns):
  读取到的字符串(string)

readStringUntil()
说明(Description):
  该函数 readString() 从数据流中读取字符到字符串中,遇到终止字符,或超时时终止
语法(Syntax):
  stream.readString(terminator)
  terminator:终止字符
返回值(Returns):
  读取到的字符串(string)

parseInt()
说明(Description):
  该函数 parseInt() 从数据流中读取第一个 长整型数(long),
语法(Syntax):
返回值(Returns):
  长整型(long)

parseFloat()
说明(Description):
  该函数 parseInt() 从数据流中读取第一个有效的浮点数(float),
语法(Syntax):
  stream.parseFloat(list)
  list:检查的数据流
返回值(Returns):
  浮点数(float)

setTimeout()
说明(Description):
  该函数 setTimeout() 设置等待数据流通讯超时时间,毫秒为单位
语法(Syntax):
  stream.setTimeout(time)
  time:毫秒为单位的时间,长整型(long)

Serial 类

Serial 类 用于对串口数据流的读写。
Serial 继承 Stream 类,继承的函数方法参考 Stream 类;同时增加了几个新的函数,所有方法如下:

if (Serial)  
available()
availableForWrite()
begin()
end()
find()
findUntil()
flush()
parseFloat()
parseInt()
peek()
print()
println()
read()
readBytes()
readBytesUntil()
readString()
readStringUntil()
setTimeout()
write()
serialEvent()

begin()
说明(Description):
  该函数 begin() 设置串口数据传输的波特率。
语法(Syntax):
  Serial.begin(speed)
  Serial.begin(speed, config)
Arduino Mega Only:
  Serial1.begin(speed)
  Serial2.begin(speed)
  Serial3.begin(speed)
  Serial1.begin(speed, config)
  Serial2.begin(speed, config)
  Serial3.begin(speed, config)
  speed:波特率 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200
  config:通讯格式 5N1, 6N1, 7N1, 8N1(默认), 5N2, 6N2, 7N2, 8N2, 5E1, 6E1, 7E1, 8E1, 5E2, 6E2, 7E2, 8E2, 5O1, 6O1, 7O1, 8O1, 5O2, 6O2, 7O2, 8O2,
返回值(Returns):
  nothing 无

end()
说明(Description):
  该函数 end() 禁用串口。禁用串口后,原串口所占用引脚被当做一般输入输出使用。
语法(Syntax):
  Serial.end()
返回值(Returns):
  nothing 无

print()
说明(Description):
  该函数 print() 将数据流通过串口以 ASCII 文本形式输出输出。
例子:
Serial.print(78) gives “78”  以 ASCII 码形式以此输出 “7” 和 “8”
Serial.print(1.23456) gives “1.23”  浮点数默认只输出小数点后两位
Serial.print(‘N’) gives “N” 
Serial.print(“Hello world.”) gives “Hello world.”
Serial.print(78, BIN) gives “1001110”
Serial.print(78, OCT) gives “116”
Serial.print(78, DEC) gives “78”
Serial.print(78, HEX) gives “4E”
Serial.print(1.23456, 0) gives “1”
Serial.println(1.23456, 2) gives “1.23”
Serial.println(1.23456, 4) gives “1.2346”
语法(Syntax):
  Serial.print(val)
  Serial.print(val, format)
  val:需要输出的值,支持任何类型数据
  format:指定数据格式
返回值(Returns):
  返回 print() 函数输出的字符数据个数,长整型(long)

println()
说明(Description):
  该函数 println() 将数据流通过串口以 ASCII 文本形式输出输出,并且在结尾输出换行符 (ASCII 13, 即 ‘\r’) 。
  参考 print() 函数
语法(Syntax):
  Serial.println(val)
  Serial.println(val, format)
  val:需要输出的值,支持任何类型数据
  format:指定数据格式
返回值(Returns):
  返回 println() 函数输出的字符数据个数,长整型(long)

write()
说明(Description):
  该函数 write() 将数据流通过串口以 二进制数据的形式发出,与 print() 函数是有区别的
语法(Syntax):
  Serial.write(val)
  Serial.write(str)
  Serial.write(buf, len)
  Arduino Mega 允许使用下列串口: Serial1, Serial2, Serial3
  val:单个字节的值
  str:一连串字节的字符串
  buf:定义的数组
  len:指定的数组长度
返回值(Returns):
  返回 write() 函数通过写入串口的字节数

serialEvent()
说明(Description):
  该函数 serialEvent() 为串口中断事件函数,当串口有数据时被调用。可使用 Serial.read() 函数捕捉数据。
语法(Syntax):
  void serialEvent(){
    //statements
   }
  Arduino Mega 允许使用 serialEvent1(), serialEvent2(), serialEvent3()
  statements:任何有效的语句

你可能感兴趣的:(单片机,stm32,物联网,嵌入式硬件)