Linux串口编程-4-odd校验

来源:互联网 发布:肉炖久了吃好吗 知乎 编辑:程序博客网 时间:2024/06/08 19:52
#include     <stdio.h>#include     <stdlib.h>#include     <unistd.h>#include     <sys/types.h>#include     <sys/stat.h>#include     <fcntl.h>#include     <termios.h>#include     <errno.h>main(){    int fd;    int i;    int len;    int n = 0;    char b[1]={0x00};    char read_buf[256];    char write_buf[256];    struct termios opt;    fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);    //默认为阻塞读方式    if(fd == -1)    {        perror("open serial 0\n");        exit(0);    }    tcgetattr(fd, &opt);    cfsetispeed(&opt, B9600);    cfsetospeed(&opt, B9600);    if(tcsetattr(fd, TCSANOW, &opt) != 0 )    {       perror("tcsetattr error");       return -1;    }    opt.c_cflag &= ~CSIZE;    opt.c_cflag |= CS8;    opt.c_cflag &= ~CSTOPB;    opt.c_cflag &= ~PARENB;    opt.c_cflag &= ~INPCK;    opt.c_cflag |= (CLOCAL | CREAD);    opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);    opt.c_oflag &= ~OPOST;    opt.c_oflag &= ~(ONLCR | OCRNL);    //添加的    opt.c_iflag &= ~(ICRNL | INLCR);    opt.c_iflag &= ~(IXON | IXOFF | IXANY);    //添加的//    //=======================================//    //EVEN//    opt.c_cflag |=  PARENB | CS8;//    opt.c_iflag &= ~PARODD;//    //=======================================    //=======================================    //odd    opt.c_cflag |=  PARENB | CS8 | PARODD;    //=======================================//    //=====================================//    //space//    opt.c_cflag |=  PARENB | CS8 | 0X40000000 | PARODD;//    //=====================================//    //=====================================//    //mark//    opt.c_cflag |= PARENB | CS8 | CMSPAR ;//    opt.c_cflag &= PARODD;//    //=====================================    opt.c_cc[VTIME] = 0;    opt.c_cc[VMIN] = 0;    tcflush(fd, TCIOFLUSH);    printf("configure complete\n");    if(tcsetattr(fd, TCSANOW, &opt) != 0)    {        perror("serial error");        return -1;    }    printf("start send and receive data\n");    while(1)    {        n = 0;        len = 0;        printf("hw\n");        bzero(read_buf, sizeof(read_buf));    //类似于memset        bzero(write_buf, sizeof(write_buf));        write(fd,b,sizeof b);        usleep(50000);    }}
实验过程,下位机将SM2=1,char b[1]={0x00};能够进入中断!char b[1]={0x01};不能够进入中断!