在Linux串口编程的一些问题解决(7)

2019-04-15 20:03

还存在这样的情况:发送字符0X0d的时候,往往接收端得到的字符是0X0a,原因是因为在串口设置中c_iflag和c_oflag中存在从NL-CR和CR-NL的映射,即串口能把回车和换行当成同一个字符,可以进行如下设置屏蔽之:

Opt.c_iflag &= ~ (INLCR | ICRNL | IGNCR);

Opt.c_oflag &= ~(ONLCR | OCRNL);6.读写串口发送数据方式如下,write函数将返回写的位数或者当错误时为-1。

char buffer[1024];

int length;

int nByte;

nByte = write(fd, buffer, length);

读取数据方式如下,原始数据模式下每个read函数将返回实际串口收到的字符数,如果串口中没有字符可用,回叫将会阻塞直到以下几种情况:有字符进入;一个间隔计时器失

效;错误发送。

在打开串口成功后,使用fcntl(fd, F_SETFL, FNDELAY)语句,可以使read函数立即返回而不阻塞。FNDELAY选项使read函数在串口无字符时立即返回且为0。

char buffer[1024];

int length;

int readByte;

readByte = read(fd, buffer, len);

注意:设置为原始模式传输数据的话,read函数返回的字符数是实际串口收到的字符数。Linux下直接用read读串口可能会造成堵塞,或者数据读出错

误,此时可使用tcntl或者select等函数实现异步读取。用select先查询com口,再用read去读就可以避免上述错误。7.关闭串口串口作为文件来处理,所以一般的关闭文件函数即可:

close(fd);8.例子这个例子中,需要打开串口1,设置9600波特率、8位数据位、1位停止位以及空校验,之后利用while语句循环判断串口中是否可以读出数据,将串口中数据连续读出后重新写回到串口中。

该程序可与minicom联合测试。

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <errno.h>main() {

#include <stdio.h> int fd; int i; int len;

int n = 0;

char read_buf[256];

char write_buf[256];

struct termios opt;fd = open(\O_NOCTTY); //默认为阻塞读方式

if(fd == -1) {

perror(\

exit(0);

}tcgetattr(fd, &opt);

cfsetispeed(&opt, B9600);

cfsetospeed(&opt, B9600);if(tcsetattr(fd, TCSANOW, &opt) != 0 ) {

perror(\

return -1;

}opt.c_cflag &= ~CSIZE;

opt.c_cflag |= CS8;

opt.c_cflag &= ~CSTOPB;

opt.c_cflag &= ~PARENB;


在Linux串口编程的一些问题解决(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:青州项目可行性报告1650136325 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: