C# – Change SerialPort’s BaudRate while connection is open

c++serial-communicationserial-port

I am using SerialPort class to communicate with an external device. I start the communication at 300 Baud per second however after the initial "handshake" I have to switch to a Baud rate specified by the device (usually 9600 Bps).

I have been unsuccessful in my attempts to continue communicating after I increase Baud rate however I am not sure why. That leads me to my question: What is the proper way of changing the Baud rate? Can it be done while the connection is open, or should I close the connection first?

I have been unable to find any information about this in the documentation…

I have tried both and have been unsuccessful in both ways, which made me think that I must be missing something obvious.

Best Solution

From my experience so far, the safest bet is to close the connection first, change the rate, and then open it again. Your device won't mind this, as it probably waits for you to send some control characters to make sure the speed has been changed.

You can try changing the baud rate while the port is open, but this may result in invalid characters being detected in the buffer (depending on the device and the protocol), which means you should also clear the buffers immediately after the change (using SerialPort.DiscardInBuffer()).

Related Question