Answers:
Serial.begin(9600)
实际上不打印任何内容。为此,您需要使用Serial.print("Hello world!")
打印文本“ Hello world!”。到串行控制台。而是以每秒9600位的速度初始化串行连接。
串行连接的两端(即Arduino和您的计算机)都需要设置为使用相同速度的串行连接,以获取各种可理解的数据。如果两个系统认为速度之间存在不匹配,则数据将出现乱码。
9600比特/秒是Arduino的默认设置,对大多数用户来说已经足够了,但是您可以将其更改为其他速度:Serial.begin(57600)
将Arduino设置为每秒57600比特/秒。您需要将计算机上正在使用的任何软件(例如Arduino IDE的串行监视器)设置为相同的速度,以便查看正在发送的数据。
Serial.begin(0)
告知Arduino,它应该以每秒0位的速度与串行通信。如您所料,这意味着Arduino将永远不会发送任何数据。 Serial.begin(4000)
将导致Arduino以每秒4000位的速度发送数据。这是非标准的,但是可以。
Serial.begin(300)
)会使Arduino发送数据的速度变慢。增加到57600,可以更快地发送数据。发送系统和接收系统都需要就使用的速度达成共识:您的计算机的串行程序(例如Arduino Serial Monitor窗口)将让您设置计算机接收数据的速度,但您只能从通用速度:300、1200、2400、4800、9600、19200、38400、57600和11520位/秒。您不能输入其他速度,例如4000。9600通常很好。
Baud and BPS are two different things... can't find the link I was looking for now.
-这是一种解释:附录C:“波特”与“ bps”
图片价值1000字,所以他们说,(如果使用计算机,则为1024字),所以我会发布一些图片...
我将Uno设置为以9600波特发送“ Fab”,并在逻辑分析仪上捕获了结果。
红色阴影部分是字节之间的“空闲”时间段。
从上面的图形中可以看出,Tx(发送)数据线通常为高电平(1),直到它变为低电平以指示字符(字节)的开始。这是开始位。然后以波特率(每秒9600个样本)出现8个数据位(由白点表示)。之后,线再次被拉高。这是停止位(红色部分)。然后,我们看到下一个字符的起始位,依此类推。“停止”部分可以无限长,但是必须至少为一位长。
有关第一个字符(字母“ F”或0x46或0b01000110)的更多详细信息,请参见此处:
A-无数据(Tx高)
B-“起始位”。该行被拉低以告知接收器一个字符(字节)开始发送。接收器在对线路进行采样之前等待一个半时钟时间。
C-第一个字符到达(字母“ F”或0x46或0b01000110)。没有时钟位,输入数据仅以波特率(传输)进行采样。与SPI通信相反,数据首先到达最低有效位(如果您不每字节发送8位)。因此,我们看到的是01100010(而不是01000110)。
D-停止位。这始终很高,以确保我们可以区分此字节的末尾和下一个字节的开始。由于起始位为零,终止位为一,因此始终存在从一个字节到下一个字节的清晰过渡。
E-下一个字符的起始位。
您可以从逻辑分析仪捕获中看到T1 - T2
0.1041667 ms,恰好是1/9600:
1 / 9600 = 0.00010416666 seconds
因此,9600的速率可提供每秒的位数,而倒数是位数之间的时间间隔。
串行通信不是自计时的(不同于SPI或I2C等),因此发送方和接收方都必须就时钟速率达成共识。
时钟速率在Arduino上并不精确,因为硬件必须将系统时钟分频才能获得串行时钟,并且分频并不总是精确的。几乎总是有一个错误,此数量在数据表中给出(16 MHz系统时钟引用的数字,例如Uno上的数字):
您可以更改数据位数,而不必发送8位,实际上您可以发送5至9位。
可以选择在数据位之后发送一个奇偶校验位。
这可以帮助接收器检测数据是否正确到达。
奇偶校验位在停止位之前发送。
在9个数据位的情况下(如SeaTalk协议中所用),奇偶校验位被重新用作第9个数据位。因此,您不能同时拥有9个数据位和一个奇偶校验位。
您也可以有两个停止位。这基本上只是延长了字节之间的时间。在过去,这样做是为了让慢速的机电设备可以处理前一个字节(例如打印出来)。
如果您开始侦听流中间的串行数据,则很有可能将流中间的0位解释为起始位,然后接收器将不正确地解译所有内容。
从中恢复的唯一真实方法是不时地存在足够大的间隙(例如10位长),以防止这种情况发生。
此处显示的位(逻辑级)未反转。即,1位为高,0位为低。如果您有RS232设备,则可能会发送-12 V表示1位,而+12 V表示0位。这是相反的,因为电压方向上的1小于0。
如果您有这样的设备,则需要进行电压转换和逻辑反相。像MAX232这样的芯片将为您完成这一切。它们还可以在一些用户提供的电容器的帮助下在内部生成设备,从而提供驱动此类设备所需的-12 V电压。
由于有一个起始位,8个数据位和一个停止位,我们总共有10位,因此根据经验,您可以通过将比特率除以10 来计算每秒可传输的字节数。
例如。在9600 BPS下,您可以每秒发送960字节。
复制代码:
void setup()
{
Serial.begin(9600);
Serial.print("Fab");
}
void loop ()
{
}
; TLDR; 它初始化串行通信端口并设置波特率。您正在与之通信的设备(或Arduino IDE串行监视器)必须设置为匹配的波特率。初始化端口后,即可开始发送或接收字符。Arduino串行参考
它指定要在计算机系统内部运行的程序。数字指定速度.Serial.print指定要显示的文本