#做了一个串口接收的 程序用串口发送数据的时候收到的数据错误,能不能帮我看看哪里错了。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include "tchar.h"
#include <iostream>
int main()
{
/*****************************打开串口*************************************/
HANDLE hCom;//全局变量,串口句柄
hCom = CreateFile(_T("COM3"),//COM3口
GENERIC_READ | GENERIC_WRITE,//允许读和写
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
0,//同步方式
//FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERAPPLE,//重叠方式
NULL);
if(hCom == (HANDLE)-1)
{
printf("打开COM失败!");
}
else {
printf("打开COM成功!");
}
/****************配置串口***************/
SetupComm(hCom, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是20480
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout = 1000;//设定读超时
TimeOuts.ReadTotalTimeoutMultiplier = 500;
TimeOuts.ReadTotalTimeoutConstant = 5000;
TimeOuts.WriteTotalTimeoutMultiplier = 500;//设定写超时
TimeOuts.WriteTotalTimeoutConstant = 2000;
SetCommTimeouts(hCom, &TimeOuts);//设置超时
DCB dcb;
GetCommState(hCom, &dcb);
dcb.BaudRate = 19200;//波特率为115200
dcb.ByteSize = 8;//每个字节有8位
dcb.Parity = NOPARITY;//无奇偶校验位
dcb.StopBits = ONESTOPBIT;//一个停止位
dcb.fParity = FALSE;
dcb.fNull = FALSE;
SetCommState(hCom, &dcb);
PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);//在读写串口之前清空缓冲区
/********同步写串口********/
TAOFENG_01:
/* int a;*/
/*char * p = "你好\r\n";
char *sendData;
sendData = p;*/
// char sendData[256] = {0};//写入串口缓存区的数组
// /*DWORD dwWriteLen = 0;*/
// for(a=0; a<16; a++)
// {
// sendD[a] = a;
// }
// DWORD dwWriteLen = 0;
// if(!WriteFile(hCom, sendData, 16, &dwWriteLen, NULL))/*Read*/
// {
// printf("串口发送数据失败!\n");
// }
// else
// {
// printf("串口发送数据成功!\n");
// printf("发送的数据为:\n");
// printf("%s",sendData);
// }
// printf("\n");
// Sleep(300);
//goto TAOFENG_01;
/********同步读串口********/
//unsigned char sendData[256] = {0};//写入串口缓存区的数组
char sendData[256]=0x100F;
DWORD dwWriteLen = 0;
if(!ReadFile(hCom, sendData, 2, &dwWriteLen, NULL))/*Read*/
{
printf("串口接收数据失败!\n");
}
else
{
printf("串口接收数据成功!\n");
printf("接收的数据为:\n");
printf("%02x", sendData);
}
printf("\n");
Sleep(300);
goto TAOFENG_01;
/***********关闭串口***********/
CloseHandle(hCom);
std::cout << "Hello World!\n";
return 0;
}