日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

串口通讯编程一日通3(COMMTIMEOUTS DCB整理)

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 串口通讯编程一日通3(COMMTIMEOUTS DCB整理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇看了Overlapped IO模型后,接下來看剩下兩個重要結構:

?

?2.COMMTIMEOUTS結構 超時設置

COMMTIMEOUTS:COMMTIMEOUTS主要用于串口超時參數設置。COMMTIMEOUTS結構如下:???
????
? typedef?? struct?? _COMMTIMEOUTS?? {?????
? DWORD?? ReadIntervalTimeout;???? //讀間隔超時
? DWORD?? ReadTotalTimeoutMultiplier;//????讀時間系數?
? DWORD?? ReadTotalTimeoutConstant;??//??讀時間常量?
? DWORD?? WriteTotalTimeoutMultiplier;???//? 寫時間系數
? DWORD?? WriteTotalTimeoutConstant;???//? 寫時間常量
? }?? COMMTIMEOUTS,*LPCOMMTIMEOUTS;?????
??????
????
?   ReadIntervalTimeout:兩字符之間最大的延時,當讀取串口數據時,一旦兩個字符傳輸的時間差超過該時間,讀取函數將返回現有的數據。設置為0表示該參數不起作用。?????
????
?   ReadTotalTimeoutMultiplier:讀取每字符間的超時。???
????
?   ReadTotalTimeoutConstant:一次讀取串口數據的固定超時。所以在一次讀取串口的操作中,其超時為ReadTotalTimeoutMultiplier乘以讀取的字節數再加上?? ReadTotalTimeoutConstant。將ReadIntervalTimeout設置為MAXDWORD,并將ReadTotalTimeoutMultiplier?? 和ReadTotalTimeoutConstant設置為0,表示讀取操作將立即返回存放在輸入緩沖區的字符。???
????
?   WriteTotalTimeoutMultiplier:寫入每字符間的超時。???
????
?   WriteTotalTimeoutConstant:一次寫入串口數據的固定超時。所以在一次寫入串口的操作中,其超時為WriteTotalTimeoutMultiplier乘以寫入的字節數再加上?? WriteTotalTimeoutConstant。???
????
??一般都會做以下設置:???
? TimeOuts.ReadIntervalTimeout=MAXDWORD;?????????????????????????
? //?? 把間隔超時設為最大,把總超時設為0將導致ReadFile立即返回并完成操作???
????
? TimeOuts.ReadTotalTimeoutMultiplier=0;?????????????????????????
? //讀時間系數???
????
? TimeOuts.ReadTotalTimeoutConstant=0;???????????????????????????
? //讀時間常量???????
????
? TimeOuts.WriteTotalTimeoutMultiplier=50;?????????????????
? //總超時=時間系數*要求讀/寫的字符數+時間常量???
????
? TimeOuts.WriteTotalTimeoutConstant=2000;?????????????????
? //設置寫超時以指定WriteComm成員函數中的

?

3.DCB結構

DCB?(Device Control Block)?? 設備控制塊

在打開通訊串口后,我們需要對串口進行初始化,比如,波特率、奇偶位、校驗位等,在查詢或者配置這些數據時,都要用DCB進行緩沖,可以調用GetcommState函數獲得當前串口配置,以下是DCB的具體成員:

typedef struct _DCB {// dcb
  DWORD DCBlength; // sizeof(DCB)
  DWORD BaudRate; // current baud rate
  指定當前的波特率
  DWORD fBinary: 1; // binary mode, no EOF check
  指定是否允許二進制模式,
  WINDOWS 95中必須為TRUE
  DWORD fParity: 1; // enable parity checking
  指定奇偶校驗是否允許
  DWORD fOutxCtsFlow:1; // CTS output flow control
  指定CTS是否用于檢測發送控制。
  當為TRUE是CTS為OFF,發送將被掛起。
  DWORD fOutxDsrFlow:1; // DSR output flow control
  指定CTS是否用于檢測發送控制。
  當為TRUE是CTS為OFF,發送將被掛起。
  DWORD fDtrControl:2; // DTR flow control type
  DTR_CONTROL_DISABLE值將DTR置為OFF, DTR_CONTROL_ENABLE值將DTR置為ON, DTR_CONTROL_HANDSHAKE允許DTR"握手",DWORD fDsrSensitivity:1; // DSR sensitivity 當該值為TRUE時DSR為OFF時接收的字節被忽略
  DWORD fTXContinueOnXoff:1; // XOFF continues Tx
  指定當接收緩沖區已滿,并且驅動程序已經發
  送出XoffChar字符時發送是否停止。
  TRUE時,在接收緩沖區接收到緩沖區已滿的字節XoffLim且驅動程序已經發送出XoffChar字符中止接收字節之后,發送繼續進行。
  FALSE時,在接收緩沖區接收到代表緩沖區已空的字節XonChar且驅動程序已經發送出恢復發送的XonChar之后,發送繼續進行。
  DWORD fOutX: 1; // XON/XOFF out flow control
  TRUE時,接收到XoffChar之后便停止發送
  接收到XonChar之后將重新開始
  DWORD fInX: 1; // XON/XOFF in flow control
  TRUE時,接收緩沖區接收到代表緩沖區滿的XoffLim之后,XoffChar發送出去
  接收緩沖區接收到代表緩沖區空的XonLim之后,XonChar發送出去
  DWORD fErrorChar: 1; // enable error replacement
  該值為TRUE且fParity為TRUE時,用ErrorChar 成員指定的字符代替奇偶校驗錯誤的接收字符
  DWORD fNull: 1; // enable null stripping
  TRUE時,接收時去掉空(0值)字節
  DWORD fRtsControl:2; // RTS flow control
  RTS_CONTROL_DISABLE時,RTS置為OFF
  RTS_CONTROL_ENABLE時, RTS置為ON
  RTS_CONTROL_HANDSHAKE時,
  當接收緩沖區小于半滿時RTS為ON
  當接收緩沖區超過四分之三滿時RTS為OFF
  RTS_CONTROL_TOGGLE時,
  當接收緩沖區仍有剩余字節時RTS為ON ,否則缺省為OFF
  DWORD fAbortOnError:1; // abort reads/writes on error
  TRUE時,有錯誤發生時中止讀和寫操作
  DWORD fDummy2:17; // reserved
  未使用
  WORD wReserved; // not currently used
  未使用,必須為0
  WORD XonLim; // transmit XON threshold
  指定在XON字符發送這前接收緩沖區中可允許的最小字節數
  WORD XoffLim; // transmit XOFF threshold
  指定在XOFF字符發送這前接收緩沖區中可允許的最小字節數
  BYTE ByteSize; // number of bits/byte, 4-8
  指定端口當前使用的數據位
  BYTE Parity; // 0-4=no,odd,even,mark,space
  指定端口當前使用的奇偶校驗方法,可能為:
  EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY
  BYTE StopBits; // 0,1,2 = 1, 1.5, 2
  指定端口當前使用的停止位數,可能為:
  ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS
  char XonChar; // Tx and Rx XON character
  指定用于發送和接收字符XON的值
  char XoffChar; // Tx and Rx XOFF character
  指定用于發送和接收字符XOFF值
  char ErrorChar; // error replacement character
  本字符用來代替接收到的奇偶校驗發生錯誤時的值
  char EofChar; // end of input character
  當沒有使用二進制模式時,本字符可用來指示數據的結束
  char EvtChar; // received event character
  當接收到此字符時,會產生一個事件
  WORD wReserved1; // reserved; do not use 未使用
  } DCB;

總結

以上是生活随笔為你收集整理的串口通讯编程一日通3(COMMTIMEOUTS DCB整理)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。