说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

等急救!串口通信欺负我!

编辑:说三道四文库 发布时间:2018-02-23 06:37
HTML文档下载 WORD文档下载 PDF文档下载
学c++没多久,遇上串口通信题,可我不太懂win32通信API,所以向大虾们讨帮忙:
发送方:打开一文件,从串口发送.(端口号/波特率为可选,置DTR,RTS.)
接受方:接收数据,保存文件.(清DTR,RTS).
半双工工作就可以了.
cavas@263.net
用VC++6.0 API实现,源码如下:

DCB ComDcb;
        HANDLE hCom; //global handle

hCom = CreateFile("COM1",GENERIC_READ and GENERIC_WRITE,0,
   NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if(hCom==INVALID_HANDLE_VALUE)
{
              AfxMessageBox("无法打开串行口");
}
else
{
COMMTIMEOUTS  CommTimeOuts ; 
SetCommMask(hCom, EV_RXCHAR ) ;
SetupComm(hCom, 4096, 4096 ) ;
PurgeComm(hCom, PURGE_TXABORT  and  PURGE_RXABORT  and             
PURGE_TXCLEAR  and  PURGE_RXCLEAR ) ;
  
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
CommTimeOuts.ReadTotalTimeoutConstant = 4000 ;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 4000 ;
SetCommTimeouts(hCom, &CommTimeOuts );
    
ComDcb.DCBlength = sizeof( DCB ) ;
GetCommState( hCom, &ComDcb ) ;
ComDcb.BaudRate =9600;//波特率
ComDcb.ByteSize = 8;//数据位
ComDcb.Parity = 0;   //校验 0-4=no,odd,even,mark,space 

        //ComDcb.fRtsControl=0;//流控制
        //ComDcb.fDtrControl=0; //流控制
//ComDcb.fOutX=1; //流控制
        //ComDcb.fInX=1; //流控制
ComDcb.StopBits = 0;//停止位
SetCommState(hCom, &ComDcb ) ;
}
接收可用定时器或线程等
DWORD dRead,dReadNum;
unsigned char buff[200];
dRead=ReadFile(hCom,buff,100,&dReadNum,NULL);//接收100个字符,
//dReadNum为实际接受各数
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘