Настройка UART
Добавлено: Ср мар 11, 2015 14:22:55
День добрый.
Я пишу программу под Raspberry на C++.
Мне необходимо принимать данные по UART пакетами, условие конца пакета это расстояние между ними в 5 байт(приблизительно 2.6мС(скорость 19200))
Я Инициализирую UART так:
Реально промежутки между командами около секунды. Поэтому промежуток 0.1С меня устроит. Хотя я не где не нашел можно ли задавать меньше. Можно ли написать serial.c_cc[VTIME] = 0.1;?
Если я все правильно понимаю, то по-идее UART будет заполнять свой буффер пока не примет 255 байт или промежуток времени после последнего принятого байта превысит VTIME*0.1.
Но в реальности UARt формирует мне у себя в буфере 8-10 символов.
В основном теле программы я считываю буфер таким образом:
Читал у вас на форуме тему с проблемой подобной моей, но ответов я не нашел:
http://radiokot.ru/forum/viewtopic.php?f=20&t=59386
Я пишу программу под 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
Если я все правильно понимаю, то по-идее UART будет заполнять свой буффер пока не примет 255 байт или промежуток времени после последнего принятого байта превысит VTIME*0.1.
Но в реальности UARt формирует мне у себя в буфере 8-10 символов.
В основном теле программы я считываю буфер таким образом:
Код: Выделить всё
if (rcount= read(fd, buffer, sizeof(buffer)) > 0)
{}http://radiokot.ru/forum/viewtopic.php?f=20&t=59386