设置非共同的BaudRate,MATLAB 2017& termios.h

时间:2018-01-13 18:25:54

标签: c linux matlab serial-port baud-rate

我的操作系统是Ubuntu 16.04& MATLAB R2017a。

当我试图以非常见的波特率收听串口时,我收到错误:

s = serial('/dev/ttyUSB0','BaudRate',4000001) 
f=open(s);

Open failed: BaudRate could not be set to the specified value.

我发现,有一个带有波特率定义的termios.h文件,比如那个

#define  B3500000 0010016
#define  B4000000 0010017

如果我设置未定义的波特率,我会收到错误。

所以,要以非常见的速度通过终端收听,我正在使用这段代码:

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <asm/termios.h>

int main(int argc, char* argv[]) {

    if (argc != 3) {
        printf("%s device speed\n\nSet speed for a serial device.\nFor instance:\n    %s /dev/ttyUSB0 75000\n", argv[0], argv[0]);                   
        return -1;
    }

    int fd = open(argv[1], O_RDONLY);

    int speed = atoi(argv[2]);

    struct termios2 tio;
    ioctl(fd, TCGETS2, &tio);
    tio.c_cflag &= ~CBAUD;
    tio.c_cflag |= BOTHER;
    tio.c_ispeed = speed;
    tio.c_ospeed = speed;
    int r = ioctl(fd, TCSETS2, &tio);
    close(fd);

    if (r == 0) {
        printf("Changed successfully.\n");
    } else {
        perror("ioctl");
    }
} 

之后,我能够以非常见的串行速度收听串口。

然后我回到Matlab,尝试设置在终端中工作正常的波特率。而且我仍然得到相同的错误,甚至更多,在创建串行对象后,所有设置都丢失了,并且它在终端中无法正常工作。

我认为Matlab正在使用一些基于termios.h的编译库,因此需要重新编译。 我错了吗?是否有可能解决这个问题?

还有另一种方法 - 为串口制作C程序然后使用MEX,用matlab连接它,看起来更不自然。

0 个答案:

没有答案