当前位置: 代码迷 >> 单片机 >> vc++实现串口通信为何失败解决方法
  详细解决方案

vc++实现串口通信为何失败解决方法

热度:308   发布时间:2016-04-28 16:32:02.0
vc++实现串口通信为何失败
请教一个问题,我写了一个串口读写数据的程序,读出来的数据全是0,如果先借助像labview/串口调试助手这样的工具和串口通信后,再运行自己写的程序才能正确读写数据,我觉得是串口配置出了一点问题,以下是打开串口配置串口的代码,请各位大侠帮忙检查哪里出了问题???谢谢


hCom=CreateFile("COM4",//COM口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //异步方式
NULL);
if(hCom==(HANDLE)-1)
{
AfxMessageBox("打开COM失败!");
return FALSE;
}

SetupComm(hCom,1024,1024); //输入缓冲区和输出缓冲区的大小

COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier=0;
TimeOuts.ReadTotalTimeoutConstant=0;
//在读一次输入缓冲区的内容后读操作就立即返回,
//而不管是否读入了要求的字符。


//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=100;
TimeOuts.WriteTotalTimeoutConstant=500;
SetCommTimeouts(hCom,&TimeOuts); //设置超时

DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=2; //偶校验
dcb.StopBits=1; //1个停止位
SetCommState(hCom,&dcb);

PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);

  下面接着对串口发指令数据,和接收串口返回的数据


------解决方案--------------------
这个参数
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
改成
0
如果你用了异步方式,必须设置一个OVERLAPPED类型的结构参数
------解决方案--------------------
你不用偶校验试试。可能上下不匹配。
------解决方案--------------------
探讨
这个参数
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
改成
0
如果你用了异步方式,必须设置一个OVERLAPPED类型的结构参数

------解决方案--------------------
探讨

这个参数
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
改成
0
如果你用了异步方式,必须设置一个OVERLAPPED类型的结构参数
  相关解决方案