所有软件串行库之间有什么区别?Arduino Nano兼容哪一个?


11

有很多软件串行库,它们之间有什么区别?我可以在Arduino Nano上使用哪一个?对于Arduino Nano,我需要一个硬件串行端口和一个软件串行端口,波特率为115200。

我可以在Arduino Nano的哪些引脚上使用软件串行库?


我正在使用带有I2C键盘的neoswserial,但是当我添加key=getKey();GSM(使用2和3号Arduino Uno引脚)时,我没有收到SMS。请帮帮我。
阮张庭海

Answers:


16

该答案列出了4种基本选择:

  • HardwareSerial,永远是最好的。只需使用预定义的Serial变量。在某些Arduinos,有多余HardwareSerial口,叫Serial1Serial2等。纳米只Serial

  • AltSoftSerial,最好的软件串行库。只允许一个实例,并且必须在输入捕捉引脚之一(Nano的引脚8和9)上使用它。

  • NeoSWSerial是第二好的。它适用于任意两个引脚,但仅适用于波特率9600、19200和38400。

  • SoftwareSerial是最糟糕的选择。它可以在任何两个引脚上工作,但是效率很低。它在发送接收字符的整个过程中都禁用中断,并且不能同时执行两个中断(与所有其他串行选择不同)。这可能会干扰草图的其他部分,其他设备通信或库。

如果可以使用较低的波特率,则可以将调试打印保留在上Serial,并使用AltSoftSerialNeoSWSerial用于设备。

但是,如果必须使用115200,则唯一可靠的选择是Serial。尽管AltSoftSerialSoftwareSerial允许该波特率,但它们可能无法正确发送/接收数据。

在那种情况下,我建议使用Serial115200设备。除非使用ISP,否则必须断开设备才能通过USB上传新草图。

然后将AltSoftSerialNeoSWSerial用于您的调试语句。您需要在选定的引脚上使用TTL串行USB适配器(即FTDI)才能连接到PC。本Serial Monitor或其他终端仿真器程序会从USB COM端口读取。


AltSoftSerial在性能和特性上是否相同,仅NeoICSerial添加了什么功能?我不完全明白。github.com/SlashDevin/NeoICSerial
William Roy

2
@WilliamRoy,NeoICSerial只需将attachInterrupt方法添加到AltSoftSerial。您可能不需要处理中断中的每个字符。只需使用AltSoftSerialavailable()然后调用,然后read()如果一个字符已准备好。同样,NeoHWSerial将相同的attachInterrupt功能添加到core HardwareSerial。但是,NeoSWSerial是完全不同的类(它也具有attachInterrupt功能)。
slash-dev

-2

串行软件模拟一个与本机端口不同的串行端口,本机端口具有寄存器以按顺序保存所有位,并且它们设置了一个标志来调用主循环,而软件串行则没有任何意义。软件串行必须一个接一个地接收所有位,因此您必须读取一个数字端口,等待特定的时间,然后再次读取该数字引脚。您必须使其达到10次(1个起始位,8个数据位和1个结束位)。时间很重要。要使用软件序列,您需要更多地担心性能。

您可以将数字中断引脚用作RX引脚,因此在下边框(起始位)中被“称为”,并且您收到了8位。


1
这甚至都没有尝试回答原始问题。
埃德加·博内特

1
是的,这不会尝试回答原始问题,因为Arduino社区不知道您自己的外设代码。
rodrigo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.