2011-10-10 182 views
6

我想通過虛擬COM端口與硬件設備通話。主機是PC Windows OS PC。設備正在使用921600波特率。此代碼的工作:自定義波特率

 
DCB dcb; 
... 
dcb.BaudRate = CBR_115200; 
SetCommState(hPort, &dcb); 

一旦我改變波特率:

 
dcb.BaudRate = 921600; 

SetCommState失敗,最後一個錯誤0x57(參數不正確)。這是否意味着Windows API可以防止除預定義值之外的任何波特率?或者,也許,虛擬COM端口可能配置爲允許此波特率?

虛擬COM端口是CameraLink連接的一部分。我正在與CameraLink主板供應商交談。但是我需要知道Windows串行通信API是否支持自定義波特率。

+2

如果這是一個虛擬COM端口,通常組態的波特率無關緊要。如果您將費率降至9600或4800左右,您是否看到它放慢速度?我懷疑它不會。 – Brad

+1

根據我對CameraLink的經驗:COM端口僅用於配置相機,並且應該以標準低數據速率(通常爲9600baud)工作。 CameraLink本身速度更快,但不通過COM端口。其他實現是非標準的。 (參見[CameraLink規範](http://www.lord-ing.com/web/IMG/pdf/Camera_Link-2.pdf)) –

+0

@Adrien Plisson:根據Cameralink規範,相機和圖像採集卡應支持至少9600波特。其實,我正在支持115200的圖像採集卡。它看起來像圖像採集卡阻止我,而不是Windows。 –

回答

6

Iv'e只是有一個快速的MSDN文檔,這是關於DCB結構中的BaudRate屬性的說法。

BaudRate通信設備工作的波特率。該成員可以是實際的波特率值,也可以是下列其中一個索引。 CBR_110。 CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,CBR_14400,CBR_19200,CBR_38400,CBR_57600,CBR_115200,CBR_128000,CBR_256000

所以,至少在理論上,你應該沒有問題設置的串行端口速度您的要求。

它還指出進一步向下,有一些組合(編程8250串行芯片時具體地),其是無效的

備註 當DCB結構用於配置8250,以下限制適用到爲ByteSize和StopBits成員指定的值: 數據位數必須爲5到8位。 帶有2個停止位的5個數據位的使用是無效的組合,因爲具有1.5個停止位的6個,7個或8個數據位。

這讓我想知道你的問題是某些組合是什麼導致的事情,而不僅僅是設置波特率。

也許你的波特率是好的,但通過選擇波特率的無效停止位的數量,或奇偶長度,這在波特率重新設置爲標準設置,然後再次生效。

我不知道你處理的硬件,所以我不能說100%,如果是這樣的話,我只知道串口編程一般,但個人而言,我的下一步是將波特率設置爲然後,我需要保留原樣,嘗試塊中其他標誌的所有不同組合。

的DCB結構的MSDN官方頁面可以在這裏找到:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(v=vs.85).aspx

你也可以找到一些幫助的BuildCommDCB功能太:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363143(v=vs.85).aspx

+0

我的端口設置非常標準:字節大小爲8,奇偶校驗無,流量控制無,停止位1.同時,我從Cameralink主板供應商處獲得信息,表明不支持此波特率。感謝BuildCommDCB鏈接:) –