示波器发出一段波形,三个字节,有起始位,1位停止位。
波形解码如下
0000000001 0011110011 0100001011
用串口助手接收到的hex:009EA1
C++程序:
void com_init()
{
COMSTAT ComStat;
DWORD dwErrorFlags;
hCom = CreateFile("COM1",//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if (hCom == INVALID_HANDLE_VALUE)
CloseHandle(hCom);
SetupComm(hCom,1024,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 = NOPARITY; //无奇偶校验位
dcb.StopBits = ONESTOPBIT; //1个停止位
SetCommState(hCom, &dcb);
ClearCommError(hCom,&dwErrorFlags,&ComStat);
}
void test_Version()
{
int tbit = 0;
unsigned char OutBuffer[4] = {0XAA,0xF1,0,0};
unsigned char InBuffer[3]={0};
DWORD wCount = 3; //read bytes
DWORD dwBytesWrite = 4; //写入字节数
memset(InBuffer, '\0', 3);
ReadFile(hCom,InBuffer,wCount,&wCount,NULL);
}
代码也是之前人写的,一知半解。我现在就想读取到Inbuff[3](三个字节的对应波形的值)
目前读取出来的全部都是0,请大虾帮忙指点迷津。
|