我正在使用串行通信接口;运行Linux内核2.6.36的SBC( TS-7200 )通过RS232将数据发送到PC(运行Windows)。数据封装在数据包(每字节字节数)中并发送。当TS尝试发送整数(uint8_t)(10)
时会出现此问题,特别是\n
的ASCII,终止字符(0xA)
;不是随机的吗?!
奇怪的是,如果我使用 Arduino Uno 执行相同的操作,将发送和接收整数10而不会出现问题!所以我的结论是Linux会像0b00001010
一样\n
,刷新串行缓冲区并且不会发送10
,而Arduino则不会。在线搜索我发现文件可以在二进制模式(O_BINARY)或文件模式下打开,但显然这在Linux中无法使用;是对的吗?有没有办法让Linux像Arduino一样?
谢谢你, 费德里科
PS:我忘了提及我正在使用 C
答案 0 :(得分:0)
您必须将串口设置为“原始”模式:
struct termios tty;
unsigned int sfd;
/* Open the serial port */
sfd = open("/dev/ttyS1", O_RDWR | O_NOCTTY);
/* Get current port config. */
tcgetattr(sfd, &tty);
/* Set youd speed/parity, etc. */
/* ... */
/*
Set raw mode, equivalent to:
tty->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
| INLCR | IGNCR | ICRNL | IXON);
tty->c_oflag &= ~OPOST;
tty->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
tty->c_cflag &= ~(CSIZE | PARENB);
tty->c_cflag |= CS8;
*/
cfmakeraw(&tty);
tcsetattr(sfd, TCSANOW, &tty);
/* Do read/write */
小心甚至取消激活软件流控制(XON / XOFF),以便发送数据包中的所有数据。
请查看文章How to read a binary data over serial terminal in C program?