为Arduino禁用带有<termios.h>的DTR

时间:2015-05-09 17:54:29

标签: c linux serial-port arduino

我正在尝试通过串口与Arduino进行通信。

它可以工作,但DTR线路(可能)在开始时切换,因此Arduino复位(它将DTR连接到硬件复位引脚)。

这是我的代码:

// Without this it won't work
#define _POSIX_SOURCE
#define _GNU_SOURCE

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    struct termios toptions;
    int fd = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK );

    int iflags = TIOCM_DTR;
    ioctl(fd, TIOCMBIC, &iflags); // turn off DTR

    speed_t brate = B9600;
    cfsetispeed(&toptions, brate);
    cfsetospeed(&toptions, brate);

    toptions.c_cflag &= ~PARENB;
    toptions.c_cflag &= ~CSTOPB;
    toptions.c_cflag &= ~CSIZE;
    toptions.c_cflag |= CS8;
    toptions.c_cflag &= ~CRTSCTS;
    toptions.c_cflag |= CREAD | CLOCAL;
    toptions.c_iflag &= ~(IXON | IXOFF | IXANY);
    toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    toptions.c_oflag &= ~OPOST;
    toptions.c_cc[VMIN]  = 0;
    toptions.c_cc[VTIME] = 0;
    tcsetattr(fd, TCSANOW, &toptions);
    tcsetattr(fd, TCSAFLUSH, &toptions);

    // talk with arduino
}

你可以看到我在

尝试了一些东西
int iflags = TIOCM_DTR;
ioctl(fd, TIOCMBIC, &iflags); // turn off DTR

但它没有效果。

如何完全禁用DTR线路控制?

PS。我不明白所有正在设置的标志,它是从我在网上发现的东西拼凑而成的

0 个答案:

没有答案