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};不能够进入中断!