|
win32 api 同步读取串口 没读到想要的数据
[复制链接]
用api写的同步读串口程序,运行环境是windows xp,我在另一台电脑发送123456789
而读到的东西却是4Vx4Vx4Vx4Vx
请问是怎么回事呢?
听说win2000以上不支持同步读写了,有这一说吗?
DCB ComDcb;//全局dcb
HANDLE hCom;//全局串口句柄
char buff [200];
bool ReadData(HWND hwnd)
{
hCom = CreateFile ("COM1", //串口号
GENERIC_READ| GENERIC_WRITE,//允许读和写
0,//不支持共享
NULL,
OPEN_EXISTING,//打开而不是创建
FILE_ATTRIBUTE_NORMAL,//
NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
MessageBox(hwnd,"无法打开串行口","message",MB_OK);
}
else
{
COMMTIMEOUTS CommTimeOuts ;
SetCommMask(hCom, EV_RXCHAR ) ;
SetupComm(hCom, 4096, 4096 ) ; /*设置收发缓冲区 尺寸为4K */
PurgeComm(hCom, PURGE_TXABORT| PURGE_RXABORT |
PURGE_TXCLEAR| PURGE_RXCLEAR ) ; //清收发缓冲区
//以下初始化结构变量CommTimeOuts, 设置超时参数
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 */
SetCommState(hCom, &ComDcb ) ;
} //设置新的通信参数
//接收可用定时器或线程等
DWORD dRead = 0,dReadNum = 0;
dRead=ReadFile(hCom, buff, 100, &dReadNum, NULL); //接收100个字符,
//dReadNum为实际接收字节数
if(!dRead)
{
MessageBox(hwnd, "读串口操作失败!", "警告", MB_OK);
return false;
}
else
return true;
}
|
|