user-0 提问: VS2013用C写串口收发数据，发送数据没问题，然后自己接收奇怪的错误

回复:
user: user-1
content: 为啥我运行后啥数据也没有

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:#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("COM1"),//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 = 115200;//波特率为9600     dcb1.ByteSize = 8;//每个字节有8位     dcb1.Parity = NOPARITY;//无奇偶校验位     dcb1.StopBits = TWOSTOPBITS;//两个停止位     dcb1.fParity = FALSE;     dcb1.fNull = FALSE;     SetCommState(hCom1, &dcb1);     DWORD wCount,n;//读取的字节数     FILE *fp1;     fp1 = fopen("串口发送的数据11.txt", "a+");     unsigned char str[8]; //  PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区     n=0;     while (1) {         wCount=8;         if (!ReadFile(hCom1, str, wCount, &wCount, NULL)) {             printf("读串口失败!");             break;         }         for (i = 0; i < wCount; i++) {             fprintf(fp1, "%02X ", str[i]);             printf("%02X ",str[i]);             if (n%16==0) printf("\n %08X - ",n);             if (n%320==0) system("cls");             n++;             printf("%02X ",str[i]);         }         fflush(fp1);     }     fclose(fp1);     CloseHandle(hCom1); } 非常感谢，把wCount改成8就可以了，老师真的非常感谢。祝您工作顺利，天天开心哦！

user: user-2
content: #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("COM1"),//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 = 115200;//波特率为9600     dcb1.ByteSize = 8;//每个字节有8位     dcb1.Parity = NOPARITY;//无奇偶校验位     dcb1.StopBits = TWOSTOPBITS;//两个停止位     dcb1.fParity = FALSE;     dcb1.fNull = FALSE;     SetCommState(hCom1, &dcb1);     DWORD wCount,n;//读取的字节数     FILE *fp1;     fp1 = fopen("串口发送的数据11.txt", "a+");     unsigned char str[8]; //  PurgeComm(hCom1, PURGE_TXCLEAR | PURGE_RXCLEAR);//清空缓冲区     n=0;     while (1) {         wCount=8;         if (!ReadFile(hCom1, str, wCount, &wCount, NULL)) {             printf("读串口失败!");             break;         }         for (i = 0; i < wCount; i++) {             fprintf(fp1, "%02X ", str[i]);             printf("%02X ",str[i]);             if (n%16==0) printf("\n %08X - ",n);             if (n%320==0) system("cls");             n++;             printf("%02X ",str[i]);         }         fflush(fp1);     }     fclose(fp1);     CloseHandle(hCom1); }

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:如果pormon中显示的数据没错而你的程序有错，那就是你接收数据或显示数据出错； 如果pormon中显示的数据也出错，那就是串口参数设置或硬件传输出错。  老师您好，我用串口助手接收到的数据和发送的数据一致没有问题。但是串口助手不能保存全部的数据，所以我还是接收程序的问题，还是上述的问题，把wCount变大一点，还是固定的那四个字节出错，其他没有错误。但是那个wCount只能到24*10，再大就会读串口失败。您能接着帮我指导一下程序中的错误吗？非常感谢！

user: user-2
content: 推荐使用portmon软件辅助调试串口通信程序。

user: user-2
content: 数据线太长？

user: user-2
content: portmon

user: user-2
content: 如果pormon中显示的数据没错而你的程序有错，那就是你接收数据或显示数据出错； 如果pormon中显示的数据也出错，那就是串口参数设置或硬件传输出错。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:portmon更底层，实现了串口抓包。 引用 5 楼 zhao4zhong1 的回复:portmon更底层，实现了串口抓包。那我接收程序可能是哪里出错了呢，固定的错误是怎么回事呢，感谢您的回复

user: user-2
content: portmon更底层，实现了串口抓包。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:推荐使用portmon软件辅助调试串口通信程序。这个串口助手有什么优势吗，我就用的普通的串口助手

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:数据线太长？跟数据线长度没关吧，我用虚拟串口调试也是一样的错误。我想把读取的数据组弄大点，但是那样就读取失败了，最多能读取多少个字节呢