如何在不关闭连接的情况下更改波特率?

时间:2011-07-09 15:19:02

标签: java serial-port baud-rate

我想连接到连接到串口(COM4)且初始波特率为300的设备,设备可以通过命令将其波特率更改为9600,我的Java代码将此命令发送到设备并且波特率为设备已更改,但我不知道如何在不关闭连接的情况下更改程序中的波特率。当连接关闭时,设备将恢复到初始波特率。

连接打开时,有没有办法在Java中更改波特率?

在我向设备发送“更改波特率”命令后,当下面的代码执行设备丢失了连接。我认为这种方法只是用于初始化,而不是用于在通信过程中改变波特率。

port.setSerialPortParams(
    9600,
    SerialPort.DATABITS_8,
    SerialPort.STOPBITS_1,
    SerialPort.PARITY_NONE);

2 个答案:

答案 0 :(得分:3)

设备最有可能感知到DTR或RTS。当端口打开时,Windows将切换它们,并在端口关闭时恢复它们。因此,您有3个选项。我不确定哪一个会起作用 - 你可能要全部尝试,我没有带有串口的windows box。

  1. 使用不同的Java库,例如librxtx的“gnu.io.RXTXPort”,它可以在不关闭连接的情况下更改波特率。

  2. 尝试使用windows“mode”命令: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/mode.mspx。 尝试RTS和DSR“开”和“关”,看看是否有任何设置有帮助。请注意,如果成功,即使退出java程序,设备也永远不会被重置。您将不得不再次调用“mode”来重置设备。

  3. 获取一条特殊的串行电缆,它不会传递DTR信号。这些被称为“3线”(仅限RX和TX)或“5线”(RX / TX + RTS / CTS)RS232电缆,并且易于制作。

答案 1 :(得分:0)

连接设备时始终指定波特率。即使您没有,您使用的软件/ API也适合您。有可能您的API连接到此设备,默认波特率为300。 波特率是为串行连接定义的,不是为设备定义的。一旦没有连接,就没有波特率。