我從linux發送數據字節到串口RS232的窗口然後一切正常,只有我必須處理0xa從linux發送,因爲windows將其讀爲0xd + 0xa。 但是當我從Windows到Linux的一些字節發送數據字節被替換爲 - 窗口發送 - 0xd中Linux的接受是0xA 窗口發送 - 爲0x11 Linux的整數東西收到垃圾tyte價值8200linux和windows之間的串行通信
普萊舍解釋什麼不順心的時候我從Windows發送數據到Linux。 由於事先
Windows串行端口初始化
char *pcCommPort = "COM1";
hCom = CreateFile(TEXT("COM1"),
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
fSuccess = GetCommState(hCom, &dcb);
FillMemory(&dcb, sizeof(dcb),0);
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = CBR_115200; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
dcb.fOutxCtsFlow = false;
fSuccess = SetCommState(hCom, &dcb);
buff_success = SetupComm(hCom, 1024, 1024);
COMMTIMEOUTS cmt;
// ReadIntervalTimeout in ms
cmt.ReadIntervalTimeout = 1000;
cmt.ReadTotalTimeoutMultiplier = 1000;
cmt.ReadTotalTimeoutConstant=1000;
timeout_flag = SetCommTimeouts(hCom, &cmt);
窗口寫serial-
WriteFile(hCom, buffer, len, &write, NULL);
Linux的串行initialize-
_fd_port_no = open("//dev//ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
tcgetattr(_fd_port_no, &options);
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CS8);
options.c_cflag|=(CLOCAL|CREAD);
options.c_cflag &=~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag |= (IXON | IXOFF | IXANY);
options.c_cflag &= ~ CRTSCTS;
tcsetattr(_fd_port_no, TCSANOW, &options);
讀取串口的linux
while(read(_fd_port_no,buffer+_buffer_len,sizeof(buffer))>0)
{
_buffer_len = _buffer_len+sizeof(buffer);
}
是的,正如我從Linux告訴windows只檢測到NL/CR問題,但我解決了它通過字節替換, ,但你有任何關於從Windows發送到Linux(字節替換策略)的串行數據的想法。 其實我有送200 KB的文件在200字節的塊通過串行所以它如果從Windows發送到Linux
字節的可更換
所以你要發送原始字節,而不是發短信?顯示發送和接收的代碼;儘可能少的代碼當然。 –
請注意,「0x0a」是換行符,「0x0d」是回車符。聽起來像典型的NL/CR問題。 –
如果您從Windows發送文件,是否以文本模式或二進制模式打開了該文件?確保兩端的所有串行設置都相同,例如你似乎在Linux端有XON/XOFF,但不在Windows端(不使用XON/XOFF) – nos