Arduino串口不够用怎么办?

小编:芯水 更新时间:2022-08-20

Arduino UNO R3到底有几个串口呢?

如果观察板子引脚发现,只有一对串口,但是我们烧录程序时使用的也是通过串口传输的,这么说来Arduino应该是有两个串口的,为了搞明白这个问题,我特意去Arduino官网查了一下关于Arduino的原理图。

Arduino串口不够用怎么办?

原理图如下所示,通过原理图我们知道,单片机只有一对串口,但是最后分两路出去,一路连在了板子上的排针上;

另外一路通过两个发光二极管连在了一个叫做atmega的芯片上,程序通过这个芯片给单片机烧录程序。

Arduino串口不够用怎么办?

原理图如下所示,通过原理图我们知道,单片机只有一对串口,但是最后分两路出去,一路连在了板子上的排针上;

另外一路通过两个发光二极管连在了一个叫做atmega的芯片上,程序通过这个芯片给单片机烧录程序。

软串口

但是我们要使用两个串口怎么办呢?不用担心,Arduino早已为我们谋划好了一切,我们把上面Arduino板上标注的串口叫做硬串口。

除了硬串口之外,Arduino还为我们设计了一种软串口,也可以叫做虚拟串口,他是通过程序定义的一组串口,然后映射到Arduino的IO口,这样我们就可以额外的多出一组串口。

下面我们用软串口做一组小实验,经过串口1向Arduino发送数据,Arduino接收到数据之后,再把数据转送到串口2,并让其在电脑上打印出来。

程序

上述小实验的程序如下图,我们发现这个程序与我们平时所见到的程序所不同的是,第一行多了一句:#include 的语句,我们所使用的软串口全靠的这一语句。它的作用是将其它数字、模拟引脚通过程序模拟成串口通信引脚。

SoftwareSerial mySerial(8, 9);的意思是把8引脚定义为RX口,TX定义为TX口。

再下面的程序的作用是设定波特率,然后把串口1的数据发给串口2,或者把串口2的数据发给串口1

#include

SoftwareSerial mySerial(8, 9); // RX, TX

void setup()

{

Serial.begin(115200);

mySerial.begin(9600);

}

void loop()

{

if (mySerial.available())

Serial.write(mySerial.read());

if (Serial.available())

mySerial.write(Serial.read());

}

实验现象

我们通过电脑的USB串口向Arduino发送“123”,然后再让Arduino把收到的数据原封不动的发往我们的虚拟串口,并打印在屏幕上。

USB串口发送字符串“123”。

Arduino串口不够用怎么办?

虚拟串口接收到了字符串“123”

Arduino串口不够用怎么办?

Final

有人会说,一个串口就够用了,何必如此麻烦,然而实际的情况并非如此,比如说我们要用8266WiFi模块,如果把唯一一个宝贵的串口资源给了8266。

那程序不出问题还好,一旦有错,如果不再虚拟出来一对串口,我们都不知道哪里出了问题,所以软串口是我们开发者必须要掌握的。

芯板坊为您提供最全面国内外开发板资讯、评测、试用信息,包括现今的热门开发板,如树莓派,Arduino,STM32,OrangePi,Nanop pi,开源硬件等,感兴趣的电子发烧友们,可以来免费申请开发板。