问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Arduino软串口使用入门:SoftwareSerial库详解

创作时间:
作者:
@小白创作中心

Arduino软串口使用入门:SoftwareSerial库详解

引用
CSDN
1.
https://blog.csdn.net/D13162580021/article/details/139902638

软串口与SoftwareSerial库使用

在Arduino开发中,硬件串口(通常是0、1号引脚)常用于与计算机通信和程序下载。如果这些引脚被占用,就需要拔插线才能下载程序,非常不便。为了解决这个问题,可以使用软串口。

什么是软串口

软串口是通过软件模拟UART通信的方法,在Arduino平台上实现串口通信。它使用两个数字IO口代替硬件串口的RX、TX引脚,以解决串口不够用的问题。不同型号的Arduino开发板可用作软串口的引脚有所不同:

  • Arduino Uno:除了0(RX)和1(TX)引脚外的任何引脚
  • Arduino Mega:几乎所有引脚,但建议避开用于其他功能的特定引脚
  • Arduino Nano:除了0(RX)和1(TX)外的任何引脚
  • Arduino Leonardo:几乎任何引脚,包括多个模拟引脚
  • Arduino Due:所有数字引脚和模拟引脚
  • Arduino Micro:几乎任何引脚,包括多个模拟引脚

常用的软串口库

  1. SoftwareSerial:这是Arduino IDE自带的软件串口库,允许用户选择任何数字引脚来模拟串口通信。但它有一定的限制,比如不能同时发送和接收数据,以及在高波特率下可能不够稳定。

  2. AltSoftSerial:相对于SoftwareSerial来说,在特定的引脚上提供了更高的性能和稳定性。它使用定时器来实现更准确的时间控制,因此在高速通信时比SoftwareSerial表现得更好,但这也意味着它会占用特定的定时器资源。

  3. NeoSWSerial:旨在解决SoftwareSerial的一些性能问题,特别是在高波特率上。它比SoftwareSerial占用更少的资源,并且可以在数据发送的同时接收数据。

特性/库
SoftwareSerial
AltSoftSerial
NewSoftSerial
支持的硬件平台和芯片型号
Arduino Uno、Mega等基于ATmega328P和ATmega2560芯片的开发板
包括ATtiny、ATmega、SAM3X8E等
支持更多开发板和芯片,包括ESP8266、ESP32、ATtiny等
可用的IO口数量和频率
两个IO口(RX和TX),最高115200bps
多个IO口,最高31250bps
多个IO口,最高38400bps
稳定性和可靠性
在高速通信时可能出现数据丢失或错位
相对稳定可靠
相对稳定可靠
使用的方法和API
方法和API比较类似于传统的Serial库
有自己独特的API和使用方法
方法和API比较类似于SoftwareSerial库

对于初学者来说,SoftwareSerial库已经足够使用。但需要注意,SoftwareSerial库最高只能支持两个IO口(RX和TX),即最多只能额外跟一个设备串口通信。即使使用了SoftwareSerial库,算上Arduino UNO自带的硬件串口,也只能同时跟两个设备串口通信。如果需要跟更多设备通信,建议使用Arduino Mega2560(它有四个硬件串口)或NewSoftSerial库。

SoftwareSerial库使用示例

首先需要在Arduino IDE中安装SoftwareSerial库。以Arduino Uno R3开发板为例,应用代码如下:

#include <SoftwareSerial.h>  //引用库文件
SoftwareSerial Serial1(2, 3);  // 定义软串口RX为2, TX为3和软串口对象Serial1

void setup() {
  Serial1.begin(9600);  // 初始化软串口,设置波特率为9600
}

void loop() {
  if (Serial1.available()) {
    char c = Serial1.read();  // 读取接收到的数据
    Serial1.write(c);  // 发送数据
  }
}

这里可以将软串口定义为Serial1、Serial2、Serial3等,方便项目移植。例如,将Arduino UNO的代码转移到Arduino Mega2560上时,只需要删除掉SoftwareSerial相关的代码,然后重新接线即可。

以BLE低功耗蓝牙模块为例,软串口接线方式如下:

Arduino
BLE蓝牙模块
2 (RX)
TX
3 (TX)
RX
3.3V
3.3V
GND
GND

串口函数介绍

在使用软串口时,以下函数最为常用:

  • Serial1.begin(9600);:初始化串行通信,并设置数据传输速率(波特率)。
  • Serial1.read();:从串行缓冲区读取接收到的第一个字节的数据。
  • Serial1.write();:通过串行端口发送数据。
  • Serial1.available();:查询串行缓冲区中可读取的字节数。
  • Serial1.print();:发送数据到串行端口,以ASCII字符形式。

这些函数的使用方法与硬件串口的Serial库基本相同,只是将Serial替换为SoftSerial对象(如Serial1)即可。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号