Настройка UART

Обсуждаем контроллеры компании Atmel.
Закрыто
Родился
Сообщения: 12
Зарегистрирован: Пн апр 07, 2014 11:44:37

Сообщение Maguark »

День добрый.
Я пишу программу под Raspberry на C++.
Мне необходимо принимать данные по UART пакетами, условие конца пакета это расстояние между ними в 5 байт(приблизительно 2.6мС(скорость 19200))
Я Инициализирую UART так:
Код:
fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY );

if (fd == -1)
{
perror(argv[1]);
return -1;
}
if (tcgetattr(fd, &serial) < 0)
{
perror("Getting configuration");
return -1;
}
// Set up Serial Config
serial.c_iflag = 0;
serial.c_oflag = 0;
serial.c_lflag = 0;
serial.c_cflag = 0;

serial.c_cc[VMIN] = 255;
serial.c_cc[VTIME] = 1;

serial.c_cflag = B19200 | CS8 | CREAD | PARENB;
serial.c_cflag &=~CSTOPB;

tcsetattr(fd, TCSANOW, &serial); //apply config

Реально промежутки между командами около секунды. Поэтому промежуток 0.1С меня устроит. Хотя я не где не нашел можно ли задавать меньше. Можно ли написать serial.c_cc[VTIME] = 0.1;?
Если я все правильно понимаю, то по-идее UART будет заполнять свой буффер пока не примет 255 байт или промежуток времени после последнего принятого байта превысит VTIME*0.1.
Но в реальности UARt формирует мне у себя в буфере 8-10 символов.
В основном теле программы я считываю буфер таким образом:
Код:
if (rcount= read(fd, buffer, sizeof(buffer)) > 0)
{}

Читал у вас на форуме тему с проблемой подобной моей, но ответов я не нашел:
viewtopic.php?f=20&t=59386
Последний раз редактировалось Gudd-Head Чт мар 12, 2015 14:02:13, всего редактировалось 1 раз.
Причина: Тема-дубль
Реклама
Закрыто

Вернуться в «AVR»