前言
Arduino开发板因为搭载的I/O资源较少,所以通常会采用串行通信方式。其中Arduino硬件集成了串口、IIC、SPI三种常见的通信方式,可以与具有相应通信接口的各种设备通信。这一章先介绍一下串口通信。
参考:CSDN博客 【STM32】串口通信基本原理(超基础、详细版)—— Yngz_Miao
硬件串口通信
- 串口也被称为UART(Universal Asynchronous Receiver Transmitter,通用异步串行收发器)接口。两个设备在进行串口通信时,需要交叉相连发送端(TxD)和接收端(RxD),共用电源地线(GND),这也意味着通常一个串口只能连接一个设备进行通信。
- Arduino Mega2560开发板可以使用USB接口与电脑相连,使用的是默认的Serial串口,同时这块开发板还集成了额外的三个串口,TX和RX脚定义成从14脚起至19脚,也就是Mega2560作为下位机控制板除了和电脑上位机串口通信之外,还可以再和三个外部设备进行串口通信。
- 硬件串口通信是指直接利用Arduino开发板上集成好的串口来进行通信,使用到了Arduino核心库里的HardwareSerial类,并且是默认被包含,无需include调用。它主要使用到的一些函数如下所示:
1. Serial.available()
获取到串口缓冲区接收到的字节数,最多可保存64Bytes
2. Serial.begin(speed)
初始化串口,可配置串口的各项参数。speed:波特率
3. Serial.find(target)
从串口缓冲区读取数据,直至读到指定的字符串。target:需要搜寻的字符串或字符
4. Serial.flush()
等待正在发送的数据发送完成。早期版本里可用来清空接收缓冲区。
5. Serial.peek()
返回一字节的数据,但不会从接收缓冲区删除该数据
6. Serial.print(val, format)
将数据以ASCII码形式输出。val:需要输出的数据 format:数据输出的格式
7. Serial.read()
从串口读取数据,每读取一个字节,就会从接收缓冲区移除一字节的数据。
8. Serial.readBytes(buffer, length)
从接收缓冲区读取指定长度的字符,并将其存入一个数组。buffer:用于存储数据的数组(char[]或者byte[]) length:需要读取的字符长度