串行数据显示异常


12

我有一个简单的草图,可以在序列号上打印出“ Hello World”,但是却出现了一堆乱码。

void setup() {
    Serial.begin(9600);
}

void loop() {
    Serial.println("Hello World");
    delay(1000);
}

为什么不按代码说明打印“ Hello World”?


您是否检查过串口的初始化是否正确并且与PC串行终端匹配?setup()应该类似于Serial.begin(9600);
Rajendra

@Rajendra那一行在我给的代码示例中。此外,我实际上没有问题。对于初学者来说这是一个常见问题,我回答了以下问题。
sachleen

Answers:


8

电路板和终端可能未使用相同的波特率。检查Arduino串行终端的右下角,并确保将其设置为9600。

串行数据

串行通信通过一次将整个数据流发送一位来进行。这与标准并行端口一次发送一个字节相反。两种设备都需要知道数据的发送速度。此外,两个设备都需要以相同的速度运行。这称为波特率。

波特率

波特实际上仅表示每秒脉冲数。在串行通信的上下文中,它表示每秒传输多少位。最常见的值之一是9600,但还有其他常见的值是9600的因数或9的倍数。不过,只要两个设备以相同的速度运行,这实际上并不重要。

如果我向您发送消息的速度比获取消息的速度快,那么您将丢失数据。如果我发送给您的消息比接收到的消息要慢,那么您的胡扯与我发送给您的消息混在一起。

数据,奇偶校验,停止位

如果查看的文档begin(),您将看到它可以带有两个参数:

Serial.begin(speed)
Serial.begin(speed, config)

希望您现在了解速度,它是Arduino每秒通信的位数。

第二个参数config可以让您配置有关串行数据传输的其他内容。这些是数据,奇偶校验和停止位。你会看到它的值喜欢的页面5N16N1SERIAL_8N1 (the default)

第一个数字代表多少个数据位。第二个字符告诉您存在哪种奇偶校验位。E奇偶校验,O奇校验或N无校验。第三个数字告诉您多少个停止位。

因此,实际上,对于8N1,每8位“您的”数据将发送10位。1个起始位,8个数据位和1个停止位。

无论如何,双方都需要就此信息以及速度达成共识。Arduino串行终端没有为您提供更改这些设置的选项,但其他选项却可以,因此您需要确保所有这些配置设置都相同。

Wiki上的更多信息:异步串行通信


0

萨克林的答案(上)说:

The board and terminal are probably not using the same baud rate. 
Check the bottom right corner of the Arduino Serial Terminal
and make sure it is set to 9600.

如果此数字为9600,并且您仍然收到乱码的数据,请检查在上传代码时获得的输出。它应显示为:

Sketch uses 2754 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 195 bytes (9%) of dynamic memory, leaving 1853 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash:w:C:\Users\Owner\AppData\Local\Temp\arduino_build_457862/LockCode.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600

此底线(我已发布的内容)说明了设备的默认波特率。对我来说,我更改Serial.begin(9600);-> Serial.begin(57600);并检查Arduino串行终端的右下角显示为57600。

运行完此方法后,我可以切换回9600并获取非乱码数据。Arduino似乎很挑剔...


0

我花了半个小时试图解决这个问题,这是我的Arduino Pro Mini的3.3V,我在Arduino IDE(在PC上)中选择了5V。即使定义了相同的波特率,串行打印也不会像以前那样工作。

在Arduino IDE中选择正确的板

为了清楚起见,必须在“ 工具”选项卡下选择正确的处理器(电压/时钟速度)。

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.