[求助]串口开发,读取数据错乱

ITripleTong 2017-07-11 01:44:54
出现问题是这样的:
1.当我程序运行起来,串口已经打开准备接收数据,这时用串口助手向串口发送数据,数据正常。
2.但是我先用串口助手不停发数据,然后再打开写的程序接收程序,数据出现错乱,这里的错乱不是指顺序错乱,而是出现了发送数据里根本没有的数据。

不停发送的是16字节数据:AA 00 00 08 00 00 00 01 00 AA 00 00 AA 00 AA
情况1数据正常:

情况2数据错乱:


出现了根本没有的数据。

我用两个串口助手互传,都接收正常,肯定是程序的问题。所以希望大神们帮我看一看代码。
我准备用的是线程+同步IO读取。

我先是用C++写,之后用C#写均出现这个问题。
C++的代码:
void SETUP_DCB()
{
DCB dcb;
memset(&dcb, 0, sizeof(DCB) );
GetCommState(hComFile, &dcb);
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 9600; //波特率
dcb.fParity = FALSE; //无奇偶校验
dcb.Parity = NOPARITY; //无校验
dcb.StopBits = ONESTOPBIT; //1位停止位
dcb.ByteSize = 8; //数据位数
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = 0;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fErrorChar = 0;
dcb.fBinary = 1;
dcb.fNull = 0;
dcb.fAbortOnError = 0;
dcb.wReserved = 0;
dcb.XonLim = 2;
dcb.XoffLim = 4;
dcb.XonChar = 0x13;
dcb.XoffChar = 0x19;
dcb.EvtChar = 0;
SetCommState(hComFile, &dcb);
}

hComFile = CreateFile(L"COM3", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hComFile == INVALID_HANDLE_VALUE)
{
CloseHandle(hComFile);
return TRUE;
}
SETUP_DCB();
hThread = CreateThread(NULL, 0, MyThreadFunction, NULL, 0, &ThreadID);

读取线程的代码
DWORD WINAPI MyThreadFunction(LPVOID lpParam)
{
...
i = ReadCount;
while (i)
{
ClearCommError(hComFile, &Errors, &comstat);
ReadFile(hComFile, pBuffer + ReadCount - i, i, &NumberOfRead, NULL);
i -= NumberOfRead;
}
...
}


C#写测试,也读取乱码
 _serialPort = new SerialPort();
_serialPort.PortName = "com3";
_serialPort.BaudRate = 9600;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.Handshake = Handshake.XOnXOff;

_serialPort.Open();

for (int i = 0; i < 17; i++)
{
BUFFER[i] = (byte)_serialPort.ReadByte();
}
...全文
1157 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2017-07-29
  • 打赏
  • 举报
回复
1 检查波特率,校验/停止位等设置是否一致 2 串口是流式设备, 因此应该设计合适的帧协议,以区分上下文
lr2131 2017-07-29
  • 打赏
  • 举报
回复
回环测试,检查软件逻辑问题! 还有问题,在检查硬件方面的问题!
worldy 2017-07-11
  • 打赏
  • 举报
回复
串口助手打开了串口,你的mfc程序要打开会返回失败,检查返回值
worldy 2017-07-11
  • 打赏
  • 举报
回复
串口被占用,不能再次打开

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧