编写c语言串口读取数据的时候发送的数据为:5A A5 01 00 00 00等,收到的数据不是5A A5 开头的,想了一下加当型循环,加了之后发现没办法重新进行读取,该怎么让程序收到的数据是5A A5 开头的? 麻烦再帮我看看程序有什么错误。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include "tchar.h"
int main()
{
HANDLE hCom1;
hCom1 = CreateFile(_T("COM3"),//COM1口
GENERIC_READ | GENERIC_WRITE,//允许读和写
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
0,//同步方式
NULL);
if (hCom1 == (HANDLE)-1)
{
printf("打开COM失败!\n");
return FALSE;
}
else
{
printf("COM打开成功!\n");
}
SetupComm(hCom1, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout = 1000;
TimeOuts.ReadTotalTimeoutMultiplier = 500;
TimeOuts.ReadTotalTimeoutConstant = 5000;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier = 500;
TimeOuts.WriteTotalTimeoutConstant = 2000;
SetCommTimeouts(hCom1, &TimeOuts);//设置超时
DCB dcb1;
GetCommState(hCom1, &dcb1);
dcb1.BaudRate = 19200;//波特率为19200
dcb1.ByteSize = 8;//每个字节有8位
dcb1.Parity = NOPARITY;//无奇偶校验位
dcb1.StopBits = TWOSTOPBITS;//两个停止位
dcb1.fParity = FALSE;
dcb1.fNull = FALSE;
SetCommState(hCom1, &dcb1);
DWORD wCount=28;//读取的字节数
PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区
/*TAOFENG_01:*/
while (1)
{
unsigned char str[256]={0}/*=0x100F*/;
unsigned int i = 0;
if (!ReadFile(hCom1, str, wCount, &wCount, NULL))
{
printf("读串口失败!");
return FALSE;
}
else
{
printf("读串口成功!\n读取数据为:\n");
printf("第一第二个字节为:%02X% 02X\n ",str[1],str[2]);
for(i=0;i<wCount;i++)
{
printf("%02X ",str[i]);
}
printf("\n");
}
}
//PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区
/* Sleep(300);
goto TAOFENG_01;*/
}