hc = CreateFile(Com, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hc == INVALID_HANDLE_VALUE)
{
MessageBox("Open COM error!","Error Prompt",MB_ICONSTOP|MB_OK);
return bRet;
}
if(!GetCommState(hc, &dcb))
{
MessageBox("Set COM error!","Error Prompt",MB_ICONSTOP|MB_OK);
CloseHandle(hc);
return bRet;
}
dcb.BaudRate = COMM_SPEED2;//COMM_SPEED38400
dcb.ByteSize = COMM_BYTE;
dcb.Parity = COMM_PARITY;
dcb.fParity = COMM_ENABLE_PARITY;
dcb.StopBits = TWOSTOPBITS;//COMM_STOP
dcb.fOutxCtsFlow= FALSE;
dcb.fOutxDsrFlow= FALSE;
dcb.fBinary = TRUE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
if(!SetCommState(hc, &dcb))
{
CloseHandle(hc);
MessageBox("Set COM error!!","Error Prompt",MB_ICONSTOP|MB_OK);
return bRet;
}
GetCommModemStatus(hcc,&dwStatus);
commtimeouts.ReadIntervalTimeout = 400;
commtimeouts.ReadTotalTimeoutConstant = 500;
commtimeouts.ReadTotalTimeoutMultiplier = 500;
commtimeouts.WriteTotalTimeoutConstant = 500;
commtimeouts.WriteTotalTimeoutMultiplier = 2000;
SetCommTimeouts(hc, &commtimeouts);
PurgeComm(hc, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
BYTE blockdata[41] ={0x00};
BYTE checkdata[13] ={0x3a,0x16,0x30,0x05,0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x0a};
BYTE readdata[10]={0x00};
for(i = 0; i < download.bank_no; i++)
{
count=0;
itoa(i,sss,10);
strcpy(ssc, "Transfer error, block No:");
strcat(ssc, sss);
repe:
//發送校驗和和塊號
int temp = download.checksum[i] & 0xff;
blocknum = download.blockno[i] - temp&0x7f;
checkdata[5] = (blocknum>>8)&0xff;
checkdata[6] = blocknum & 0xff;
checkdata[7] = (download.checksum[i]>>8)&0xff;
checkdata[8] = download.checksum[i] & 0xff;
CheckSum(checkdata,13);
WriteFile(hc,checkdata ,13, &aa, NULL);
Sleep(200);
ReadFile(hc, readdata, 1, &aa, NULL);
ReadFile(hc, &readdata[1], 8, &aa, NULL);
if (readdata[4]==0x88)
{
Sleep(200);
}
else
{
count++;
if (count>=3)
{
MessageBox(ssc,"Error",MB_ICONSTOP|MB_OK);
return bRet;
}
else
goto repe;
}
uj5u.com熱心網友回復:
此類問題,我說說我的做法,先把協議看仔細了,下載一個crc或者其他檢驗工具,然后用個串口小工具,hex格式發送,除錯通過了在coding。good luckuj5u.com熱心網友回復:
首先謝謝你,情況是這樣,發送的資料都是對的,也用監控軟體看了,crc也是對的,是不是跟timeouts的設定有關,謝謝uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
你這個程式有點糙,使用CSerialPort,找找這個類有現成!好用uj5u.com熱心網友回復:
提醒:串口線分兩種:自環和非自環。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/106584.html
