Serial.begin(speed,config)没有为Leonardo Board编译

时间:2012-12-08 02:11:57

标签: arduino

我想将我的串行通信配置为没有奇偶校验,1个开始和2个停止位。 Serial.begin(speed, config)状态的documentation

  

(...)可选的第二个参数配置数据,奇偶校验和停止位。默认值为8个数据位,无奇偶校验,一个停止位。

文档还列出了可能的配置值。根据我(有限)的理解,我需要SERIAL_7N2或SERIAL_8N2来满足我的要求。 (我不确定数据位如何与我需要的1-start-bit相关。)

但是,我甚至无法编译,因为我不知道如何将该配置值提供给begin方法。 (我没有太多的Arduino / C ++经验。)

在我的代码中,我尝试了以下两种变体:

Serial.begin(9600, SERIAL_8N2);
Serial.begin(9600, "SERIAL_8N2");

我错过了什么吗?

其他信息:

Serial.begin(speed, config)引入了最新的Arduino 1.0.2 IDE版本。

可以找到定义/实现begin方法的代码:


编辑:

根据PeterJ和borges的回复,以下变体是正确的。

Serial.begin(9600, SERIAL_8N2); 

然而,它仍然无效。

我发现如果我将配置的电路板从我的Arduino Leonardo更改为Arduino Uno,则不会发生编译错误。

因此,它可能是只有一部分电路板发生的错误......或者它可能不受支持?!


编辑2:

现在已经解决了:)博尔赫斯的答案向我指出了正确的解决方案!

2 个答案:

答案 0 :(得分:5)

你在评论中提到:(编辑:现在在标题中)

  

如果我将电路板从“Arduino Leonardo”改为“Arduino Uno”,我不会收到编译错误。

Arduino Leonardo在串行通信方面有一些特点:

  1. Leonardo有一个微控制器(ATmega32U4),具有本机USB通信功能。为了保持整个生态系统的兼容性,Leonardo通过USB虚拟化串行通信。您可以使用代码中的Serial访问此通信。从物理上讲,您可以通过USB插头访问该通信。

  2. 要使用“实际”串行通信(AKA串行TTL),需要使用引脚0(RX)和1(TX)。在代码中,您将使用Serial1(注意数字1!)。

  3. 一个例子:

    void setup() {
        Serial1.begin(9600, SERIAL_8N2);
        Serial1.println("Hello?");
    }
    
    void loop() {
    }
    

    有关详细信息(推荐):

答案 1 :(得分:1)

第一种方法应该没问题,因此您有编译器配置或包含问题。确保文件顶部包含以下内容:

#include <HardwareSerial.h>

同时SERIAL_8N2有效时,这是一个很少使用的奇怪设置。你很可能想要SERIAL_8N1。