none
C# 的Serialport baudrate設定問題 RRS feed

  • 問題

  • Hi, 各位先進好

    我在使用Serialprot時,若baudrate設定超過115200(例如128000),程序會沒有回應一陣子,後來又恢復了

    我以為這樣已經設置成功,但用邏輯分析儀檢查,發現baudrate已經自動變回9600(初始設定值),請問這個情況各位前輩有遇過嗎?

    我使用的裝置是 USB to UART,確認過使用原廠的應用程式可以達到3.4Mbps。

    ===========補充描述===============

    我是利用一個按鍵事件來設定Serialport,當baudrate設定超過115200以上(例如設定為115201),執行到serialport.open(),就會卡住了,然後過一陣子恢復,但是baudrate自動變成預設值(9600)。

    我是使用Visual Studio執行偵錯,在沒有回應的期間,我按下停止偵錯,Visual Studio也會沒有回應一陣子,滑鼠轉圈圈,以下是我的程式碼,請各位指教。

                        serialPort1.ReceivedBytesThreshold = 1;
                        serialPort1.BaudRate = 115201;//Convert.ToInt32(comboBox3.SelectedItem);
                        serialPort1.Parity = Parity.None;
                        serialPort1.DataBits = 8;
                        serialPort1.StopBits = StopBits.One;
                        serialPort1.PortName = (string)comboBox2.SelectedItem;
                        serialPort1.ReadBufferSize = 409600000;//2147483647;
                        serialPort1.Open();
                        serialPort1.DiscardInBuffer();
                        
                        Thread t = new Thread(serialPort1_DataReceived);
                        t.IsBackground = true;
                        receiving = true;
                        t.Start();


    ==============================================

    已解答,原因是選用了裝置不支援的baudrate,造成假死現象,選用裝置支援的baudrate後,即可正常使用。

    • 已編輯 草皮兒 2020年9月16日 下午 03:34
    2020年9月12日 下午 02:06

解答

  • 4Mbps的UART通常支持以下baudrate:1200、2400、4800、9600、19200、38400、57600、115200、230400、460800、921600、1000000、1500000、2000000、2500000、3000000、3500000、4000000。不过确实有某些设备能支持128000、250000、500000等baudrate,您是否确定您的设备支持128000?某些UART设备在所设定的baudrate不被支持时会自动改为默认值,这样会导致SerialPort端口在打开时变慢,看似假死一样,这是正常的,说明您参数设置不正确。
    • 已標示為解答 草皮兒 2020年9月16日 下午 03:31
    2020年9月14日 上午 11:00

所有回覆

  • 您可以參考這篇文件:Serial Communication, 其中有一段話如下. 意思是:如果速度不是很關鍵的話, 就設定9600, 如果設定超過115200, 這種速度超過大部分的Microcontroller能夠接受的值, 所以容易發生錯誤...

    Baud rates can be just about any value within reason. The only requirement is that both devices operate at the same rate. One of the more common baud rates, especially for simple stuff where speed isn't critical, is 9600 bps. Other "standard" baud are 1200, 2400, 4800, 19200, 38400, 57600, and 115200.

    The higher a baud rate goes, the faster data is sent/received, but there are limits to how fast data can be transferred. You usually won't see speeds exceeding 115200 - that's fast for most microcontrollers. Get too high, and you'll begin to see errors on the receiving end, as clocks and sampling periods just can't keep up


    • 已編輯 tihsMVP 2020年9月13日 上午 01:13
    2020年9月13日 上午 01:13
  • 您可以參考這篇文件:Serial Communication, 其中有一段話如下. 意思是:如果速度不是很關鍵的話, 就設定9600, 如果設定超過115200, 這種速度超過大部分的Microcontroller能夠接受的值, 所以容易發生錯誤...

    Baud rates can be just about any value within reason. The only requirement is that both devices operate at the same rate. One of the more common baud rates, especially for simple stuff where speed isn't critical, is 9600 bps. Other "standard" baud are 1200, 2400, 4800, 19200, 38400, 57600, and 115200.

    The higher a baud rate goes, the faster data is sent/received, but there are limits to how fast data can be transferred. You usually won't see speeds exceeding 115200 - that's fast for most microcontrollers. Get too high, and you'll begin to see errors on the receiving end, as clocks and sampling periods just can't keep up


    謝謝回覆,但已確認過硬體可支援到3Mbps

    我寫的程序沒有回應,指的是是程序當掉(滑鼠開始轉圈圈)那種


    2020年9月13日 上午 04:08
  • 您的程式是否有利用執行緒或非同步作業執行SerialPort的傳送或接收的工作, 若沒有, 則就會發生滑鼠開始轉圈圈, 程式沒回應的現象
    2020年9月13日 上午 08:31
  • 你可以用免費軟體 AccessPort 軟體監控所有 COM Port 的指令,裡面包含刨率變化,確認是哪個執行檔造成。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2020年9月13日 上午 11:09
  • 您的程式是否有利用執行緒或非同步作業執行SerialPort的傳送或接收的工作, 若沒有, 則就會發生滑鼠開始轉圈圈, 程式沒回應的現象

    您好,我沒描述清楚,我是利用一個按鍵來開始設定Serialport,當baudrate設定超過115200以上(例如設定為115201),執行serialport.open(),就會卡住了,然後過一陣子恢復,但是baudrate自動變成預設值(9600)。

    2020年9月13日 下午 01:45
  • 聽起來像您的設備只能支援9600的baudrate
    2020年9月14日 上午 12:01
  • 您好,我使用原廠的應用程式,確實可以達到3.4Mbps,目前自己用VS開發的程式就遇到這個問題。

    PS.原廠的應用程式與目前開發的VS是裝在同一台電腦上,應可以初步排除硬體支援問題。

    2020年9月14日 上午 02:43
  • 4Mbps的UART通常支持以下baudrate:1200、2400、4800、9600、19200、38400、57600、115200、230400、460800、921600、1000000、1500000、2000000、2500000、3000000、3500000、4000000。不过确实有某些设备能支持128000、250000、500000等baudrate,您是否确定您的设备支持128000?某些UART设备在所设定的baudrate不被支持时会自动改为默认值,这样会导致SerialPort端口在打开时变慢,看似假死一样,这是正常的,说明您参数设置不正确。
    • 已標示為解答 草皮兒 2020年9月16日 下午 03:31
    2020年9月14日 上午 11:00
  • 2020年9月14日 上午 11:29
  • 4Mbps的UART通常支持以下baudrate:1200、2400、4800、9600、19200、38400、57600、115200、230400、460800、921600、1000000、1500000、2000000、2500000、3000000、3500000、4000000。不过确实有某些设备能支持128000、250000、500000等baudrate,您是否确定您的设备支持128000?某些UART设备在所设定的baudrate不被支持时会自动改为默认值,这样会导致SerialPort端口在打开时变慢,看似假死一样,这是正常的,说明您参数设置不正确。

    您好,謝謝解答,

    後來發現我用的裝置不支援128000,才造成了您描述得假死現象,選擇該裝置支援的baudrate就可以了,謝謝。

    2020年9月16日 下午 03:33