日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Win32 串口编程笔记1

發布時間:2025/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32 串口编程笔记1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
、打開和關閉串口

在Win32中,串口是作為文件處理的,使用CreateFile()函數可以打開串口,進行讀寫訪問操作。CreateFile()返回串口句柄,可以在以后的端口操作中使用。關閉端口使用CloseHandle()函數來完成。

HANDLE WINAPI CreateFile(_In_??????LPCTSTR lpFileName,//要打開或創建的文件名_In_??????DWORD dwDesiredAccess,//訪問類型_In_??????DWORD dwShareMode,//共享方式_In_opt_??LPSECURITY_ATTRIBUTES lpSecurityAttributes,//安全屬性_In_??????DWORD dwCreationDisposition,//指定要打開的文件已存在或不存在的動作_In_??????DWORD dwFlagsAndAttributes,//文件屬性和標志_In_opt_??HANDLE hTemplateFile//一個指向模板文件的句柄 ); lpFileName:要打開或創建的文件名。打開串口設備可以直接寫串口號,如"COM4",需要注意的是COM10及以上的串口格式應為: "\\\\.\\COM10"。

dwDesiredAccess:訪問類型,0:設備查詢訪問權限(程序可以不訪問該設備就能查詢到設備屬性)

??????????????????????????????????????????????????????? GENERIC_READ:讀訪問權限

??????????????????????????????????????????????????????? GENERIC_WRITE:寫訪問權限

dwShareMode:共享方式,0:文件不能被共享,其它打開操作會失敗。

????????????????????????????????????????????????? FILE_SHARE_DELETE:其它刪除操作會成功。

????????????????????????????????????????????????? FILE_SHARE_READ:其它讀操作會成功。

????????????????????????????????????????????????? FILE_SHARE_WRITE:其它寫操作會成功。

lpSecurityAttributes:安全屬性,一個指向SECURITY_ATTRIBUTES結構的指針。

dwCreationDisposition:指定要打開的文件以存在或不存在的動作,

??????????????????????????????????????????? CREATE_NEW :創建文件;如文件存在則會失敗
??????????????????????????????????????????? CREATE_ALWAYS:創建文件,如果文件已存在則清空
??????????????????????????????????????????? OPEN_EXISTING:打開文件,文件必須已經存在,否則會失敗
??????????????????????????????????????????? OPEN_ALWAYS:打開文件,如果文件不存在則創建它
??????????????????????????????????????????? TRUNCATE_EXISTING 打開文件,且將現有文件縮短為零長度(需要GENERIC_WRITE權限),如果文件不存在則失敗

dwFlagsAndAttributes:文件屬性和標志,

???????????????????????????????????

???????????????????????????????? ? ?

??????????????????????????????????????? 如果CreateFile()打開的是命名管道客戶端,那么dwFlagsAndAttributes參數也可以包含服務信息的安全特性,

????????????????????????????????????? 當程序指定了SECURITY_SQOS_PRESENT標志,dwFlagsAndAttributes可以包含下表中一個或多個值。

???????????????????????????????????

hTemplateFile:一個指向模板文件的句柄,且該模板必須是以GENERIC_READ訪問方式打開的。如果此參數不是NULL,則會使用hTemplateFile關聯的文件的屬性和標志來創建文件。另外,如果是打開一個現有文件,則該參數被忽略。

以下為打開COM1串口的示例代碼:

HANDLE hCom; DWORD dwError; hCom = CreateFile("COM1",//對串口1進行操作GENERIC_READ|GENERIC_WRITE,//允許讀和寫0,//獨占方式NULL,//默認安全屬性OPEN_EXISTING,//串口必須存在FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//重疊方式NULL); if(hCom == INVALID_HANDLE_VALUE) {dwError = GetLastError();...... }......CloseHandle(hCom);

2、串口配置和屬性

串口打開后就可以設置接收緩沖區和發送緩沖區,這可以通過SetupComm()函數實現,如果通信的速率較高,則應該設置較大的緩沖區:

??? BOOL WINAPI SetupComm(
??? __in HANDLE hFile,//串口句柄
??? __in DWORD dwInQueue,//輸入緩沖區大小
??? __in DWORD dwOutQueue//輸出緩沖區大小
??? );

可以通過函數GetCommState()和SetCommState()來獲得和設置串口的配置

BOOL WINAPI GetCommState(
??? __in? HANDLE hFile,//串口句柄
??? __out LPDCB lpDCB//保存串口配置信息
??? );

BOOL WINAPI SetCommState(
??? __in HANDLE hFile,//串口句柄
??? __in LPDCB lpDCB//設置串口配置信息
??? );

DCB結構:

????????????????

DCB結構中常用成員:

?????????????????????????????????????????????????? DWORD BaudRate:串口波特率,常用的有: ??????????????????????????????????????????????? CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000, CBR_14400
?????????????????????????????????????????????????? DWORD fParity:指定奇偶校驗,1為激活奇偶校驗檢查?
?????????????????????????????????????????????????? DWORD Parity:校驗方式,值0~4分別對應無校驗、奇校驗、偶校驗、校驗?
????????????????????????????????????????????????????????????????????????????????? 置位(標記校驗)、校驗清零?
?????????????????????????????????????????????????? DWORD ByteSize:一個字節的數據位個數,范圍是5~8?
?????????????????????????????????????????????????? DWORD StopBits:停止位個數,0~2分別對應1位停止位、1.5位停止位、2位停止位

操作舉例:

DCB ComDCB; GetCommState(hComm,&ComDCB);//取得當前串口狀態 ComDCB.BaudRate=9600;//更改為9600bps,該值即為你要修改后的波特率 SetCommState(hComm,&ComDCB;//將更改后的參數寫入串口

GetCommProperties()可以獲得串口的屬性:

BOOL WINAPI GetCommProperties(
??? __in? HANDLE hFile,//串口句柄
??? __out LPCOMMPROP lpCommProp//保存串口屬性
??? );

CommConfigDialog()用來對通信設備進行配置,從而改變數據傳輸速率、數據位、奇偶校方法、停止位和流控制方法,當函數返回時,選定的設置在COMMCONFIG結構的DCB參數中返回:

??? BOOL WINAPI CommConfigDialog(
??? __in???? LPCWSTR lpszName,//端口名
??? __in_opt HWND hWnd,//擁有對話框的窗口句柄
??? __inout? LPCOMMCONFIG lpCC//指向一個COMMCONFIG結構
??? );

對于已經打開的串口,對端口設置進行更改應通過SetCommState()來進行。

3、讀寫串口

一般在程序中使用WriteFile()向串口中寫數據,調用ReadFile()從串口讀數據。

BOOL WINAPI WriteFile(_In_?????????HANDLE hFile,//文件句柄_In_?????????LPCVOID lpBuffer,//指向一個緩沖區,包含要寫入的數據_In_?????????DWORD nNumberOfBytesToWrite,//要寫入數據的字節數_Out_opt_????LPDWORD lpNumberOfBytesWritten,//實際寫入的字節數_Inout_opt_??LPOVERLAPPED lpOverlapped//指向一個OVERLAPPEN結構體 );

如果想要異步讀寫操作,則lpOverlappen參數不能為NULL,且在CreateFile()打開文件時應指定FILE_FLAG_OVERLAPPEN標記。

需要注意的是,當ReadFile和WriteFile返回FALSE時,不一定就是操作失敗,線程應該調用GetLastError函數分析返回的結果。例如,在重疊操作時如果操作還未完成函數就返回,那么函數就返回FALSE,而且GetLastError函數返回ERROR_IO_PENDING。這說明重疊操作還未完成。

WriteFileEx()與ReadFileEx()只能用于異步讀寫操作,且可以設置一個讀寫完成后自動調用的回調函數。

eg:

HANDLE hFile; char DataBuffer[] = "This is some test data to write to the file.";DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer);DWORD dwBytesWritten = 0;BOOL bErrorFlag = FALSE;hFile = CreateFile(argv[1], // name of the writeGENERIC_WRITE, // open for writing0, // do not shareNULL, // default securityCREATE_NEW, // create new file onlyFILE_ATTRIBUTE_NORMAL, // normal fileNULL); // no attr. templateif (hFile == INVALID_HANDLE_VALUE) { DisplayError(TEXT("CreateFile"));_tprintf(TEXT("Terminal failure: Unable to open file \"%s\" for write.\n"), argv[1]);return;}bErrorFlag = WriteFile( hFile, // open file handleDataBuffer, // start of data to writedwBytesToWrite, // number of bytes to write&dwBytesWritten, // number of bytes that were writtenNULL); // no overlapped structureif (FALSE == bErrorFlag){DisplayError(TEXT("WriteFile"));printf("Terminal failure: Unable to write to file.\n");}else{if (dwBytesWritten != dwBytesToWrite){// This is an error because a synchronous write that results in// success (WriteFile returns TRUE) should write all data as// requested. This would not necessarily be the case for// asynchronous writes.printf("Error: dwBytesWritten != dwBytesToWrite\n");}else{_tprintf(TEXT("Wrote %d bytes to %s successfully.\n"), dwBytesWritten, argv[1]);}}CloseHandle(hFile);

BOOL WINAPI ReadFile(_In_?????????HANDLE hFile,//文件句柄_Out_????????LPVOID lpBuffer,//指向一個緩沖區,保存讀取的數據_In_?????????DWORD nNumberOfBytesToRead,//要讀取數據的字節數_Out_opt_????LPDWORD lpNumberOfBytesRead,//實際讀取的字節數_Inout_opt_??LPOVERLAPPED lpOverlapped//指向一個OVERLAPPED結構 ); eg:

#define BUFFERSIZE 5 DWORD g_BytesTransferred = 0;......VOID CALLBACK FileIOCompletionRoutine(__in DWORD dwErrorCode,__in DWORD dwNumberOfBytesTransfered,__in LPOVERLAPPED lpOverlapped ){_tprintf(TEXT("Error code:\t%x\n"), dwErrorCode);_tprintf(TEXT("Number of bytes:\t%x\n"), dwNumberOfBytesTransfered);g_BytesTransferred = dwNumberOfBytesTransfered;}......HANDLE hFile; DWORD dwBytesRead = 0;char ReadBuffer[BUFFERSIZE] = {0};OVERLAPPED ol = {0};hFile = CreateFile(L"test1.dat", // file to openGENERIC_READ, // open for readingFILE_SHARE_READ, // share for readingNULL, // default securityOPEN_EXISTING, // existing file onlyFILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // normal fileNULL); // no attr. templateif (hFile == INVALID_HANDLE_VALUE) { _tprintf(TEXT("Terminal failure: unable to open file for read.\n") );return FALSE; }if( FALSE == ReadFileEx(hFile, ReadBuffer, BUFFERSIZE-1, &ol, FileIOCompletionRoutine) ){printf("Terminal failure: Unable to read from file.\n GetLastError=%08x\n", GetLastError());CloseHandle(hFile);return FALSE;}SleepEx(5000, TRUE);dwBytesRead = g_BytesTransferred;if (dwBytesRead > 0 && dwBytesRead <= BUFFERSIZE-1){ReadBuffer[dwBytesRead]='\0'; // NULL character_tprintf(TEXT("Data read from test1.dat (%d bytes): \n"), dwBytesRead);printf("%s\n", ReadBuffer);}else if (dwBytesRead == 0){_tprintf(TEXT("No data read from file test1.dat\n"));}else{printf("\n Unexpected value for dwBytesRead \n");}CloseHandle(hFile);

4、超時處理

以下轉自:http://blog.csdn.net/augusdi/article/details/10220911

在用ReadFile和WriteFile讀寫串行口時,需要考慮超時問題,如果在指定的時間內沒有讀出或寫入指定數量的字符,那么ReadFile或WriteFile的操作就會結束。要查詢當前的超時設置應調用GetCommTimeouts函數,該函數會填充一個COMMTIMEOUTS結構。調用SetCommTimeouts可以用某一個COMMTIMEOUTS結構的內容來設置超時。

BOOL GetCommTimeouts(_In_ HANDLE hFile,_Out_ LPCOMMTIMEOUTS lpCommTimeouts ); BOOL SetCommTimeouts(_In_ HANDLE hFile,_In_ LPCOMMTIMEOUTS lpCommTimeouts );

有兩種超時:間隔超時和總超時。間隔超時是指在接收時兩個字符之間的最大時延,總超時是指讀寫操作總共花費的最大時間。寫操作只支持總超時,而讀操作兩種超時均支持。

用COMMTIMEOUTS結構可以規定讀/寫操作的超時,該結構的定義為:

typedef struct _COMMTIMEOUTS{ DWORD ReadIntervalTimeout; // 讀間隔超時:接收時,兩字符間最大的時延。 DWORD ReadTotalTimeoutMultiplier; // 讀時間系數:讀取每字節的超時。 DWORD ReadTotalTimeoutConstant; // 讀時間常量:讀串口數據的固定超時。 //讀總超時 = ReadTotalTimeoutMultiplier*字節數 + ReadTotalTimeoutConstant DWORD WriteTotalTimeoutMultiplier;// 寫時間系數:寫每字節的超時。 DWORD WriteTotalTimeoutConstant; // 寫時間常量:寫串口數據的固定超時。 //寫總超時 = WriteTotalTimeoutMultiplier*字節數 + WriteTotalTimeoutConstant } COMMTIMEOUTS,*LPCOMMTIMEOUTS; 如果ReadIntervalTimeout為MAXDWORD,???并且ReadTotalTimeoutConstant和ReadTotalTimeoutMultiplier都為0,???則指定讀操作攜帶已經收到的字符立即返回,即使沒有收到任何字符;如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都為0,則在讀操作時忽略總超時數;如果WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant都為0,則在寫操作時忽略總超時數。

COMMTIMEOUTS結構的成員都以毫秒為單位,用戶設置通訊超時后,如沒有出錯,串口已經被打開。

可以看出,間隔超時和總超時的設置是不相關的,這可以方便通信程序靈活地設置各種超時。如果所有寫超時參數均為0,那么就不使用寫超時。如果ReadIntervalTimeout為0,那么就不使用讀間隔超時,如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都為0,則不使用讀總超時。如果讀間隔超時被設置成MAXDWORD并且兩個讀總超時為0,那么在讀一次輸入緩沖區中的內容后讀操作就立即完成,而不管是否讀入了要求的字符。?在用重疊方式讀寫串行口時,雖然ReadFile和WriteFile在完成操作以前就可能返回,但超時仍然是起作用的。在這種情況下,超時規定的是操作的完成時間,而不是ReadFile和WriteFile的返回時間。

5、通信狀態和通信錯誤

如果在串口通信中發生錯誤,如終端錯誤、奇偶錯誤等,I/O操作將會終止。如果程序要進一步執行I/O操作,必須調用ClearCommError()函數。ClearCommError()可以清除(獲得)通信錯誤和獲得串口的當前通信狀態。

BOOL WINAPI ClearCommError(_In_???????HANDLE hFile,//串口句柄_Out_opt_??LPDWORD lpErrors,//錯誤碼_Out_opt_??LPCOMSTAT lpStat//通訊狀態 ); lpErrors錯誤碼解釋如下:?
1-CE_BREAK:檢測到中斷信號。意思是說檢測到某個字節數據缺少合法的停止位。?
2-CE_FRAME:硬件檢測到幀錯誤。?
3-CE_IOE:通信設備發生輸入/輸出錯誤。?
4-CE_MODE:設置模式錯誤,或是hFile值錯誤。?
5-CE_OVERRUN:溢出錯誤,緩沖區容量不足,數據將丟失。?
6-CE_RXOVER:溢出錯誤。?
7-CE_RXPARITY:硬件檢查到校驗位錯誤。?
8-CE_TXFULL:發送緩沖區已滿。

lpStat通訊狀態結構體如下:

typedef struct _COMSTAT{ ... ... DWORD cbInQue; //輸入緩沖區中的字節數 DWORD cbOutQue;//輸出緩沖區中的字節數 }COMSTAT,*LPCOMSTAT; 該結構中對我們很重要的只有上面兩個參數,其他的我們可以不用管。

舉例:

unsigned char ucRxBuff[20]; COMSTAT ComStat; DWORD dwError=0; DWORD BytesRead=0; OVERLAPPED ov_Read; ov_Read.hEvent=CreateEvent(NULL, true, false, NULL);//必須創建有效事件 ClearCommError(hComm,&dwError,&ComStat);//檢查串口接收緩沖區中的數據個數 bResult=ReadFile(hComm,ucRxBuff, ComStat.cbInQue, &BytesRead, &ov_Read); //假如當前串口中有5個字節數據的話,那么執行完ClearCommError()函數后,ComStat \ 結構中的ComStat.cbInQue將被填充為5,此值在ReadFile函數中可被直接利用。 6、其它串口通信常用API

以下轉自:http://blog.csdn.net/vodomine/article/details/6542089

PurgeComm()

用途:清空串口緩沖區,在讀寫串口之前,還要用PurgeComm()函數清空緩沖區。
原型:BOOL PurgeComm(HANDLE hFile,? DWORD dwFlags );?
參數說明:?
?? -hFile:串口句柄?
?? -dwFlags:指定串口執行的動作,由以下參數組成:?
?? -PURGE_TXABORT:停止目前所有的傳輸工作立即返回不管是否完成傳輸動作。?
?? -PURGE_RXABORT:停止目前所有的讀取工作立即返回不管是否完成讀取動作。?
?? -PURGE_TXCLEAR:清除發送緩沖區的所有數據。?
?? -PURGE_RXCLEAR:清除接收緩沖區的所有數據。?
操作舉例:

PurgeComm(hComm, PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT); //清除串口的所有操作。

SetCommMask()

用途:設置串口通信事件。?
原型:BOOL SetCommMask(HANDLE hFile,? DWORD dwEvtMask);?
參數說明:?
?? -hFile:串口句柄?
?? -dwEvtMask:準備監視的串口事件掩碼?
注:在用api函數撰寫串口通信函數時大體上有兩種方法,一種是查尋法,另外一種是事件通知法。 這兩種方法的區別在于收串口數據時,前一種方法是主動的周期性的查詢串口中當前有沒有 數據;后一種方法是事先設置好需要監視的串口通信事件,然后依靠單獨開設的輔助線程進行 監視該事件是否已發生,如果沒有發生的話該線程就一直不停的等待直到該事件發生后,將該串口事件以消息的方式通知主窗體,然后主窗體收到該消息后依據不同的事件性質進行處理。 比如說當主窗體收到監視線程發來的RX_CHAR(串口中有數據)的消息后,就可以用ReadFile() 函數去讀串口。

dwEvtMask參數有如下信息掩碼位值:?
EV_BREAK:收到BREAK信號?
EV_CTS:CTS(dear to send)線路發生變化?
EV_DSR:DST(Data Set Ready)線路發生變化?
EV_ERR:線路狀態錯誤,包括了CE_FRAME/CE_OVERRUN/CE_RXPARITY 3鐘錯誤。?
EV_RING:檢測到振鈴信號。?
EV_RLSD:CD(Carrier Detect)線路信號發生變化。?
EV_RXCHAR:輸入緩沖區中已收到數據。?
EV_RXFLAG:使用SetCommState()函數設置的DCB結構中的等待字符已被傳入輸入緩沖區中。?
EV_TXEMPTY:輸出緩沖區中的數據已被完全送出。?
操作舉例:

SetCommMask(hComm,EV_RXCHAR|EV_TXEMPTY); //上面函數執行完畢后將監視串口中有無數據和發送緩沖區中的數據是否全部發送完畢。 WaitCommEvent()

用途:用來判斷用SetCommMask()函數設置的串口通信事件是否已發生。?
原型:

BOOL WINAPI WaitCommEvent(_In_???HANDLE hFile,_Out_??LPDWORD lpEvtMask,_In_???LPOVERLAPPED lpOverlapped ); 參數說明:?
?? -hFile:串口句柄?
?? -lpEvtMask:函數執行完后如果檢測到串口通信事件的話就將其寫入該參數中。?
?? -lpOverlapped:指向重疊結構,如果串口打開時指定了FILE_FLAG_OVERLAPPED標志 ,則改參數不能為NULL,且重疊結構中 應該包含一個手工重置對象句柄(通過CreateEvent()創建)。
操作舉例:

DWORD dwMask,dwTrans,dwError=0,err; OVERLAPPED os; memset(&os,0,sizeof(OVERLAPPED)); os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); if(!WaitCommEvent(hComm,&dwMask,&os)) { //如果異步操作不能立即完成的話,函數返回FALSE,并且調用GetLastError()函 //數分析錯誤原因后返回ERROR_IO_PENDING,指示異步操作正在后臺進行.這種情 //況下,在函數返回之前系統設置OVERLAPPED結構中的事件為無信號狀態,該函數 //等待用SetCommMask()函數設置的串口事件發生,共有9種事件可被監視: //EV_BREAK,EV_CTS,EV_DSR,EV_ERR,EV_RING,EV_RLSD,EV_RXCHAR, //EV_RXFLAG,EV_TXEMPTY;當其中一個事件發生或錯誤發生時,函數將 //OVERLAPPED結構中的事件置為有信號狀態,并將事件掩碼填充到dwMask參數中 if(GetLastError()==ERROR_IO_PENDING){ // /*在此等待異步操作結果,直到異步操作結束時才返回.實際上此時 */ /*WaitCommEvent()函數一直在等待串口監控的事件之一發生,當事件發*/ /*生時該函數將OVERLAPPED結構中的事件句柄置為有信號狀態,此時 */ /*GetOverlappedResult()函數發現此事件有信號后馬上返回,然后下面*/ /*的程序馬上分析WaitCommEvent()函數等到的事件是被監視的串口事 */ /*件中的哪一個,然后執行相應的動作并發出相應消息. */ // GetOverlappedResult(hComm,&os,&dwTrans,true); switch(dwMask){ case EV_RXCHAR: PostMessage(Parent,WM_COMM_RXCHAR,0,0); break; case EV_TXEMPTY: PostMessage(Parent,WM_COMM_TXEMPTY,0,0); break; case EV_ERR: switch(dwError){ case CE_FRAME: err=0; break; case CE_OVERRUN: err=1; break; case CE_RXPARITY: err=2; break; default:break; } PostMessage(Parent,WM_COMM_ERR,(WPARAM)0,(LPARAM)err); break; case EV_BREAK: PostMessage(Parent,WM_COMM_BREAK,0,0); break; case ...://其他用SetCommMask()函數設置的被監視的串口通信事件。 ... ... break; default:break; } } }

GetOverlappedResult()可以判斷一個重疊操作當前的狀態,用來判斷異步操作是否完成。 BOOL WINAPI GetOverlappedResult(_In_???HANDLE hFile,//文件句柄_In_???LPOVERLAPPED lpOverlapped,//指向欲檢查的重疊結構_Out_??LPDWORD lpNumberOfBytesTransferred,//讀或寫操作的字節數_In_???BOOL bWait ); 如果參數bWait為TRUE則函數會一直等待直到重疊機構中的hEvent變成有信號;FALSE為如果檢測到pending狀態則立即返回,此時函數返回FALSE,GetLastError()返回值為ERROR_IO_INCOMPLETE。

MSDN上關于WaitCommEvent的說明及例子:

WaitCommEvent()用來檢測指定通信設備上一組事件的發生,可以通過SetCommMask()函數來設置通信設備上的事件掩碼,GetCommMask()函數獲得通信設備上的事件掩碼。

如果重疊操作不能立即完成,則WaitCommEvent()返回FALSE,GetLastError()會返回ERROR_IO_PENDING,表示操作正在后臺進行。在WaitCommEvent返回之前,重疊結構中的hEvent成員會被設置為無信號狀態,如果當事件發生或錯誤發生時,其被設置為有信號狀態,應用程序可以調用wait functions(WaitForSingleObject、WaitForSingleObjectEx等)來判斷事件對象的狀態,然后調用GetOverlappedResult()來判斷WaitCommEvent()操作的結果,GetOverlappedResult會報告操作成功或失敗,而參數lpEvtMask會保存具體發生的事件。

#include <windows.h> #include <tchar.h> #include <assert.h> #include <stdio.h>void _tmain(int argc, TCHAR *argv[]) {HANDLE hCom;OVERLAPPED o;BOOL fSuccess;DWORD dwEvtMask;hCom = CreateFile( TEXT("\\\\.\\COM1"),GENERIC_READ | GENERIC_WRITE,0, // exclusive access NULL, // default security attributes OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL );if (hCom == INVALID_HANDLE_VALUE) {// Handle the error. printf("CreateFile failed with error %d.\n", GetLastError());return;}// Set the event mask. fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);if (!fSuccess) {// Handle the error. printf("SetCommMask failed with error %d.\n", GetLastError());return;}// Create an event object for use by WaitCommEvent. o.hEvent = CreateEvent(NULL, // default security attributes TRUE, // manual-reset event FALSE, // not signaled NULL // no name);// Initialize the rest of the OVERLAPPED structure to zero.o.Internal = 0;o.InternalHigh = 0;o.Offset = 0;o.OffsetHigh = 0;assert(o.hEvent);if (WaitCommEvent(hCom, &dwEvtMask, &o)) {if (dwEvtMask & EV_DSR) {// To do.}if (dwEvtMask & EV_CTS) {// To do. }}else{DWORD dwRet = GetLastError();if( ERROR_IO_PENDING == dwRet){printf("I/O is pending...\n");// To do.}else printf("Wait failed with error %d.\n", GetLastError());} }

7、串口通信API流程

????? 無論那種操作方式,一般都通過四個步驟來完成:??????

???????? (1) 打開串口
???????? (2) 設置和配置串口
???????? (3) 讀寫串口
???????? (4) 關閉串口

??????? 打開串口:

HANDLE hCom; DWORD dwError; hCom = CreateFile("COM1",//對串口1進行操作GENERIC_READ|GENERIC_WRITE,//允許讀和寫0,//獨占方式NULL,//默認安全屬性OPEN_EXISTING,//串口必須存在0,//同步方式,重疊方式:FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPEDNULL); if(hCom == INVALID_HANDLE_VALUE) {AfxMessageBox(L"打開串口失敗");return FALSE; }

??????? 設置和配置串口:

<span style=";">//設置緩沖區大小 SetupComm(hCom,1024,1024); //輸入緩沖區和輸出緩沖區的大小都是1024 //設置超時 COMMTIMEOUTS TimeOuts; TimeOuts.ReadIntervalTimeout=1000; //設定讀超時 TimeOuts.ReadTotalTimeoutMultiplier=500; TimeOuts.ReadTotalTimeoutConstant=5000; TimeOuts.WriteTotalTimeoutMultiplier=500; //設定寫超時 TimeOuts.WriteTotalTimeoutConstant=5000; SetCommTimeouts(hCom,&TimeOuts); //設置超時 //配置串口 DCB dcb; GetCommState(hCom,&dcb); dcb.BaudRate=9600; //波特率為9600 dcb.ByteSize=8; //每個字節有8位 dcb.Parity=NOPARITY; //無校驗 dcb.StopBits=TWOSTOPBITS; //兩個停止位 SetCommState(hCom,&dcb);//清空緩沖區 PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);//清空接收和發送緩沖區 </span>

???????????? 讀寫串口(異步):

//重疊I/O非常靈活,它也可以實現阻塞(例如我們可以設置一定要讀取到一個數據才能進行到下一步操作)。有兩種方法可以等待操作完成:一種方法是用 //像WaitForSingleObject這樣的等待函數來等待OVERLAPPED結構的hEvent成員;另一種方法是調用GetOverlappedResult函數等待,后面將演示說明。/*使用WaitForSingleObject函數來等待OVERLAPPED結構的hEvent成員*///在使用ReadFile和WriteFile重疊操作時,線程需要創建OVERLAPPED結構以供這兩個函數使用。 //線程通過OVERLAPPED結構獲得當前的操作狀態,該結構最重要的成員是hEvent。hEvent是讀寫事件。 //當串口使用異步通訊時,函數返回時操作可能還沒有完成,程序可以通過檢查該事件得知是否讀寫完畢。 //當調用ReadFile, WriteFile 函數的時候,該成員會自動被置為無信號狀態;當重疊操作完成后, //該成員變量會自動被置為有信號狀態。 char lpInBuffer[1024]; DWORD dwBytesRead=1024; COMSTAT ComStat; DWORD dwErrorFlags; OVERLAPPED m_osRead; memset(&m_osRead,0,sizeof(OVERLAPPED)); m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); ClearCommError(hCom,&dwErrorFlags,&ComStat);//清除錯誤,獲得輸入緩沖區中字節數 dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue); if(!dwBytesRead) return FALSE; BOOL bReadStatus; bReadStatus=ReadFile(hCom,lpInBuffer, dwBytesRead,&dwBytesRead,&m_osRead);//讀串口 if(!bReadStatus) //如果ReadFile函數返回FALSE { if(GetLastError()==ERROR_IO_PENDING) //GetLastError()函數返回ERROR_IO_PENDING,表明串口正在進行讀操作 { WaitForSingleObject(m_osRead.hEvent,2000); //使用WaitForSingleObject函數等待,直到讀操作完成或延時已達到2秒鐘 //當串口讀操作進行完畢后,m_osRead的hEvent事件會變為有信號 PurgeComm(hCom, PURGE_TXABORT| PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);//情況緩沖區 return dwBytesRead; } return 0; } PurgeComm(hCom, PURGE_TXABORT| PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); return dwBytesRead; /使用GetOverlappedResult()函數*///函數返回重疊操作的結果,用來判斷異步操作是否完成,它是通過判斷OVERLAPPED結構中的 //hEvent是否被置位來實現的。 char lpInBuffer[1024]; DWORD dwBytesRead=1024; BOOL bReadStatus; DWORD dwErrorFlags; COMSTAT ComStat; OVERLAPPED m_osRead;ClearCommError(hCom,&dwErrorFlags,&ComStat);//清除錯誤,獲得輸入緩沖區中字節數 if(!ComStat.cbInQue) return 0; dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue); bReadStatus=ReadFile(hCom, lpInBuffer,dwBytesRead, &dwBytesRead,&m_osRead);//讀串口 if(!bReadStatus) //如果ReadFile函數返回FALSE { if(GetLastError()==ERROR_IO_PENDING) { GetOverlappedResult(hCom, &m_osRead,&dwBytesRead,TRUE); // GetOverlappedResult函數的最后一個參數設為TRUE, //函數會一直等待,直到讀操作完成或由于錯誤而返回。 return dwBytesRead; } return 0; } return dwBytesRead;??????? 關閉串口:
CloseHandle(hComm);

總結

以上是生活随笔為你收集整理的Win32 串口编程笔记1的全部內容,希望文章能夠幫你解決所遇到的問題。

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

亚洲综合视频在线 | av网站大全免费 | 成人免费在线电影 | 久久99久久99精品免视看婷婷 | 黄色的网站免费看 | 久久精品香蕉 | 精品国产中文字幕 | 夜夜婷婷 | 天天操操| 日日操天天操夜夜操 | 狠狠干美女 | 99精品在线观看视频 | 欧美午夜剧场 | 婷婷丁香花 | 久久久91精品国产一区二区精品 | 综合网天天射 | 久久成人免费视频 | 日韩色视频在线观看 | 国产中文字幕在线视频 | 青青河边草免费直播 | 色综合人人 | 国产黄视频在线观看 | 久久美女高清视频 | 97超碰免费在线 | 最近免费中文字幕 | 97精品国自产拍在线观看 | a亚洲视频| 天天爽网站 | 国产成人在线综合 | 高潮毛片无遮挡高清免费 | www国产一区 | 深夜福利视频在线观看 | 中文字幕在线观看网 | 免费在线观看成人小视频 | 中文字幕成人一区 | 在线观看精品国产 | 久久av在线 | 国产精品理论片在线观看 | 99国产一区| 久久精品电影院 | 五月婷婷丁香色 | 久久免费99精品久久久久久 | 色www永久免费 | 亚洲精品91天天久久人人 | 日韩网站在线观看 | 国产成人精品日本亚洲999 | 丁香久久激情 | 亚洲欧美视屏 | 久久视频免费在线 | 日韩在线免费高清视频 | 国产精品完整版 | 久久国产精品99久久久久久进口 | 欧美大片大全 | 高清免费在线视频 | 色一级片 | 人人狠狠综合久久亚洲 | 欧美少妇的秘密 | 黄色一级大片在线免费看国产一 | 激情综合色综合久久综合 | 99电影| 成人av.com| 久久99精品热在线观看 | 超碰97免费观看 | 在线国产99 | 91成人精品国产刺激国语对白 | 日韩动漫免费观看高清完整版在线观看 | 丁香六月婷婷开心 | 欧美激情精品 | 日韩精品免费一线在线观看 | 特黄一级毛片 | 欧美aa在线 | 国产中文字幕视频在线 | 婷香五月 | 亚洲精品美女久久久 | 欧美日韩三区二区 | 国产在线欧美 | 日韩中文字幕a | 激情五月婷婷 | 91毛片视频 | 国产在线不卡 | 日韩有色 | 精品国产免费av | 色就色,综合激情 | 超碰公开97 | 日日日爽爽爽 | 综合久久精品 | 欧美日韩一区二区视频在线观看 | 99久久精品日本一区二区免费 | 97国产精品久久 | 免费日韩av片 | 日韩精品一区二区三区中文字幕 | 97天天干| 久久成人国产精品免费软件 | 日本特黄一级片 | 国产一区二区不卡视频 | 在线观看网站av | av在线永久免费观看 | 欧美性一级观看 | 99久久精品免费视频 | 国产99精品 | 亚洲精品国产精品99久久 | 精品免费视频. | 免费视频一区二区 | 黄色网www | 午夜精品电影 | 91日韩在线专区 | 狠狠色丁香婷婷综合久小说久 | 国产午夜剧场 | 91激情视频在线观看 | 伊人中文在线 | 97国产精品 | 丁香花在线观看免费完整版视频 | 亚洲精品在线观 | 久久国产精品精品国产色婷婷 | 亚洲综合色网站 | 四虎成人av | 午夜a区| 天天爱天天射天天干天天 | 国产精品福利在线观看 | 国产黄色大片 | 亚洲专区欧美专区 | 免费视频色 | 国产在线 一区二区三区 | 黄色大全视频 | 成人九九视频 | 久久人人精 | 国产色网站 | 亚洲欧美日韩国产一区二区 | 黄p网站在线观看 | 综合激情网... | 免费精品国产 | 日韩av免费观看网站 | 亚洲片在线观看 | 99热国内精品| 不卡电影一区二区三区 | 开心激情综合网 | 最近中文字幕完整视频高清1 | 最近日韩中文字幕中文 | 国产va饥渴难耐女保洁员在线观看 | 久久精品精品电影网 | 欧美日韩网站 | 国产视频 亚洲精品 | 99久久www| 91麻豆网站| 国产精品一区二区三区四区在线观看 | 激情小说网站亚洲综合网 | 亚洲精品国产电影 | 日韩精品久久中文字幕 | 99久久999久久久精玫瑰 | 日韩欧美电影在线观看 | 色www精品视频在线观看 | 97综合在线 | 亚洲精品乱码久久久久久写真 | 日韩中文字幕亚洲一区二区va在线 | 成人啪啪18免费游戏链接 | 免费精品国产va自在自线 | 丁香婷五月 | 国产字幕在线播放 | 欧美一级视频免费看 | 91在线精品观看 | 国产精品激情在线观看 | 亚洲精品女人久久久 | 在线看国产日韩 | 中文字幕一区二区三区乱码在线 | 久久久www成人免费精品张筱雨 | 亚洲小视频在线 | 精选久久 | 日韩二区三区在线观看 | 人人澡人人添人人爽一区二区 | 国内精品一区二区 | 91精品成人久久 | 欧美巨大荫蒂茸毛毛人妖 | 最近免费中文字幕 | 日韩久久久久久久久久久久 | 中文字幕在线视频一区二区 | 狠狠躁18三区二区一区ai明星 | 99久热精品 | 免费观看性生交大片3 | 91最新在线观看 | 色 免费观看| 激情av一区二区 | 国产一卡二卡四卡国 | 一区二区三区手机在线观看 | 亚洲国产精品成人综合 | 国产成人区 | 国产精品日韩在线 | av黄色免费在线观看 | 黄色大全免费网站 | 久久精品久久精品 | 国内精品久久影院 | 国产成人一二三 | 国产精品国产亚洲精品看不卡 | 国产精品久久9 | 高清色免费 | 国产日韩在线观看一区 | 国产糖心vlog在线观看 | 国产精品扒开做爽爽的视频 | 日韩中文在线字幕 | 色妞色视频一区二区三区四区 | 国产一区在线免费观看 | 中文在线亚洲 | 久草在线最新 | 日韩精品中文字幕久久臀 | 成人在线免费观看网站 | 色鬼综合网 | 天天夜操 | 三上悠亚在线免费 | 欧美a影视 | www.福利视频 | 中文字幕在线不卡国产视频 | 天天躁天天躁天天躁婷 | 91亚洲在线 | 丝袜制服综合网 | 久久久久久久av | 91自拍视频在线观看 | 黄网站色 | 久久爽久久爽久久av东京爽 | 日韩在线观看三区 | 97在线免费观看 | 日韩色在线观看 | 亚洲 欧美 综合 在线 精品 | 91精品91 | 日韩视频免费在线 | 国产精品视频免费观看 | 亚洲欧美精品一区 | 中文字幕网址 | 国产精品久久久久久久久费观看 | 亚洲精品婷婷 | 天天综合网久久 | 五月婷婷中文 | 日本一区二区不卡高清 | 在线免费av观看 | 夜夜澡人模人人添人人看 | 久久精品在线 | 97色视频在线 | 欧美激情第八页 | av网站免费线看精品 | 精品国产片| 婷婷丁香花 | 丝袜美女视频网站 | 久久国产午夜精品理论片最新版本 | 在线观看一 | 亚洲成a人片77777kkkk1在线观看 | 在线观看黄色免费视频 | 亚洲一区二区精品在线 | 天堂网一区二区 | 一区久久久 | 欧美日韩在线视频一区二区 | 国产精品成人自产拍在线观看 | 人人看人人草 | 激情综合婷婷 | 成片免费观看视频大全 | 久久综合色天天久久综合图片 | 午夜三级理论 | 日韩精品一区二区三区高清免费 | 日本久久精品 | 欧美性做爰猛烈叫床潮 | 日本不卡一区二区三区在线观看 | 久青草视频 | 国产一区精品在线观看 | 在线播放国产一区二区三区 | 国产精品美女视频 | 日韩 在线观看 | 国产一级视频免费看 | 免费看一级片 | 亚洲日本va午夜在线电影 | 国产精品丝袜 | 97超碰在线免费观看 | 亚洲婷婷综合色高清在线 | 午夜10000 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 日韩三级在线观看 | 欧美成人a在线 | 天天射夜夜爽 | 久久久国产精品一区二区三区 | 欧美福利片在线观看 | 久久伊人国产精品 | 亚州精品天堂中文字幕 | 日韩欧美不卡 | 精品亚洲视频在线观看 | 亚洲情影院 | 日本中文字幕电影在线免费观看 | 亚洲综合精品视频 | 在线成人性视频 | 麻豆成人网 | 人人涩 | 日日干日日 | 日韩av有码在线 | www.com黄| 亚洲成免费| 丁香九月婷婷综合 | 99久久99久久精品免费 | 日韩网站在线免费观看 | 精品人人人 | 正在播放五月婷婷狠狠干 | 久久精品高清视频 | 国产精品免费观看国产网曝瓜 | 天天视频色 | 免费亚洲精品视频 | 国模视频一区二区 | 亚洲精品大片www | 在线免费黄色av | 精品一二三四五区 | 欧美精品久久久久久久免费 | 日韩在线视频播放 | 国产一级二级在线播放 | 久久激情久久 | 国产一区二区三区免费在线观看 | 黄色片网站大全 | 色国产精品一区在线观看 | 中文字幕在线视频第一页 | av国产在线观看 | 久久国产精品小视频 | 欧美日韩精品免费观看视频 | 日韩欧美一区二区不卡 | 国产一级性生活 | 日日干日日 | 成人免费视频播放 | 日韩高清免费在线观看 | 国产精品美女久久久久久2018 | 久久伊人综合 | 毛片www| 精品女同一区二区三区在线观看 | 国产一级二级在线观看 | 亚洲精品日韩一区二区电影 | 六月婷操| 日本三级全黄少妇三2023 | 91福利社区在线观看 | 91女子私密保健养生少妇 | 亚洲理论在线观看 | 免费在线观看成年人视频 | 天天干天天操人体 | 免费看一级黄色 | 狠狠干婷婷 | 国产黄色精品在线 | 久久不卡电影 | 久久综合久久鬼 | 国产手机在线播放 | 国产精品久久9 | 天天色天天搞 | 特级大胆西西4444www | 一级做a视频| 天天色天天爱天天射综合 | 激情喷水 | 中文永久免费观看 | 欧美国产精品一区二区 | 免费视频黄 | 欧洲成人免费 | 天天爱综合 | 中文字幕在线视频免费播放 | 久久久久电影网站 | 五月天婷婷综合 | 天天干中文字幕 | 中文av网站 | 国产精品一区二区久久 | 黄色av影院 | 亚洲精品视频在线观看免费 | 激情视频网页 | av在线一| 亚洲人在线7777777精品 | 91黄色免费看 | 国产精品久久久久久久久岛 | 国产精品专区在线 | 欧美国产视频在线 | 精品一区电影 | 最近中文字幕国语免费高清6 | 欧美日韩啪啪 | 日韩亚洲在线观看 | 日韩在线一区二区免费 | 一区二区三区在线观看免费 | 久久精品1区 | 国产精品一区二区无线 | av观看在线观看 | 国产精品淫 | a天堂在线看 | 91精品视频在线观看免费 | 天天干天天碰 | 精品产品国产在线不卡 | 亚洲最新精品 | 国产91对白在线 | 免费看一级黄色大全 | 午夜久久美女 | 五月综合激情 | 精品麻豆入口免费 | 久草在线视频网站 | www.夜夜爱| 久99视频| 亚洲精品视频免费在线 | 日韩精品久久一区二区三区 | 亚洲男男gⅴgay双龙 | 九九有精品 | 中文字幕色综合网 | 黄色片免费电影 | 精品国产欧美一区二区三区不卡 | 国产免费亚洲高清 | 日本久久久久久久久久久 | 伊人天天色 | 韩国精品一区二区三区六区色诱 | 丁香电影小说免费视频观看 | 国产亚洲精品久久久久久 | 亚洲精品88欧美一区二区 | 亚洲天堂网在线视频 | 成人h视频 | 1024久久| 欧美色图30p| 日韩在线理论 | 欧美男女爱爱视频 | 又爽又黄在线观看 | 日日干激情五月 | 久久久高清一区二区三区 | 午夜久久久久久久久 | 国产一区二区三区四区在线 | 精品视频在线免费观看 | 欧美成人69av | 国产精久久久久久妇女av | 97超碰在线久草超碰在线观看 | 91九色蝌蚪视频 | 狠狠综合网 | 91国内在线| 亚洲男男gaygayxxxgv | 九色精品 | 国产高清成人av | 亚洲黄色在线观看 | 欧美成人在线网站 | 久色小说| 中文字幕超清在线免费 | 久久人人爽爽 | 99这里只有久久精品视频 | 亚洲精品在线资源 | 色哟哟国产精品 | 亚洲最大在线视频 | 91成人精品 | 玖玖视频精品 | 探花视频网站 | 九九国产精品视频 | 日本护士三级少妇三级999 | 97国产电影 | 在线视频免费观看 | 国产美女精彩久久 | 久精品视频免费观看2 | 一区二区中文字幕在线观看 | 97视频在线免费 | 久久爱综合| 99精品免费久久久久久久久 | 午夜精品久久久久久久99 | 黄污在线观看 | 美女黄濒 | 日日干日日 | 国产精品久久久久久模特 | 亚洲三级在线免费观看 | 91网站免费观看 | 欧美激情视频一区二区三区免费 | 亚洲乱码精品久久久 | 麻豆高清免费国产一区 | 91麻豆传媒| 亚洲欧美日本一区二区三区 | 亚洲精品一区二区在线观看 | 中文字幕人成乱码在线观看 | 婷婷丁香在线 | 国产午夜精品av一区二区 | 成年人免费电影在线观看 | av福利在线看 | 99re8这里有精品热视频免费 | av日韩在线网站 | 一区二区三区在线免费观看 | 日本三级香港三级人妇99 | 99色在线视频 | 91在线播放综合 | 欧美日韩国产在线精品 | 亚洲女同ⅹxx女同tv | 国产美女黄网站免费 | 精品免费一区二区三区 | 27xxoo无遮挡动态视频 | 欧洲精品一区二区 | 国产国产人免费人成免费视频 | 精品成人在线 | 国产精品av在线免费观看 | 国产亚洲在线 | 国产精品久久久久久久久久免费 | 亚洲午夜久久久综合37日本 | 中文字幕 国产视频 | 欧美无极色 | 国产精品福利久久久 | 日本中文在线 | 伊人网av| 蜜臀久久99精品久久久无需会员 | 亚洲国产精品久久久 | 色婷婷久久久 | 免费看av片网站 | 国产xvideos免费视频播放 | 日韩精品黄| 精品在线免费视频 | 福利片视频区 | 激情视频91 | 在线观看中文字幕亚洲 | 亚洲一级影院 | 欧美一区二区日韩一区二区 | 热久久免费国产视频 | 天天干天天在线 | 国产99久久 | 日韩免费视频一区二区 | 国产精品美女久久久网av | 欧美伦理一区二区 | 欧美久久久久久久久久 | 国产玖玖视频 | 一区二区视频电影在线观看 | 日韩mv欧美mv国产精品 | 狠狠色狠狠色合久久伊人 | 久草青青在线观看 | 国产亚洲精品久久网站 | 成人毛片久久 | 99久久精品日本一区二区免费 | 日韩.com| 亚洲精品资源 | 国产香蕉av | 久久久久久久久毛片精品 | 成人免费在线播放 | 99精品免费 | 欧美电影在线观看 | av线上看 | 午夜精品福利一区二区三区蜜桃 | 一区二区三区av在线 | 国产精品igao视频网入口 | 国产精品com| 91福利在线导航 | 99久久久国产精品 | 丁香六月婷婷激情 | 中文字幕av在线播放 | 亚洲视频 中文字幕 | 丝袜美腿在线视频 | 天天搞天天干天天色 | 亚洲波多野结衣 | 久久婷婷精品 | 最近2019年日本中文免费字幕 | 亚洲精品国偷拍自产在线观看 | 五月天高清欧美mv | 久草视频在线免费播放 | 开心色激情网 | 日韩一区正在播放 | 探花国产在线 | 亚洲无吗视频在线 | 香蕉视频国产在线 | 国产中文字幕视频在线观看 | 久久怡红院 | 四虎影视8848dvd | 久产久精国产品 | 97天天综合网 | 午夜久草 | 7777精品伊人久久久大香线蕉 | 久久官网 | 色欧美成人精品a∨在线观看 | 国产成人在线观看 | 96香蕉视频 | 久久精品亚洲综合专区 | 99精品国产一区二区三区麻豆 | 国产黄色一级片在线 | 欧美大片在线观看一区 | 91丨九色丨丝袜 | 日韩网站在线观看 | 欧美性极品xxxx娇小 | 国产在线观看a | 色偷偷88欧美精品久久久 | 久久手机免费视频 | 91中文字幕在线播放 | 色狠狠干 | 在线免费精品视频 | 在线视频观看91 | 久久成人国产 | 狠狠网亚洲精品 | 麻豆手机在线 | 国产精品第一页在线 | 日韩网站在线免费观看 | 91在线视频免费91 | 国产精品第2页 | 91麻豆国产福利在线观看 | 久久精品久久精品久久精品 | 成年人电影免费看 | 六月婷婷久香在线视频 | 二区三区在线观看 | 久久久久中文字幕 | 日韩精品视频在线观看免费 | 成人资源在线观看 | 国产精品99久久久久久武松影视 | 国产人成一区二区三区影院 | 国产九九精品 | www.神马久久 | 日韩高清在线不卡 | 亚洲91精品| 日日草夜夜操 | 日韩高清国产精品 | 亚洲精品456在线播放乱码 | 午夜美女av| 色欲综合视频天天天 | 91精品日韩| 久久国产精品偷 | 天天操天天操天天操天天操天天操天天操 | 国产精品毛片网 | 91精品久久久久久综合乱菊 | 日韩免费在线观看视频 | 特级西西www44高清大胆图片 | 亚洲欧美视频一区二区三区 | 中文字幕日本电影 | 9999国产| 亚洲欧洲日韩在线观看 | 天天操夜夜做 | 国产99久久久精品视频 | 日韩三级中文字幕 | www.久久久| 午夜色影院 | av片中文字幕| 超碰在线公开免费 | 久久久五月婷婷 | av官网在线 | 久久综合五月天婷婷伊人 | 在线观看视频在线 | 久久欧美在线电影 | 国产亚洲精品免费 | 国产精品免费久久久 | 中文字幕在线观看视频一区 | 中文字幕免费观看全部电影 | 亚洲精品动漫在线 | 国产一二三在线视频 | 人人干干人人 | 狠狠干狠狠久久 | 人人狠狠综合久久亚洲 | 国产精品网红福利 | av中文字幕日韩 | 91在线看 | 九九久久久久久久久激情 | 91cn国产在线 | 黄色av电影免费观看 | 久久精品国产精品 | 国产视频一区二区在线观看 | 天天翘av| 久久精彩视频 | 在线观看中文字幕2021 | 丁香视频免费观看 | 日韩在线短视频 | 日日夜夜天天操 | 天天在线免费视频 | 欧美另类交在线观看 | 操老逼免费视频 | 亚洲在线视频免费 | 久久精品中文字幕 | 日韩高清无线码2023 | 青草视频免费观看 | 81精品国产乱码久久久久久 | 四虎永久网站 | 69国产盗摄一区二区三区五区 | 久久久久久美女 | 91久久奴性调教 | av黄色免费看| 国产一区欧美日韩 | 亚洲国产精品免费 | 色综合天天做天天爱 | 成人一级片视频 | 国产精品小视频网站 | 999久久久免费视频 午夜国产在线观看 | 色欧美88888久久久久久影院 | 亚洲人人网 | 99久久精品免费看 | 婷婷五综合| 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | japanesexxxhd奶水 91在线精品一区二区 | 免费久久精品视频 | 欧美日韩在线视频免费 | 久久久久成| 91免费观看网站 | 国产精品一区二区三区99 | 久久久综合九色合综国产精品 | 亚洲爱av | 中文字幕av影院 | 一区二区三区高清 | 日韩女同一区二区三区在线观看 | 日韩在线视频播放 | a天堂中文在线 | 国产又粗又猛又爽 | 香蕉视频国产在线 | 成人欧美在线 | 精品人人人 | 玖玖在线免费视频 | 色多视频在线观看 | 视频在线观看91 | 色综合www| 久久69精品 | 91精品国产综合久久福利 | 在线91网| 精品久久一区二区三区 | 五月天综合激情网 | av福利第一导航 | 91精品国产成人 | 国产录像在线观看 | 在线不卡a| 黄色成人91 | 国产免费a | 99热手机在线观看 | 人人爽久久久噜噜噜电影 | 国产精品12 | 日韩中文字幕网站 | 欧美激情精品久久久久久免费印度 | 天天色天天射综合网 | 国产精品美女久久久久久久 | 婷婷在线网 | 亚洲精品免费视频 | 天天草天天干天天射 | 久久艹在线观看 | 日本精品视频在线播放 | 激情综合网天天干 | 狠狠色丁香婷综合久久 | 69国产盗摄一区二区三区五区 | 亚洲激情在线 | 黄色特级片 | 国产日韩中文在线 | av中文字幕免费在线观看 | 久久久精品久久 | www麻豆视频 | 国产资源| av电影一区二区三区 | 偷拍区另类综合在线 | 麻豆首页| 国产视频首页 | 久久精品国产免费观看 | 国产美女被啪进深处喷白浆视频 | 91大神视频网站 | 97国产大学生情侣酒店的特点 | 蜜桃av观看 | 日韩一区在线免费观看 | 婷婷激情欧美 | 亚洲另类在线视频 | 国产一级电影免费观看 | 欧美在线视频日韩 | 天天se天天cao天天干 | 欧美精品午夜 | 伊人久久五月天 | 婷婷色中文字幕 | 久香蕉 | 国产日韩欧美视频在线观看 | 五月天狠狠操 | 国产成人区| 永久免费精品视频 | 天天色官网 | 福利视频在线看 | 视频一区二区在线 | 韩国av永久免费 | 国内久久久久久 | 极品久久久 | 狠狠色丁香婷婷综合久小说久 | 国内精品99 | 久久久国产一区二区三区 | 91亚洲综合 | 丁香五月亚洲综合在线 | 五月亚洲| 四虎精品成人免费网站 | 黄色在线观看污 | 黄色国产大片 | 天天操福利视频 | 欧美成人一区二区 | 色久网| www国产在线 | 成人黄色影片在线 | 六月激情丁香 | 国产精品视频线看 | 欧美日韩不卡在线观看 | 国产日韩一区在线 | 蜜臀av麻豆| 日韩av在线一区二区 | 欧美日韩超碰 | 人人看人人 | 亚洲免费观看视频 | 欧美伦理一区二区三区 | 亚洲视频在线观看 | h视频在线看 | a精品视频| 国产精品视频地址 | 91精品国产福利在线观看 | 手机av在线网站 | 3d黄动漫免费看 | 国产免费美女 | 婷婷六月天综合 | 最近免费中文视频 | 日日日干 | 日韩在线国产精品 | 日本三级在线观看中文字 | 欧美在线观看视频一区二区 | 91九色老 | 欧美激情在线网站 | 在线观看视频黄 | 久久免费视频7 | 九九热中文字幕 | 久久久久五月 | 中文字幕高清在线 | 不卡av电影在线 | 国产涩涩在线观看 | 96久久 | 麻豆91在线观看 | 少妇bbb搡bbbb搡bbbb | 精品国产亚洲一区二区麻豆 | 99精品视频99 | 日韩免费电影一区二区三区 | 久久精品一二区 | 超碰97在线人人 | 韩国三级av在线 | 国产日韩精品一区二区三区在线 | 91av大全 | 亚洲精品在线资源 | 性色av一区二区三区在线观看 | av中文字幕日韩 | 色射爱| 福利片免费看 | 久草在线手机观看 | 欧美夫妻生活视频 | 69av国产 | 久久综合之合合综合久久 | 三级av在线 | 九九免费在线观看视频 | 香蕉久草在线 | 色诱亚洲精品久久久久久 | av一区二区三区在线 | 国产精品系列在线观看 | 伊人伊成久久人综合网小说 | 手机av观看 | 99久久精品免费 | 99草视频| 久久综合成人网 | 国产精品一区二区免费 | 久久久久女教师免费一区 | 国产美女被啪进深处喷白浆视频 | 国产资源在线视频 | 国产在线视频一区二区三区 | 成人福利在线 | 激情视频免费在线观看 | 午夜影院日本 | 国产成人精品999在线观看 | 国产精品一区二区无线 | 日韩亚洲在线视频 | 久久久久亚洲精品男人的天堂 | 国产亚洲视频中文字幕视频 | www.激情五月.com| 日韩精品一区二区三区三炮视频 | 天天操天天操天天操天天操天天操 | 天天撸夜夜操 | 欧美吞精 | 日韩中文字幕网站 | 日韩午夜大片 | 色综合久久88色综合天天人守婷 | 亚洲a在线观看 | 最近日本中文字幕 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日本在线观看一区二区 | 国产一级免费在线 | 欧美精品久久久久久久亚洲调教 | 在线免费观看麻豆视频 | 美女性爽视频国产免费app | 免费人人干 | 国产精品va在线观看入 | 日韩精品免费专区 | 国产不卡一 | 在线性视频日韩欧美 | 88av视频 | 摸bbb搡bbb搡bbbb| 黄p在线播放 | 国产高清视频免费最新在线 | www.夜夜草| 91在线www | 中文av日韩 | 国产99久久久国产精品免费看 | 中文字幕一区二区三区在线视频 | 久爱精品在线 | 精品999在线观看 | 黄色国产在线观看 | 久久久久久黄色 | 国产字幕在线播放 | 国产精品一区二区三区四区在线观看 | 国产精品一区二区果冻传媒 | 在线观看亚洲免费视频 | 一级精品视频在线观看宜春院 | 在线观看黄网站 | 四虎国产视频 | 97av视频在线观看 | 精品三级av | 丝袜美女视频网站 | 久久久国产精品网站 | 亚洲精品国精品久久99热 | 综合久色 | 91精品国产高清 | 色婷婷啪啪免费在线电影观看 | www.香蕉视频在线观看 | 亚洲激情 欧美激情 | 日韩美av在线 | 特级黄录像视频 | 日韩中文久久 | 久久久久久国产精品久久 | 九七视频在线观看 | 中文字幕 二区 | 免费国产在线视频 | 久久久麻豆视频 | 片网站 | 97国产一区 | 久久er99热精品一区二区 | 国产黄色免费观看 | 日韩乱色精品一区二区 | 福利视频一区二区 | 国产毛片久久久 | 日韩精品在线播放 | 欧美精品久久久久久久久久丰满 | a久久免费视频 | 97国产一区| 伊人天堂网 | 亚洲精品电影在线 | 成年人视频在线免费 | 日韩av影视在线观看 | 日本性高潮视频 | 久久精品影片 | 日韩视频区 | 午夜手机电影 | 天天干天天在线 | 久久久免费观看完整版 | 福利一区二区 | 国产精品国产三级国产aⅴ9色 | 97超级碰碰碰视频在线观看 | 91精品视频免费 | www.色就是色 | 国产精品 日韩 欧美 | 高潮久久久久久久久 | 九九av| 欧美精品久久久久久久久久 | 亚洲一区二区三区91 | 日本三级大片 | 成人免费视频免费观看 | 中文字幕精品三级久久久 | 久久久久国产一区二区三区四区 | 一区二区视频电影在线观看 | avlulu久久精品| 欧美精品二区 | 色成人亚洲 | 亚洲电影影音先锋 | 天天操天天操天天爽 | 看av免费网站| 在线观看国产成人av片 | www.狠狠操| 久草干| 极品美女被弄高潮视频网站 | 狠狠色噜噜狠狠狠狠2021天天 | 亚洲日本精品 | 青青草国产在线 | 狠狠干综合 | 亚洲成成品网站 | 久久国产精品免费视频 | 香蕉在线播放 | 欧美韩日在线 | 777久久久| 久草在线中文888 | 开心综合网 | 成人网看片 | 欧美精品一区二区在线播放 | 中文字幕在线观看视频一区二区三区 | 97日日碰人人模人人澡分享吧 | 最近日本字幕mv免费观看在线 | 丰满少妇高潮在线观看 | 91手机电视 | 91麻豆国产福利在线观看 | 免费在线观看av网址 | 97在线观| 精品一区二区在线免费观看 | 黄色在线免费观看网站 | 国产亚洲精品成人av久久ww | 国产精品一区二区中文字幕 | 中文字幕乱码电影 | 国产一区二区在线免费播放 | 免费观看性生交 | 黄a在线看| 亚洲精品91天天久久人人 | 久久国产精品成人免费浪潮 | 免费看黄电影 | 国产xxxx做受性欧美88 | 欧美午夜寂寞影院 | 日韩av片在线 | 国产91在线免费视频 | 国产精品久久免费看 | 国产中的精品av小宝探花 | 久久免费观看少妇a级毛片 久久久久成人免费 | 91成人区 | 国产精品欧美日韩 | 99久久99视频只有精品 | 欧美日韩久久不卡 | 欧美日韩中文国产一区发布 | 又紧又大又爽精品一区二区 | 国产一级二级av | 福利一区二区在线 | 99久久久久 | 久久久久久国产一区二区三区 | 亚洲综合网 | 久久影院午夜论 | 亚洲一级黄色av | 天天做日日爱夜夜爽 | 国产成视频在线观看 | 激情综合久久 | 2019中文|