Answers:
人们为什么安顿下来?
人们安定下来是因为它足够快。最常见的用途是在终端上打印一些东西以进行调试。9600波特是每秒960个字符,或每秒12 x 80个字符行。你读多快?:)
如果您的程序使用串行端口进行批量数据传输,则可以选择不解决。
有什么限制...
串行限制很高。您可以直接在程序中使用115200波特,它将可以正常工作。Arduino终端最多允许115200,但其他程序(如RealTerm)将使您运行得更高。
硬件串行将运行至1 M波特。如果您四处阅读,您会发现人们通过直接控制UART消耗了多达1 M的内存。对于通过蓝牙芯片进行传输等用途,您可能会受益于高波特率。如果您使用硬件串行接口在短距离内从一个芯片到另一个芯片进行交换,那么1 M波特是完全可行的。想一想所有以1 MHz时钟频率正常工作的SPI和I2C器件。
在更大的距离上,使用逻辑电平(0至5V平原)信号时,您将开始遇到噪声问题。要使用更大的距离,您将添加一个收发器以提供可靠的信令,通常是RS-232,次要是RS-485。使用RS-232,您可以在10英尺的距离内运行百万比特。
微处理器时钟速度将是实际的极限。对于硬件UART,处理器必须每10位(对于N81)将一个字节加载到UART。因此,当波特率达到1 M时,对于16 MHz处理器而言,要为UART提供数据将是一个挑战。每160个时钟滴答将发送一个新字节,这是很少的代码行。对于短时间的数据突发,您可以达到该速率。消息是,在UART成为限制之前,处理器将耗尽速度。
注意,这一切都适用于HardwareSerial,软件序列有很大的不同。
除了所有有趣的答案外,值得一提的是,将串行速度设置为XXX位/秒并不一定意味着硬件上的XXX位/秒。
时钟-甚至基于石英的时钟-都不完美且容易漂移。另外,由于串行时钟通常是通过二乘幂的预除数和(整数)计数器生成的,因此在基本时钟频率下无法准确获得所有值。借助起始/停止位,异步串行通信可以容忍某些时钟漂移。但这有局限性。
例如,如果ATmega328PA以1MHz运行,则可以在0.2%的误差下达到9600b / s。但是在14400b / s时,误差为-3.5%(实际通信速度为13900b / s)。而在28800b / s时,误差为+ 8.5%(实际通信速度为31200b / s)。所有这些数据均来自ATmega48PA-88PA-168PA-328PA数据表p200。
当两个相同的设备一起通信时(因为实际上以相同的速度通信),这不是问题。它可能会在不同设备之间通信时是一个问题。
增加基本频率并不一定会显着提高精度。例如,在2MHz上运行与上述相同的ATmega328PA并不会真正带来更好的结果,这主要是由于舍入误差。但是在1.8432MHz上运行,则可以在2400b / s至57.6kHz的范围内提供非常精确的bps。
我认为使用传输速率不是最慢的传输速率(300),也不是最终可能导致某些设置(28800甚至115200)出现问题的传输速率是一种传统。PC串行端口(最常见的是FTDI232 USB适配器)可以应付更高的速率,但您的DIY硬件可能无法满足要求。因此9600 bps已将其自身确立为某种代码示例的标准传输速率。