|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
串口通信老不成功!請高手指點(diǎn)!收發(fā)都不成功 |
| 作者:black 欄目:技術(shù)交流 |
OVERLAPPED m_OverlappedRead, m_OverlappedWrite; HANDLE m_hComDev; DWORD dwError; DCB dcb; BOOL bReadStatus; DWORD dwErrorFlags; COMSTAT ComStat; BOOL bWriteStat; COMMTIMEOUTS CommTimeOuts; opensi() { m_hComDev = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL ); if( m_hComDev == NULL ) return( FALSE ); CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF; CommTimeOuts.ReadTotalTimeoutMultiplier = 0; CommTimeOuts.ReadTotalTimeoutConstant = 0; CommTimeOuts.WriteTotalTimeoutMultiplier = 0; CommTimeOuts.WriteTotalTimeoutConstant = 5000; SetCommTimeouts( m_hComDev, &CommTimeOuts ); memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) ); memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) ); m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); dcb.DCBlength = sizeof( DCB ); GetCommState( m_hComDev, &dcb ); dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.fBinary = TRUE; fSuccess1 = SetCommState( m_hComDev, &dcb ); fSuccess2 = SetupComm( m_hComDev, 10000.html">10000, 10000.html">10000 ); if( !SetCommState( m_hComDev, &dcb )|| !SetupComm( m_hComDev, 10000.html">10000, 10000.html">10000 ) || m_OverlappedRead.hEvent == NULL || m_OverlappedWrite.hEvent == NULL ){ dwError = GetLastError(); if( m_OverlappedRead.hEvent != NULL) CloseHandle( m_OverlappedRead.hEvent ); if( m_OverlappedWrite.hEvent != NULL) CloseHandle( m_OverlappedWrite.hEvent ); CloseHandle( m_hComDev ); return FALSE; } } ReadData( void *buffer, DWORD dwBytesRead) { if( m_hComDev == NULL ) return( 0 ); ClearCommError( m_hComDev, &dwErrorFlags, &ComStat ); if( !ComStat.cbInQue ) return 0; dwBytesRead = min(dwBytesRead,(DWORD) ComStat.cbInQue); bReadStatus = ReadFile( m_hComDev, sdjfsd, dwBytesRead, &dwBytesRead, &m_OverlappedRead ); if( !bReadStatus ){ if( GetLastError() == ERROR_IO_PENDING ){ if(WaitForSingleObject( m_OverlappedRead.hEvent, 1000) == WAIT_OBJECT_0) return 1; } return 0; } return 1; } SendData( const CHAR *buffer, DWORD dwBytesWritten) { bWriteStat = WriteFile( m_hComDev, buffer, dwBytesWritten, &dwBytesWritten, &m_OverlappedWrite ); if( !bWriteStat){ if ( GetLastError() == ERROR_IO_PENDING ) { if(WaitForSingleObject( m_OverlappedWrite.hEvent, 10000.html">10000 ) == WAIT_OBJECT_0) return 1; else return 0; } return 0; } return 1; } main() { int i; unsigned CHAR data[16]; opens(); for (i=0;i<16;i++) data[i]=i; SendDataCRC(16, data); ReadData(data, 16); } |
| 2樓: | >>參與討論 |
| 作者: black 于 2005/2/3 20:57:00 發(fā)布:
這是WIN98下用VC環(huán)境API函數(shù)編寫的! |
|
| 3樓: | >>參與討論 |
| 作者: ylz111 于 2005/2/4 10:12:00 發(fā)布:
用示波器觀察一下串口是否能發(fā)出數(shù)據(jù)波形? |
|
| 4樓: | >>參與討論 |
| 作者: mengjunok 于 2005/2/4 16:06:00 發(fā)布:
自環(huán)一下 |
|
| 5樓: | >>參與討論 |
| 作者: black 于 2005/2/4 22:26:00 發(fā)布:
自環(huán)還是不行。。。 |
|
| 6樓: | >>參與討論 |
| 作者: hsb.siq 于 2005/2/5 13:04:00 發(fā)布:
微軟的網(wǎng)站應(yīng)有這方面的實(shí)例 我以前用C#做過一個。發(fā)送接收都行,就不知如何用PC對單片機(jī)進(jìn)行實(shí)時監(jiān)控。 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |