堵塞:
int uart_open(const char* dev, unsigned int baudrate)
{
int fd;
struct termios term;
//fd = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK);
fd = open(dev, O_RDWR | O_NOCTTY);
if(fd < 0)
{
printf("open dev:%s baud:%d,error:%s\n", dev, baudrate, strerror(errno));
}
bzero(&term, sizeof(term));
cfmakeraw(&term);
term.c_cflag |= CREAD;
tcgetattr(fd, &term);
buildBaudrate(baudrate, &term);
buildDataBit(8, &term);
buildStopBit(1, &term);
buildParity(PB_NONE, &term);
term.c_iflag &= ~ICRNL;
term.c_iflag &= ~INLCR;
term.c_iflag |= IGNBRK;
term.c_oflag &= ~OCRNL;
term.c_oflag &= ~ONLCR;
term.c_oflag &= ~OPOST;
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ISIG;
term.c_lflag &= ~IEXTEN;
term.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ECHOCTL|ECHOPRT|ECHOKE);
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
term.c_cc[VTIME] = 1;
term.c_cc[VMIN] = 0;
tcsetattr(fd, TCSANOW, &term);
tcflush(fd, TCIOFLUSH);
return fd;
}
fd = open(dev, O_RDWR | O_NOCTTY);
term.c_cc[VTIME] = 1;
term.c_cc[VMIN] = 0;
非堵塞:
int uart_open(const char* dev, unsigned int baudrate)
{
int fd;
struct termios term;
fd = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK);
if(fd < 0)
{
printf("open dev:%s baud:%d,error:%s\n", dev, baudrate, strerror(errno));
}
bzero(&term, sizeof(term));
cfmakeraw(&term);
term.c_cflag |= CREAD;
tcgetattr(fd, &term);
buildBaudrate(baudrate, &term);
buildDataBit(8, &term);
buildStopBit(1, &term);
buildParity(PB_NONE, &term);
term.c_iflag &= ~ICRNL;
term.c_iflag &= ~INLCR;
term.c_iflag |= IGNBRK;
term.c_oflag &= ~OCRNL;
term.c_oflag &= ~ONLCR;
term.c_oflag &= ~OPOST;
term.c_lflag &= ~ICANON;
term.c_lflag &= ~ISIG;
term.c_lflag &= ~IEXTEN;
term.c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ECHOCTL|ECHOPRT|ECHOKE);
//特殊字符接受不到(16进制下)
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tcsetattr(fd, TCSANOW, &term);
tcflush(fd, TCIOFLUSH);
return fd;
}