另外贴上我的串口属性配置,求大神帮忙看看有没有错误的地方:
static int UART2_Init(void)
{
struct termios opt; //属性描述
fdUart2 = open(DEV_UART2, O_RDWR | O_NOCTTY);
if(fdUart2 < 0)
{
perror(DEV_UART2);
return -1;
}
tcgetattr(fdUart2, &opt); //获取串口属性结构体对象
cfsetispeed(&opt, B38400); //设置输入波特率
cfsetospeed(&opt, B38400); //设置输出波特率
/* raw mode */ //偶校验
opt.c_lflag &= ~(ECHO | ICANON | IEXTEN |ISIG); //设置本地标志:不进行回送,关闭规范输入,关闭扩充输入字符处理,关闭终端产生的信号
opt.c_iflag &= ~(IXON | ISTRIP); // 关闭输出流控制, 不剥除第8位
opt.c_iflag |= (ICRNL | BRKINT | INPCK);// 将输入的CR转换为NL,使得输入和输出队列被刷新 ,打开奇偶校验
opt.c_oflag &= ~(OPOST); // 设置输出标志:不执行输出处理
opt.c_cflag &= ~(PARODD | CSIZE); // 关闭输入输出是奇校验 ,使用屏蔽位
opt.c_cflag |= (CS8 | CLOCAL | CREAD | PARENB);//8位数据位,保证程序不会占用串口,能够从串口读取输入数据,允许输出产生奇偶信息以及输入的奇偶校验
/*'DATA_LEN' bytes can be read by serial*/
opt.c_cc[VMIN] = DATA_LEN; //读取字符的最少个数
opt.c_cc[VTIME] = 1; //读取一个字符等待1*(1/10)s
tcflush(fdUart2,TCIOFLUSH); //清空所有正在发生的IO数据
if (tcsetattr(fdUart2, TCSANOW, &opt) < 0) //激活配置(将修改后的termios数据设置到串口)
{
return -1;
}
return fdUart2;
}
|