Проблема с изменением скорости последовательного порта на BR300 или ниже в C++ на Raspberry PI 3

Я должен работать на последовательном порту с скоростью передачи данных, равной 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);
}

0 ответов

Другие вопросы по тегам