1.串口配置
Serial.begin(speed)、Serial.begin(speed, config)函数对串口进行初始化配置
speed:波特率,300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200
config:数据位、校验位、停止位配置,配置选项如下表
config可选配置 | 数据位 | 校验位 | 停止位 |
---|---|---|---|
SERIAL_5N1 | 5 | 无 | 1 |
SERIAL_6N1 | 6 | 无 | 1 |
SERIAL_7N1 | 7 | 无 | 1 |
SERIAL_8N1(默认配置) | 8 | 无 | 1 |
SERIAL_5N2 | 5 | 无 | 2 |
SERIAL_6N2 | 6 | 无 | 2 |
SERIAL_7N2 | 7 | 无 | 2 |
SERIAL_8N2 | 8 | 无 | 2 |
SERIAL_5E1 | 5 | 偶 | 1 |
SERIAL_6E1 | 6 | 偶 | 1 |
SERIAL_7E1 | 7 | 偶 | 1 |
SERIAL_8E1 | 8 | 偶 | 1 |
SERIAL_5E2 | 5 | 偶 | 2 |
SERIAL_6E2 | 6 | 偶 | 2 |
SERIAL_7E2 | 7 | 偶 | 2 |
SERIAL_8E2 | 8 | 偶 | 2 |
SERIAL_5O1 | 5 | 奇 | 1 |
SERIAL_6O1 | 6 | 奇 | 1 |
SERIAL_7O1 | 7 | 奇 | 1 |
SERIAL_8O1 | 8 | 奇 | 1 |
SERIAL_5O2 | 5 | 奇 | 2 |
SERIAL_6O2 | 6 | 奇 | 2 |
SERIAL_7O2 | 7 | 奇 | 2 |
SERIAL_8O2 | 8 | 奇 | 2 |
2.串口相关函数
2.1输入输出函数
-
输入函数:Serial.read(),每次都会返回一个字节的数据,这个返回值便是当前串口读取到的数据。
-
输出函数:Serial.print(val) 或Serial.println(val)可以向串口发送数据,println在发送完数据后,在发送一组回车换行符
void setup() {
// 初始化串口
Serial.begin(9600);
}
void loop() {
// 读取输入的信息
char ch=Serial.read();
// 输出信息
Serial.print(ch);
delay(1000);
}
2.2其它函数
函数名 | 描述 | 参数 | 返回 |
available() | 获取串口接收到的数据个数,即获取串口接收缓冲区的字节数,缓冲区最多保存64bytes的数据 | 无 | 可读取的字节数 |
end() | 结束串口通信 | 无 | 无 |
find(target) | 从缓冲区读取数据,直到读取到指定的字符串 | target:字符或字符串 | Boolean型: True:找到 False:没有找到 |
findUntil(target, terminal) | 从缓冲区读取数据,直到读取到指定的字符串或停止符 | target : 需要搜索的字符串或字符 terminal : 停止符 | bool |
flush() | 等待正在发送的数据发送完成 | 无 | 无 |
parseFloat() | 从缓冲区返回第一个float型有效数据 | 无 | float型数据 |
parseInt() | 从缓冲区返回第一个intt型有效数据 | 无 | int型数据 |
peek() | 从缓冲区返回一个字节数据,但是与read()不同的是,peek读取数据后不会在缓冲区删除改数据 | 无 | 进入接受缓冲区的第一个字节的数据;如果没有可读数据,则返回-1 |
readBytes(buffer, length) | 从接收缓冲区读取指定长度的字符,并存储到数组中 | buffer: 用于存储数据的数组(char[]或者byte[]) length : 需要读取的字符长度 | 读到的字节数;如果没有接收到有效的数据,则返回0。 |
readBytesUntil(character, buffer, length) | 从接收缓冲区读取指定长度的字符,并存储到数组中。如果读取到停止位或者超时,将退出此函数 | character : 停止符 buffer: 用于存储数据的数组( char[] 或者byte[] ) length : 需要读取的字符长度 | 读到的字节数;如果没有接收到有效的数据,则返回0。 |
setTimeout(time) | 用于设置Serial.readBytesUntil() 和Serial.readBytes() 的等待串口数据时间。 | time:超时时间,单位毫秒 | 无 |
Serial.write(val) Serial.write(str) Serial.write(buf, len) | 以字节的形式输出数据到串口 | val: 发送的数据 str: string型的数据 buf: 数组型的数据 len: 缓冲区的长度 | 输出的字节数 |
3.软串口
软串口需要先声明SoftwareSerial.h头文件,使用SoftwareSerial(rxPin, txPin)定义一个对象,rxPin和txPin为引脚编号,该对象的很多函数与硬件串口类似。
listen()
开启软串口监听状态。 Arduino Uno在同一时间仅能监听一个软串口,当你需要监听某一软串口时,需要该对象调用这个函数开启监听功能。 语法: mySerial.listen() 参数: mySerial:用户自定义的软件串口对象 返回值: 无
isListening()
监测软串口是否正在监听状态。 语法: mySerial.isListening() 参数: mySerial:用户自定义的软件串口对象 返回值: Boolean型 True:正在监听 False:没有监听
end()
停止监听软串口。 语法: mySerial. end() 参数: mySerial:用户自定义的软件串口对象 返回值: Boolean型 True:关闭监听成功 False:关闭监听失败
overflow()
检测缓冲区是否溢出。 语法: mySerial.overflow() 参数: mySerial:用户自定义的软件串口对象 返回值: Boolean型 True:溢出 False:没有溢出
示例程序
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
void setup()
{
Serial.begin(115200);
while (!Serial) {
}
Serial.println("Goodnight moon!");
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}