极客秀
搜索

Arduino串口不够用怎么办?

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

原理图如下所示,通过原理图我们知道,单片机只有一对串口,但是最后分两路出去,一路连在了板子上的排针上;
另外一路通过两个发光二极管连在了一个叫做atmega的芯片上,程序通过这个芯片给单片机烧录程序。

原理图如下所示,通过原理图我们知道,单片机只有一对串口,但是最后分两路出去,一路连在了板子上的排针上;
另外一路通过两个发光二极管连在了一个叫做atmega的芯片上,程序通过这个芯片给单片机烧录程序。
软串口
但是我们要使用两个串口怎么办呢?不用担心,Arduino早已为我们谋划好了一切,我们把上面Arduino板上标注的串口叫做硬串口。
除了硬串口之外,Arduino还为我们设计了一种软串口,也可以叫做虚拟串口,他是通过程序定义的一组串口,然后映射到Arduino的IO口,这样我们就可以额外的多出一组串口。
下面我们用软串口做一组小实验,经过串口1向Arduino发送数据,Arduino接收到数据之后,再把数据转送到串口2,并让其在电脑上打印出来。
程序
上述小实验的程序如下图,我们发现这个程序与我们平时所见到的程序所不同的是,第一行多了一句:#include
<SoftwareSerial.h>的语句,我们所使用的软串口全靠的这一语句。它的作用是将其它数字、模拟引脚通过程序模拟成串口通信引脚。
SoftwareSerial mySerial(8, 9);的意思是把8引脚定义为RX口,TX定义为TX口。
再下面的程序的作用是设定波特率,然后把串口1的数据发给串口2,或者把串口2的数据发给串口1

#include <SoftwareSerial.h>

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”。

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

Final
有人会说,一个串口就够用了,何必如此麻烦,然而实际的情况并非如此,比如说我们要用8266WiFi模块,如果把唯一一个宝贵的串口资源给了8266。
那程序不出问题还好,一旦有错,如果不再虚拟出来一对串口,我们都不知道哪里出了问题,所以软串口是我们开发者必须要掌握的。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容