Я должен работать на последовательном порту со скоростью передачи данных, равной BR300.Однако команды cfsetspeed (&RSopt, (speed_t)B300);
и tcsetattr (fd, TCSANOW, &RSopt);
не изменяют скорость.Как я убедился, эти команды работают правильно для скоростей B0 и выше B300.
Как установить скорость передачи последовательного порта на B300.
См. Мой код ниже:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int main ()
{
struct termios RSopt;
int fd;
fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );
tcgetattr(fd, &RSopt);
cfmakeraw(&RSopt);
printf("Current speed: ");
printf("%d\n",RSopt.c_ispeed);
printf("Change speed to 7 (B300)\n");
cfsetspeed (&RSopt, (speed_t)B300);
tcsetattr (fd, TCSANOW, &RSopt);
//-------------------------------------------------------
tcgetattr(fd, &RSopt);
printf("Current speed: ");
printf("%d",RSopt.c_ispeed);
printf(" <--- speed not changed!\n");
printf("Change speed to 9 (B1200)\n");
cfsetspeed (&RSopt, (speed_t)B1200);
tcsetattr (fd, TCSANOW, &RSopt);
//-------------------------------------------------------
tcgetattr(fd, &RSopt);
printf("Current speed: ");
printf("%d\n",RSopt.c_ispeed);
printf("Change speed to 8 (B600)\n");
cfsetspeed (&RSopt, (speed_t)B600);
tcsetattr (fd, TCSANOW, &RSopt);
tcgetattr(fd, &RSopt);
printf("Current spped: ");
printf("%d\n",RSopt.c_ispeed);
close(fd);
}