У меня возникли проблемы с выбором правильных настроек для последовательного порта, который нужно открыть. информация У меня следующий:Ошибка чтения/открытия последовательного порта в C, Linux
- Синхронизация: Метод Асинхронный
- Связь Метод: дуплексной передачи
- Скорость передачи: 9600 бит (бит в секунду)
- Код передачи: 8-битные данные
- Конфигурация данных: начальный бит 1, данные 8 бит + четность 1, стоповый бит 1
- Контроль ошибок: горизонтальные (CRC) и вертикальные (четные числа) паритеты
- 1 байтовая конфигурация ПК не должен использовать управляющий сигнал (DTR, DSR, RTS и CTS) во время этого соединения.
Что у меня есть что-то вроде:
bool configurePort(void) {
struct termios port_settings;
bzero(&port_settings, sizeof(port_settings));
tcgetattr(fd, &port_settings);
cfsetispeed(&port_settings, B9600);
cfsetospeed(&port_settings, B9600);
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;
// parity bit
//port_settings.c_cflag &= ~PARENB;
//port_settings.c_cflag &= ~PARODD;
// hardware flow
port_settings.c_cflag &= ~CRTSCTS;
// stop bit
//port_settings.c_cflag &= ~CSTOPB;
port_settings.c_iflag = IGNBRK;
port_settings.c_iflag &= ~(IXON | IXOFF | IXANY);
port_settings.c_lflag = 0;
port_settings.c_oflag = 0;
port_settings.c_cc[VMIN] = 1;
port_settings.c_cc[VTIME] = 0;
port_settings.c_cc[VEOF] = 4;
tcsetattr(fd, TCSANOW, &port_settings);
return true;
}
Пробовал различные модификации, но ничего, кажется, работает.
Устройство подключено через USB-последовательный порт (ttyUSB0), и у меня есть разрешения. Он открывает устройство, отправляет (?) Данные, но никогда ничего не получает ...
Может кто-нибудь указать мне, что делать?
Ваш комментарий не конструктивна и не имеет отношения к вопросу. Более того, это больше C, чем C++ – kometonja
Вам нужно проверить коды возврата из ** tcgetattr() ** и ** tcsetattr() **, тем более, что вы столкнулись с проблемами. Возможно, это не сделано в примерах, но проверка кодов возврата - это правильное средство для написания надежного кода. Вы не указали, является ли это каноническим вводом-выводом или нет. Определение VEOF в сыром режиме нелогично. Вы не установили паритет. Исследование [Настройка правильных режимов терминала] (http://www.chemie.fu-berlin.de/chemnet/use/info/libc/libc_12.html#SEC237) и [Руководство по серийному программированию для операционных систем POSIX] (http://www.cmrr.umn.edu/~strupp/serial.html) – sawdust