Arduino:4-串口通讯

串口引脚

Arduino有两个引脚,引脚0引脚1专门用于串口通讯,引脚0标注RX表示接收串口信息,引脚1标注TX表示发送串口信息。

CleanShot 2023-10-04 at 22.29.54@2x

RXTX工作时,Arduino开发板上对应的两个LED灯会闪烁。

CleanShot 2023-10-04 at 22.31.43@2x

TTL协议

Arduino的串口通讯使用TTL协议,每次发送与读取以byte为单位,通过双方提前预设的波特率进行解析,波特率代表了每秒钟的bit数,如波特率9600,即代表每秒9600个bit位。以此可以知道每个bit位的持续时间,从而将高低电平转为二进制信息。

CleanShot 2023-10-04 at 22.37.14@2x

Arduino接收,读取串口数据

1
2
3
4
5
6
7
void loop() {
// write your code here
if (Serial.available()){
char c = Serial.read();
Serial.print(c);
}
}
  • Arduino的串口数据接收到后会临时存放到缓存中等待读取,调用Serial.available()Serial.read()可以读取到缓存中的串口数据。

  • Serial.available():返回缓存中接收到的数据byte数,如果为空返回0。

  • Serial.read():从缓存中取出一个byte的信息。

模拟串口通信

Arduino上只有一对串口通信引脚,如果有更多的串口通信设备,可以连接到其他数字引脚上通过软件模拟串口通信。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <SoftwareSerial.h>

// 使用数字引脚2作为RX,引脚3作为TX
SoftwareSerial SFSerial(2, 3);

void setup()
{
// put your setup code here, to run once:
SFSerial.begin(9600);
}

void loop()
{
// put your main code here, to run repeatedly:
SFSerial.print("AT");
}