我知道9600、19200、38400、57600、115200和1.8432 Mbaud,但是没有其他。为什么使用这些值,并且每次只是将其简单地加倍还是发生一些更复杂的事情(例如,四倍的38400不是115200的波特?)
我问这个问题的原因是我正在设计一些可能必须与各种不同的波特率进行交互的东西。它将在9600中初始化,然后切换到特定的波特率。但是我不能支持任意速率,因为我使用的dsPIC33F不支持任意速率,因为它仅限于16位BRG递减计数器。在这方面,它与许多其他处理器相似。
我知道9600、19200、38400、57600、115200和1.8432 Mbaud,但是没有其他。为什么使用这些值,并且每次只是将其简单地加倍还是发生一些更复杂的事情(例如,四倍的38400不是115200的波特?)
我问这个问题的原因是我正在设计一些可能必须与各种不同的波特率进行交互的东西。它将在9600中初始化,然后切换到特定的波特率。但是我不能支持任意速率,因为我使用的dsPIC33F不支持任意速率,因为它仅限于16位BRG递减计数器。在这方面,它与许多其他处理器相似。
Answers:
它始于很久以前的电传打字机,我认为是75波特。从那以后,它几乎一直翻倍,只有几分之一(x1.5)的倍数,例如28,800,在电话线调制解调器技术上存在一些制约因素,并没有使它翻倍。
标准的晶体值来自这些早期的波特率,其可用性决定了未来的速率。例如,
大多数UART使用波特率的时钟,更现代的部件(例如NXP LPC)具有分数分频器,可以通过使用非二进制倍数来扩大范围。
其他通用标准是31,250(MIDI)和250K(DMX),它们都可能被选作“舍入”时钟的整数倍,例如1MHz等。
一个免费的Windows终端程序RealTerm,在其Baud菜单中列出了这些UART速率:
110、150、300、1200、2400、4800、9600、19200、38400、57600、115200、230400、460800、921600
但是,这些实际上是每秒位数(bps),而不是波特率-参见下文。
110波特被ASR-33等8级电传打字机使用。我不知道在哪里使用了150波特,但这是5电平TTY通常使用的75波特的两倍(以及60波特)。
300 bps是1960年代首个广泛使用的电话调制解调器的标准。每秒出现30个字符/秒的终端。
高于300 bps / 300波特(使用简单的频移键控(FSK))时,bps和波特的数字(每秒的符号或音调)不同。例如,一个1200 bps调制解调器实际上以600波特运行,而一个4800 bps调制解调器则以1600波特运行。请参阅本文“带宽”下的表。区别在于,除了每秒使用一定数量的音频脉冲外,还使用相移键控和其他方法从相同的波特率中提取额外的带宽,以获得越来越高的bps。(因此56K调制解调器实际上仅以8000波特运行。)
如您所见,UART速率列表从75开始,然后不断翻倍(跳过600),直到达到38400,再乘以1.5得到57600。56Kbps是模拟电话线的限制。较高的速率115200向上(从57600开始再次翻倍)用于硬连线连接。
正如mikeselectricstuff所提到的,当时调制解调器的速度无法翻倍,但是很少使用了,因此以1.5 x 9600和1.5 x 19200的速率引入了14400和28800 bps。
zip(*serial.Serial('COM10').getSupportedBaudrates())
它回答:(50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200)