Arduino软串口通信的实现及softwareserial库应用详解

    我们都知道Arduino UNO板的数字IO端口为D0~D13,其中D0、D1还作为串口通信的接收(Rx)、发送(Tx)端口,当Arduino UNO板外接的串口通信模块超过一个时,怎么办?此外,我们调试程序时经常会用到串口显示语句Serial.print(),如果我们的模块占用了这个串口,就没法用Serial.print()语句来显示我们的测试数据了。Arduino UNO板解决这个问题的办法,就是用其它的IO端口来模拟串口通信,也就是我们通常称之为软串口(或模拟串口)。

    一般采用微处理器芯片的单板机等,数字IO口的电平信号都是采用TTL电平标准的,即5V为1,0V为0Arduino的数字IO口亦是采用TTL电平标准,它上面的硬件串口(D0、D1)采用的也是TTL标准的串行协议因此我们就可以用其它的IO口来模拟硬件串口,即用软件程序将一个字节(BYTE)拆成8个位(bit),根据bit=1或0,依次按指定的频率用相应的高低电平串行发送,接收端读取到这些高低电平后,再将这些高低电平信号还原成1或0,然后还原成一个字节数据,也就是模拟硬件串口进行通信。

    如果按上述的方法编程,那不是太麻烦了啊!幸好Arduino IDE里已经自带了一个softwareserial.h库,它让我们使用软串口编程与硬串口编程几乎一模一样。我们使用这个库可以将D2~D13的任何2个IO端口定义为软串口的接收(Rx)或发送(Tx)端口。可以创建多个SoftwareSerial对象,但是在给定时刻只能有一个活动。

    下面说下如何在程序中使用softwareserial.h库。

    

    (一)softwareserial.h库提供了一个SoftwareSerial类,当然我们首先要引用一下库,即:

    #include<SoftwareSerial.h>

    

    (二)接着自定义一个软串口SoftwareSerial类的实例对象:

    SoftwareSerial mySerial(rxPin, txPin)

    参数:

    mySerial:用户自定义软串口对象名

    rxPin:软串口接收引脚

    txPin:软串口发送引脚

    返回:

    无

    这里自定义软件串口对象的名,可以随便取,例如你可以取名为SS1或其他的,如果用D10作为接收端口,D11作为发送端口,则程序语句为:

    SoftwareSerial  SS1(10,11);

    

    (三)接着我们要用begin来设置串行通信的速度(波特率):

    mySerial.begin(speed)

    参数

    speed:所需波特率。支持的波特率为:300、600、1200、2400、4800、9600、14400、19200、28800、31250、38400、57600。

    返回:

    无

    

    (四)接下来我们就可以用available来检测接收缓冲区里是否有已经接收到的数据:

    mySerial.available()

    参数

    无

    返回:

    可读取的字节数

    

    (五)然后就可以用read来读取接收引脚(rxPin上接收到的字符,并且清除掉接收缓冲区中的第一个字节。请注意,一次只能有一个SoftwareSerial对象接收传入的数据(使用listen()函数选择哪个对象)。

    (1)

    mySerial.read()

    参数

    无

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值